不同核的拉普拉斯算子
我用Python代码找到了图像的拉普拉斯算子,使用的是一个简单的核(kernel),值为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 个回答
1
这段内容主要讲的是拉普拉斯算子在图像处理中的作用,特别是它是如何处理二阶导数的。简单来说,拉普拉斯算子可以帮助我们找到图像中的边缘。文中提到了一些常用的拉普拉斯核(也就是用来处理图像的数学工具),不过有一点要注意的是,这些核的总和通常应该是零。而你提到的那个核 array([0,-1,0][-1,5,-1][0,-1,0])
的总和是1,这样就不符合这个规则。与之最相似的拉普拉斯核是 [[0,1,0],[1,-4,1],[0,1,0]]
,适用于处理二维图像。
另外,图像的二阶导数对噪声非常敏感,所以在处理之前,通常会先对图像进行高斯模糊,这样处理后的滤波器可以被视为高斯的拉普拉斯(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)