【问题标题】:OpenCV - stuck in solving an excerciseOpenCV - 坚持解决练习
【发布时间】:2013-07-10 09:34:57
【问题描述】:

任何人都可以告诉我如何创建一个过滤器来检测具有 60 度角的线,如学习 OpenCV 书的练习中所提到的(点击here 在线书籍 - 参见第 190 页)。我只想知道过滤器会怎么样?或者有没有其他方法可以检测 60 度的线?或者如何将滤镜(不是图像)旋转 60 度以检测线条?我更喜欢使用 9*9 或 11*11 或 15*15 等大型过滤器。

附:我知道如何检测标准角度(如 0、90 等)的线条,但对其他角度感到困惑 - 如何在 OpenCV 中将滤镜旋转到不同的角度?

我在 openCV 中找到 GetRotationMatrix2D 来旋转矩阵,但我猜它会旋转矩阵以形成 2*3 矩阵并旋转图像本身。我想知道我是否可以使用 GetRotationMatrix2D 向任何方向旋转 9*9 矩阵以获得 9*9 矩阵?另外,如果不旋转图像本身,这是否可能?

【问题讨论】:

  • 我认为问题文本顶部附近的链接不正确。
  • 答案中各个链接中扫描的照片表明您想要检测与参考系成 60 度的线,而不是比较一条线与另一条线的角度。如果您已将二维向量提取到感兴趣的线,并且向量已归一化,则 X 分量将为 0.5,因为 cos(60) = 0.5

标签: c++ c opencv image-processing


【解决方案1】:

如果您想手动创建过滤器并在 cvFilter2d 中使用,请查看angular filters。只需尝试应用 60 度过滤器,通过增加内核的大小(高度应接近 root3 倍宽度)并在对角线上写入“2”。

检查Hough transformand its tutorial。它输出所有的线角度(根据 x 轴)。

也看看SimpleCV

【讨论】:

  • Baci 是的,我已经使用这些过滤器来检测标准角度中的线条,如 0、90、45、135,但是 60 度或任何其他度数的卷积核是什么?
  • tan60 = root3 = 1.73, create 10x17 卷积核,对角线为 2,其他指数为 -1。您需要定义一个锚点(在内核中心附近取一个点);因为您使用的是均匀大小,程序无法自动找到它。使用 cvfilter2d 中的内核。
  • Baci 所以我想对于使用其他天使最好将过滤矩阵进行仿射变换并根据所需的角度旋转矩阵?
  • 阅读下一个答案,另一种方法
  • Canberk Ba​​ci 我有一个疑问 - 你为什么选择 tan60?那么,如果我想检测 70 或 80 或 30 或 40 或 50 度的线,那么我应该选择内核为 tan30 或 tan 40 还是 tan 70 或 tan 80 n 等等?
【解决方案2】:

在定义你的垂直渐变过滤器 (mFilter) 之后,比如:

 1   1  1 .....1
 .
 1      
 0   0  0 .....0
-1
 .      
-1  -1 -1.....-1

(乘以 1/N^2)

你可以这样做:

double angleDegree = 60;
Point2f mFilter_center(mFilter.cols/2.0F, mFilter.rows/2.0F);
Mat mRotation60= getRotationMatrix2D(mFilter_center, -angleDegree, 1.0);
Mat mFilter60;
warpAffine(mFilter, mFilter60, mRotation60, mFilter.size());

现在,您可以使用矩阵mFilter60 作为 60 度边缘检测过滤器。但是请注意,这是一个定向过滤器,您需要通过将mFilter60 与 -1 相乘来反转过滤器元素以获得剩余的边缘。

【讨论】:

  • +1 ; mFilter 也应该是大尺寸,比如 17x17;因为否则可能会发生信息丢失。
  • @thomas 这个 mfilter 应该是 1D 还是 2D?意味着如果我有一个 9*9 或 11*11 矩阵作为 mfilter,那么我是否需要先将 9*9 或 11*11 矩阵转换为一维然后应用你的代码?还是一维或二维在这里无关紧要?
  • @user2567857,这个过滤器需要是2D的,这样才能更稳健地检测长边,不需要2D到1D的转换
  • @thomas 用于线检测,索引不应该这样,我错了吗?
  • @thomas 我已经应用了你的方法并得到了很多错误,所以我可以为它写一个单独的问题并在那个问题中标记你吗?
猜你喜欢
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 2014-07-01
  • 1970-01-01
相关资源
最近更新 更多