【问题标题】:Fast algorithm to detect the inclination of the lines in the image检测图像中线条倾斜度的快速算法
【发布时间】:2016-03-10 14:47:05
【问题描述】:

我的要求是找到围绕数据矩阵的线(所有8条线)的倾斜度,如边缘检测图像所示:

两个主要限制:

  • 检测到的倾角应具有至少 0.1 度的精度(此图像中可达到的最佳值)
  • 所用时间应少于 30 毫秒

我在 Blackfin DSP 上实现算法,并使用了 Blackfin 图像处理工具箱。

我尝试使用霍夫变换和轮廓检测来找出线条,从而找出它们的倾斜度,但是时间限制超过了。任何使用不同算法或优化该算法的建议都会有所帮助。

[对于我的用例来说,角度精度越高越好,我的目标是至少 0.02 - 0.05 和更高分辨率的图像]

【问题讨论】:

  • 您希望如何达到这种精度?外线的长度约为 260 像素。您只能以± 0.5 px 的误差检测在线上的位置(该图像不适用于亚像素方法)。仅此一项就导致了至少arc tan(0.5 / 260) = 0.1° 的不确定性。
  • 你想达到什么目的?我想不出任何需要如此精确度的 DMC 应用程序。请分享更多信息
  • 添加了我认为足够快的方法的答案。精度问题仍然存在,很大程度上取决于拟合质量和输入图像分辨率/质量。顺便说一句,看起来像是一些 SMD/BGA 放置应用程序还是我错了?
  • @NicoSchertler 是的,我打算 1. 增加图像的分辨率 2. 在增加的分辨率中增加外线的大小。尽管所有这些仍然无法提高所需的精度,但我希望 8 行的存在能够平均错误并给出更好的结果。
  • @Spektre 我需要这个来找到 AGV 系统的方向,该系统基于数据矩阵进行定位,并根据这个数据矩阵的方向导航到下一个这样的数据矩阵,这使得精度先决条件,否则我不会在下一个这样的贴纸上结束!

标签: algorithm image-processing signal-processing blackfin


【解决方案1】:
  1. 找到边界框

    扫描所有点并找到xmin,ymin,xmax,ymax的集合像素

  2. 找出差距

    将扫描线投射到边界框的一半以记住/测量间隙大小。为了避免线丢失(由于孔),您可以投射更多扫描线或使用更宽的射线进行扫描。

    如果您需要一些光线投射/扫描示例,请参阅:

  3. 将图像分割成区域

    只需将边界框缩小一小部分 (50%) 的间隙......就像这样:

    形成 8 个矩形区域,每个区域都有单线,边缘没有噪音。

  4. 回归/拟合线

    我们的想法是分别为每个区域制作一个所有设置像素的列表,并拟合一条与所有像素距离最小的线。

    我会尝试使用这个:

    或者使用近似搜索并拟合类似的东西

    直接忽略曲率和拟合线方程参数而不是三次。

    拟合线后,您可以直接通过atan2(dy,dx)计算它们的斜率

【讨论】:

  • 感谢您的建议。让我试试这个,我会告诉你它是否在时间限制内有效。如果需要,我可以识别瓶颈并迭代解决方案。
【解决方案2】:

一种快速简便的方法是从左、右、上和下开始扫描每一行和每一列的第一个和第二个白色像素。然后简单地使用一些鲁棒的线条拟合算法来得到线条。

除非您尚未尝试这样做,否则您可以通过将图像裁剪为 DMC 大小来减少霍夫变换或其他算法的数据。

无法达到所需的角度精度,因为您没有足够的结果。即使你有你的结果也会受到任何噪音和异常值的影响。

【讨论】:

    猜你喜欢
    • 2020-08-10
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多