【发布时间】:2019-04-26 01:37:09
【问题描述】:
我是图像处理的初学者,如何用opencv提取“垂直”、“水平”、“诊断45”、“诊断135”、“非定向”5种边缘?
【问题讨论】:
-
对不起@Berriel,我是图像处理的初学者,对我来说问题不一样。我对opencv的sobel算子的返回值不是很了解,所以问了另外一个问题。似乎没有人回答他们,除了这个线程。但如你所愿,我已经删除了另一个主题。
我是图像处理的初学者,如何用opencv提取“垂直”、“水平”、“诊断45”、“诊断135”、“非定向”5种边缘?
【问题讨论】:
首先,您需要将 sobel 过滤器应用于您的图像。有关示例代码,请参阅OpenCV documentation。
一旦您获得了 X 和 Y 方向的渐变图像(我将它们称为 Gx 和 Gy),您就可以使用公式 theta = atan2(Gy,Gx) 和幅度 M = sqrt(Gx*Gx + Gy*Gy) 计算边缘的方向。一旦有了Gx、Gy、theta 和M,您就可以使用以下公式计算每个像素的定向边缘的大小。
垂直边缘:abs(Gy)
水平边缘:abs(Gx)
45 度边缘:M*abs(cos(theta - pi/4))
135 度边缘:M*abs(cos(theta - 3*pi/4))
非方向边:M
除了非方向边缘,我们只是计算梯度在特定方向上的投影幅度。
【讨论】:
Gx 和Gy 不为零,您就可以为图像中的每个边缘指定一个方向(theta),所以我不确定究竟什么是“非定向边缘” “ 是。在某些情况下,Sobel 滤波器的应用被称为无方向边缘滤波器,因为它为您提供M 的幅度与边缘方向无关。如果需要,您可以将幅度 M 小于某个阈值的所有像素分配给“非定向”,然后将剩余像素分配给其余四个类别之一,以幅度最高的为准。