在openCV中的高斯拉普拉斯算子,如何找到过零点?

时间:2014-08-03 14:57:43

标签: c++ opencv image-processing computer-vision

openCV中有拉普拉斯函数,它直接计算双导数。但这并不意味着我会抓住边缘吗?因为在输出中有许多负值。 我通过这个链接,意识到在那之后我也必须找到过零点。我不知道如何找到过零点。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

时会发生零交叉
  • 值等于0或
  • 两个相邻的值具有相反的符号

如果您有类似

的内容
Laplacian(src, dst, CV_16S);

您只需要扫描dst寻找这两种情况

答案 1 :(得分:1)

这是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。因此,在具有负值的像素具有正值的情况下定义零交叉,或者具有正值的像素具有负值的情况。

我希望它有所帮助!!!