我的要求是找到数据矩阵周围的线(所有 8 条线)的倾斜度,如边缘检测图像所示:
两个主要限制:
- 检测到的倾斜度应具有至少 0.1 度的精度(此图像中可实现的最佳精度)
- 所用时间应少于 30 毫秒
我正在 Blackfin DSP 上实现算法,并使用了 Blackfin 图像处理工具箱。
我尝试使用 Hough 变换和轮廓检测来找出线条,从而找出它们的倾斜度,但是时间限制超过了。任何使用不同算法或优化此算法的建议都会有所帮助。
[对于我的用例,角度精度越高越好,我的目标是至少 0.02 - 0.05 并使用更高分辨率的图像]
最佳答案
找到边界框
扫描所有点并找到设置像素的
xmin,ymin,xmax,ymax
找出差距
通过一半的边界框转换扫描线,记住/测量间隙大小。为避免线丢失(由于孔),您可以转换更多扫描线或使用更宽的射线扫描。
如果您需要一些光线转换/扫描的示例,请参阅:
将图像分割成区域
只需将边界框缩小一部分 (50%) 的间隙……就像这样:
形成 8 个矩形区域,每个区域只有一条线,边缘没有噪声。
回归/拟合线
想法是分别为每个区域制作一个包含所有设置像素的列表,并拟合一条与所有像素距离最小的线。
我会尝试使用这个:
或者使用近似搜索并拟合类似的东西
直接忽略曲率和拟合线方程参数而不是三次方程。
拟合直线后,您可以直接通过
atan2(dy,dx)
计算它们的斜率
关于algorithm - 快速检测图像中线条倾斜度的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919698/