可能重复 - How to apply Gabor wavelets to an image?
我在上面的链接中找到了答案,但我真的无法遵循它。第一个答案,即接受的答案,在进行逆FFT之前将图像的FFT与其自身相乘。这对我来说根本没有意义
这是我的问题。我试图重现论文“基于多层阈值的血管分割筛查糖尿病视网膜病变”的结果(http://search.proquest.com/openview/94a1d9b4eed15c442da4f8a62c82a83b/1?pq-origsite=gscholar&cbl=326339)
def gabor_wavelet(rows, cols, kmax, f, orientation, scale, delt2):
k = (kmax / (f ** scale)) * np.exp(1j * orientation * np.pi / 8)
kn2 = np.abs(k) ** 2
gw = np.zeros((rows, cols), np.complex128)
for m in range(int(-rows/2) + 1, int(rows / 2) + 1):
for n in range(int(-cols/2) + 1, int(cols / 2) + 1):
t1 = np.exp(-0.5 * kn2 * (m**2 + n**2) / delt2)
t2 = np.exp(1j * (np.real(k) * m + np.imag(k) * n))
t3 = np.exp(-0.5 * delt2)
gw[int(m + rows/2 - 1),int(n + cols/2 - 1)] = (kn2 / delt2) * t1 * (t2 - t3)
return gw
用于绘制小波(或者是滤波器?) 对于scale = 1到4和orientation = 1到8,这些是生成的小波(绘制实部):
R = 128
C = 128
kmax = np.pi / 2
f = np.sqrt(2)
delt2 = (2 * np.pi) ** 2
fig = plt.figure()
for v in range(1, 5):
for u in range(1, 9):
gw = gabor_wavelet(R, C, kmax, f, u, v, delt2)
fig.add_subplot(4, 8, 8*(v-1) + u)
plt.imshow(np.real(gw), cmap='gray')
plt.show()
现在,主要关注的是,我有视网膜的图像,特别是倒置绿色通道,其中血管高度对比。我必须使用上面的一个小波(或过滤器?)来对其进行“一些操作”,请在此处更正滤波器和小波之间的差异。
我必须在我获得的小波和增加血管对比度的图像之间执行什么操作?:
这里也是小波绝对值的图像:
请帮助我。几天没有谷歌搜索和阅读论文的帮助,我被困在这里。我是该领域的初学者。
非常感谢
答案 0 :(得分:2)
您需要应用卷积。您使用Gabor内核对图像进行卷积,然后获取复杂结果的大小。
使用cv2.filter2D
函数应用Python中的OpenCV卷积。我认为它看起来像是:
gw = gabor_wavelet(R, C, kmax, f, u, v, delt2)
result = cv2.filter2D(image, CV_32F, gw)
result = np.absolute(result)
但也许OpenCV不会做复杂的过滤器,那就是:
gw = gabor_wavelet(R, C, kmax, f, u, v, delt2)
resultR = cv2.filter2D(image, CV_32F, np.real(gw))
resultI = cv2.filter2D(image, CV_32F, np.imag(gw))
result = np.hypot(resultR, resultI)
Disclamer :我没有运行上面的任何代码,甚至没有安装OpenCV。 :)