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中高斯的拉普拉斯算子,如何找到零交叉?的主要内容,如果未能解决你的问题,请参考以下文章