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
Algorithm 图像中直线倾斜的快速检测算法_Algorithm_Image Processing_Signal Processing_Blackfin - Fatal编程技术网

Algorithm 图像中直线倾斜的快速检测算法

Algorithm 图像中直线倾斜的快速检测算法,algorithm,image-processing,signal-processing,blackfin,Algorithm,Image Processing,Signal Processing,Blackfin,我的要求是找到数据矩阵周围的线(全部8条线)的倾斜度,如边缘检测图像所示: 两个主要限制: 检测到的倾斜度应具有至少0.1度的精度(此图像中可达到的最佳值) 所用时间应少于30毫秒 我正在Blackfin DSP上实现该算法,并使用了Blackfin图像处理工具箱 我尝试使用Hough变换和轮廓检测来找出线条,从而找出它们的倾斜,但是时间限制超过了。任何使用不同算法或优化此算法的建议都会有所帮助 [对于我的使用案例,角度精度越高越好,我的目标至少是0.02-0.05,具有更高的分辨率图像]

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

两个主要限制:

  • 检测到的倾斜度应具有至少0.1度的精度(此图像中可达到的最佳值)
  • 所用时间应少于30毫秒
我正在Blackfin DSP上实现该算法,并使用了Blackfin图像处理工具箱

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


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

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

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

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

  • 查找边界框

    扫描所有点并找到设置像素的
    xmin、ymin、xmax、ymax

  • 找出差距

    通过边界框的一半投射扫描线,记住/测量间隙尺寸。为了避免漏线(由于孔洞),您可以投射更多扫描线或使用更宽的光线进行扫描

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

  • 将图像分割为多个区域

    只需将边界框缩小一小部分(50%)。。。大概是这样的:

    形成8个矩形区域,每个区域有一条直线,边缘没有噪音

  • 回归/拟合线

    其思想是为每个区域分别列出所有设置的像素,并拟合一条距离所有像素最小的线

    我会尝试使用以下方法:

    或者使用近似搜索和拟合,如

    只需忽略曲率,直接拟合直线方程参数,而不是立方体

    拟合直线后,您可以通过
    atan2(dy,dx)


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