Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用opencv提取5个方向的边?_Opencv_Image Processing - Fatal编程技术网

如何使用opencv提取5个方向的边?

如何使用opencv提取5个方向的边?,opencv,image-processing,Opencv,Image Processing,我是一名图像处理初学者,如何使用opencv提取5种类型的“垂直”、“水平”、“对角45”、“对角135”、“非方向”边缘 首先,您需要对图像应用sobel过滤器。有关示例代码,请参见 一旦你得到了X和Y方向的梯度图像(我称它们为Gx和Gy),你就可以使用公式theta=atan2(Gy,Gx)和幅值M=sqrt(Gx*Gx+Gy*Gy)计算边缘的方向。一旦有了Gx、Gy、theta和M,就可以使用以下公式计算每个像素处定向边的大小 垂直边缘:abs(Gy) 水平边缘:abs(Gx) 45度边缘

我是一名图像处理初学者,如何使用opencv提取5种类型的“垂直”、“水平”、“对角45”、“对角135”、“非方向”边缘

首先,您需要对图像应用sobel过滤器。有关示例代码,请参见

一旦你得到了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(θ-pi/4))

135度边缘:
M*abs(cos(θ-3*pi/4))

非方向边:
M


除了非方向边缘,我们只是简单地计算梯度在特定方向上的投影大小。

首先,您需要对图像应用sobel过滤器。有关示例代码,请参见

一旦你得到了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(θ-pi/4))

135度边缘:
M*abs(cos(θ-3*pi/4))

非方向边:
M


除了非方向边缘,我们只是计算梯度在特定方向上的投影大小。

对不起@Berriel,我是图像处理的初学者,对我来说,问题不一样。我不太了解opencv的sobel运算符的返回值,所以我问了另一个问题。除了这条线,似乎没有人回答他们。但正如你所希望的,我已经删除了另一个主题。对不起@Berriel,我是图像处理的初学者,对我来说问题不一样。我不太了解opencv的sobel运算符的返回值,所以我问了另一个问题。除了这条线,似乎没有人回答他们。但正如你所愿,我已经删除了另一个主题。嗨@jodag非常感谢你的回答。我像你说的那样做了。所以我得到了5个矩阵。但我怎么才能知道,哪一类是重点呢?例如,图像中的第一个像素,我从五个矩阵中得到五个值,哪一个属于它?只要
Gx
Gy
不为零,就可以为图像中的每一条边指定一个方向(θ),所以我不确定“非方向边”到底是什么。在某些情况下,Sobel滤波器的应用被称为非方向性边缘滤波器,因为它提供的幅值
M
与边缘方向无关。如果需要,可以将幅值
M
小于某个阈值的所有像素指定为“非方向性”,然后将剩余像素指定给剩余四个类别中幅值最高的一个。是否尝试创建局部边缘直方图描述符?喜欢这篇文章:非常感谢你的解释。本来,我只是想实现这篇论文,但我不知道,为什么作者这样做。既然sobel算子可以计算梯度,为什么不先使用sobel算子计算梯度,然后创建局部边缘直方图呢?本主题也与本文相关,但列出的formel@user101375有6种边。我真的很困惑。嗨@jodag非常感谢你的回答。我像你说的那样做了。所以我得到了5个矩阵。但我怎么才能知道,哪一类是重点呢?例如,图像中的第一个像素,我从五个矩阵中得到五个值,哪一个属于它?只要
Gx
Gy
不为零,就可以为图像中的每一条边指定一个方向(θ),所以我不确定“非方向边”到底是什么。在某些情况下,Sobel滤波器的应用被称为非方向性边缘滤波器,因为它提供的幅值
M
与边缘方向无关。如果需要,可以将幅值
M
小于某个阈值的所有像素指定为“非方向性”,然后将剩余像素指定给剩余四个类别中幅值最高的一个。是否尝试创建局部边缘直方图描述符?喜欢这篇文章:非常感谢你的解释。本来,我只是想实现这篇论文,但我不知道,为什么作者这样做。既然sobel算子可以计算梯度,为什么不先使用sobel算子计算梯度,然后创建局部边缘直方图呢?本主题也与本文相关,但列出的formel@user101375有6种边。我真的很困惑。