openCV中高斯的拉普拉斯算子,如何找到零交叉?

Posted

技术标签:

【中文标题】openCV中高斯的拉普拉斯算子,如何找到零交叉?【英文标题】:Laplacian of Gaussian in openCV, how to find zero crossings? 【发布时间】:2014-08-03 14:57:42 【问题描述】:

openCV中有拉普拉斯函数可以直接计算二阶导数。但这并不意味着我会得到正确的边缘?因为在输出中有很多负值。 我浏览了这个链接并意识到在那之后我还必须找到过零点。我不知道如何找到零交叉。有人可以帮我吗?

【问题讨论】:

【参考方案1】:

会发生零交叉

值等于 0,或 两个相邻值的符号相反

如果你有类似的东西

Laplacian(src, dst, CV_16S);

你只需要扫描dst寻找这两个案例

【讨论】:

+1 - 一个小提示是,如果您想找到过零位置的确切坐标,如果您看到两个相邻的值有相反的迹象。但是,如果您只想找出哪些像素是边缘,那么检测相反的符号就完全可以了。【参考方案2】:

这是一个简单的 Python 实现:

LoG = cv2.Laplacian(src, cv2.CV_16S)
minLoG = cv2.morphologyEx(LoG, cv2.MORPH_ERODE, np.ones((3,3)))
maxLoG = cv2.morphologyEx(LoG, cv2.MORPH_DILATE, np.ones((3,3)))
zeroCross = np.logical_or(np.logical_and(minLoG < 0,  LoG > 0), np.logical_and(maxLoG > 0, LoG < 0))

整个想法是 ERODE 操作计算每个像素周围邻域的最小值,然后 DILATE 最大值。因此,零交叉定义为负值像素周围为正值,或正值像素周围为负值。

希望对你有帮助!!!

【讨论】:

这是天赐之物!为了使用 Laplacian of Gaussian 方法改进边缘检测任务,另一个recommendation 是在局部方差高的区域使用过零。

以上是关于openCV中高斯的拉普拉斯算子,如何找到零交叉?的主要内容,如果未能解决你的问题,请参考以下文章

Laplacian边缘检测原理

OpenCV 边缘检测之Laplance算子

Log边缘检测算法

OpenCV实战(13)——高通滤波器及其应用

OpenCV2马拉松第15圈——边缘检測(Laplace算子,LOG算子)

寻找局部最大值灰度图像opencv