我正在尝试从这张人脸图像中提取血液网络:Face image
对于这样的任务,我使用的是p&;M在这个问题中发现各向异性扩散:Anisotropic diffusion 2d images。然后我使用tophat变换和blackhat变换,然后我使用一个简单的阈值设置为255,所有像素的强度值为100
问题是,在我使用阈值并尝试打开图像后,无论我以何种方式尝试,图像都显示为全黑:
简言之,我的目标是利用p&;M各向异性扩散,结构元素为5x5的平板,然后分别应用tophat和blackhat以及一个简单的阈值,之后实际上可以查看图像
以下是我如何尝试的代码:
import cv2
import import cv2 numpy as np
import warnings
face_img=mpimg.imread('path')
def anisodiff(img, niter=1, kappa=50, gamma=0.1, step=(1., 1.), option=1):
if img.ndim == 3:
m = "Only grayscale images allowed, converting to 2D matrix"
warnings.warn(m)
img = img.mean(2)
img = img.astype('float32')
imgout = img.copy()
deltaS = np.zeros_like(imgout)
deltaE = deltaS.copy()
NS = deltaS.copy()
EW = deltaS.copy()
gS = np.ones_like(imgout)
gE = gS.copy()
for ii in range(niter):
deltaS[:-1, :] = np.diff(imgout, axis=0)
deltaE[:, :-1] = np.diff(imgout, axis=1)
if option == 1:
gS = np.exp(-(deltaS/kappa)**2.)/step[0]
gE = np.exp(-(deltaE/kappa)**2.)/step[1]
elif option == 2:
gS = 1./(1.+(deltaS/kappa)**2.)/step[0]
gE = 1./(1.+(deltaE/kappa)**2.)/step[1]
E = gE*deltaE
S = gS*deltaS
NS[:] = S
EW[:] = E
NS[1:, :] -= S[:-1, :]
EW[:, 1:] -= E[:, :-1]
imgout += gamma*(NS+EW)
return imgout
new_img = anisodiff(face_img, niter=1, kappa=20, gamma=0.1, step=(1., 1.), option=1)
filterSize =(3, 3)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,
filterSize)
input_image = new_img
first_tophat_img = cv2.morphologyEx(input_image,
cv2.MORPH_TOPHAT,
kernel)
filterSize =(3, 3)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,
filterSize)
second_tophat_img = cv2.morphologyEx(input_image,
cv2.MORPH_BLACKHAT,
kernel)
ret, thresh1 = cv2.threshold(second_tophat_img, 200, 255, cv2.THRESH_BINARY)
例如,即使我将阈值设置为254,图像也会变黑
我执行了一个简单的MATLAB实现,得到了一个很好的结果
MATLAB代码:
结果:
我不知道您是否了解MATLAB,但我使用了默认参数
imdiffusefilt
(相当于代码中的anisodiff
)默认MATLAB参数等效于:
niter=5
(注意:您只使用了1次迭代,这是不够的)李>kappa=0.1
gamma=0.125
anisodiff
中使用的4个邻居)李>8邻居连接:
注意:使用4个邻居的连接是可行的,但结果不如使用8个邻居好李>
显示输出图像:
imadjust(K, stretchlim(K))
。该命令拉伸输入图像的范围,使百分位1变为0,百分位99变为1(线性拉伸)李>
还有一件事:
我没有使用固定阈值
200
,而是使用百分位95阈值:以下是代码(使用
cv2.imshow
进行测试):结果:
thresh1
:thresh2
:first_tophat_img_stretched
:相关问题 更多 >
编程相关推荐