拉普拉斯与不同的内核

时间:2014-03-19 20:52:13

标签: python kernel

我使用python代码找到一个只有一般内核= 1(使用cv2)的图像的拉普拉斯。现在我想使用一个新的内核array([0,-1,0][-1,5,-1][0,-1,0]),但不知道如何使用我的代码实现它,或者如何编写调用内核的新代码。

ksize = 1
scale = 1
delta = 0
ddepth = cv2.CV_64F

img = cv2.imread('/Users//Desktop/Programming/image.tif')
img = cv2.GaussianBlur(img,(3,3),0)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

gray_lap = cv2.Laplacian(gray,ddepth,ksize = ksize,scale = scale,delta = delta)
dst = cv2.convertScaleAbs(gray_lap)

plt.imshow(dst, cmap = 'gray')

2 个答案:

答案 0 :(得分:3)

我不熟悉Python的OpenCV绑定,但对于自定义卷积内核,您需要filter2D。自己构建内核作为3x3阵列。 This tutorial在C ++中,但看起来很有帮助。

答案 1 :(得分:1)

https://dsp.stackexchange.com/questions/44928/what-does-derivative-means-in-image-processing/44930

提供关于拉普拉斯算子所做的一些背景,即将二阶导数归零。那里也列出了常用的Laplace内核,但我认为它必须求和为零,因为您提到的[[0,1,0],[1,-4,1],[0,1,0]]内核不是而是求和为1。与Laplacian最相似的内核是{{1 }}以获得2D图像。同样,图像的二阶导数对噪声非常敏感,因此可以首先应用高斯模糊,在这种情况下,可以将生成的滤波器视为LoG(高斯拉普拉斯算子)。我自己开始学习此方法,但这是一个很好的资源:https://docs.opencv.org/3.4/d5/db5/tutorial_laplace_operator.html

代码示例为:

gblur = cv2.GaussianBlur(image, (3,3), 0)

l_kernel = np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]])

temp = cv2.filter2D(gblur, -1, laplacian_kernel)
cv2.imshow('temp', temp)