【发布时间】:2019-02-19 12:49:12
【问题描述】:
我目前正在尝试使用我自己构建的拉普拉斯内核过滤图像。但是,当使用此内核过滤输入图像时,与 SciPy 中的实现相比,它会产生意想不到的结果。
我构建的拉普拉斯核应该通过下图验证
过滤图片的代码:
im = cv2.imread("test.png",0)
im = im.astype(np.float32)
def lkern(t=1.):
ax = np.arange(np.round(-5*np.sqrt(t),0),np.round(5*np.sqrt(t),0)+1)
xx, yy = np.meshgrid(ax, ax)
kernel = -1/(np.sqrt(2*np.pi*t)*t)*np.exp(-(xx**2+yy**2)/(2*t))+
(xx**2+yy**2)/(np.sqrt(2*np.pi*t)*t**2)*np.exp(-(xx**2+yy**2)/(2*t))
return kernel.astype(np.float)
t = 25**2/2
l = lkern(t)
L = cv2.filter2D(im/255,-1,l)
plt.figure()
plt.imshow(L,cmap="gray")
plt.show()
导致
对比 SciPy 的ndimage.gaussian_laplace,结果应该是
这是非常不同的,我不知道如何正确地做到这一点。
【问题讨论】:
-
im/255当im仍然是np.uint8...如果我没记错的话,那是整数除法。顺便说一句,您能否提供原始输入图像,以便我们重现该问题? -
@DanMašek 我用
ìm = im.astype(np.float32)编辑了这个问题,应该避免整数除法。结果相同。
标签: python numpy opencv image-processing laplacianofgaussian