【问题标题】:How to extract 5 direction edges with opencv?如何用opencv提取5个方向边缘?
【发布时间】:2019-04-26 01:37:09
【问题描述】:

我是图像处理的初学者,如何用opencv提取“垂直”、“水平”、“诊断45”、“诊断135”、“非定向”5种边缘?

【问题讨论】:

  • 对不起@Berriel,我是图像处理的初学者,对我来说问题不一样。我对opencv的sobel算子的返回值不是很了解,所以问了另外一个问题。似乎没有人回答他们,除了这个线程。但如你所愿,我已经删除了另一个主题。

标签: opencv image-processing


【解决方案1】:

首先,您需要将 sobel 过滤器应用于您的图像。有关示例代码,请参阅OpenCV documentation

一旦您获得了 X 和 Y 方向的渐变图像(我将它们称为 GxGy),您就可以使用公式 theta = atan2(Gy,Gx) 和幅度 M = sqrt(Gx*Gx + Gy*Gy) 计算边缘的方向。一旦有了GxGythetaM,您就可以使用以下公式计算每个像素的定向边缘的大小。

垂直边缘:abs(Gy)

水平边缘:abs(Gx)

45 度边缘:M*abs(cos(theta - pi/4))

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

非方向边:M

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

【讨论】:

  • 嗨@jodag 非常感谢您的回答。我按照你说的做了。所以我得到了5个矩阵。但是我怎样才能知道,哪个类别是一个点?比如图像中的第一个像素,我从五个矩阵中得到五个值,分别属于哪个?
  • 只要GxGy 不为零,您就可以为图像中的每个边缘指定一个方向(theta),所以我不确定究竟什么是“非定向边缘” “ 是。在某些情况下,Sobel 滤波器的应用被称为无方向边缘滤波器,因为它为您提供M 的幅度与边缘方向无关。如果需要,您可以将幅度 M 小于某个阈值的所有像素分配给“非定向”,然后将剩余像素分配给其余四个类别之一,以幅度最高的为准。
  • 您是否尝试创建局部边缘直方图描述符?喜欢这篇论文:dcc.fc.up.pt/~mcoimbra/lectures/VC_1415/VC_1415_P8_LEH.pdf
  • 非常感谢您的解释。本来我只是想实现这篇论文,但我不知道作者为什么要这样做。既然 sobel 算子可以计算梯度,为什么不先用 sobel 算子计算梯度,然后创建局部边缘直方图呢?这个话题也和这篇论文有关,stackoverflow.com/questions/909542/opencv-edge-extraction?rq=1 但是列出的formel @user101375 有6 种类型的边。我真的很困惑。
猜你喜欢
  • 2010-10-28
  • 2016-06-13
  • 2018-10-24
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 2012-09-12
  • 1970-01-01
相关资源
最近更新 更多