1

我使用 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')
4

2 回答 2

5

我不熟悉 Python 的 OpenCV 绑定,但对于自定义卷积核,您需要filter2D. 自己将内核构建为 3x3 数组。本教程使用 C++,但看起来很有帮助。

于 2014-03-19T21:10:24.583 回答
1

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

提供有关拉普拉斯算子在将二阶导数归零方面所做的一些背景。那里还列出了常用的拉普拉斯内核,但我认为它必须总和为零,因为您提到的内核array([0,-1,0][-1,5,-1][0,-1,0])不是而是总和为 1。拉普拉斯算子与您的最相似的内核将是[[0,1,0],[1,-4,1],[0,1,0]]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)
于 2019-09-03T15:35:09.393 回答