Opencv Sobel算子对于对角线(右上45度,左上135度)边缘检测

4
我遇到了关于opencv的Sobel边缘检测器的问题。从它的文档中可以看出,它只能检测水平和垂直方向的边缘(通过指定0,1或1,0)。有没有人知道如何使用cvSobel获取45度和135度的对角线边缘(不是Canny方法)?Matlab有一个解决方案,使用其edge(I,'sobel' ...)选项,但我的代码都是用c++编写的,我想保持这种方式。感谢您的建议和解决方案。

@luhfluh,我已经成功运行了(1, 1)。我正在使用OpenCV2.2。在文档中,这个限制在哪里提到了? - Andrey Sboev
@Andrey:(1,1)不是对角线 - 它是一个双重导数(在x和y方向上)。 - etarion
1
@luhfluh,请尝试旋转Sobel中使用的内核并调用自定义过滤器。 - Andrey Sboev
感谢@Andrey和@Etarion的建议。然而,我在http://opencv-users.1802565.n2.nabble.com/Edge-orientation-td3146691.html中找到了以下sudo代码的方法:伪代码:cvSobel(grayimg,dx,1,0,3) cvSobel(grayimg,dy,1,0,3)对于高度中的j 对于宽度中的i mag = sqrt(dx [i,j] ^ 2 + dy [i,j] ^ 2) 如果mag> thresh orient [i,j] = atan2(dy [i,j],dx [i,j]) 否则 orient [i,j] = 4 - luhfluh
那并不是你最初提问所要求的。 - etarion
显示剩余6条评论
2个回答

5

嗨。

  1. 计算X方向上的结果,得到resX
  2. 计算Y方向上的结果,得到resY
  3. 选择所需的方向(角度α)
  4. 所需结果为sqrt((Y*sin(alpha))^2 + (X*cos(alpha))^2)

这适用于边缘检测、运动模糊以及任何线性的有向滤波器。


0

可以检测对角线。您只需运行两次即可。在定义上,既是水平又是垂直的点也是对角线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接