algorithm - 快速检测图像中线条倾斜度的算法

标签 algorithm image-processing signal-processing blackfin

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

image

两个主要限制:

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

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

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

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

最佳答案

  1. 找到边界框

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

  2. 找出差距

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

    如果您需要一些光线转换/扫描的示例,请参阅:

  3. 将图像分割成区域

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

    regions

    形成 8 个矩形区域,每个区域只有一条线,边缘没有噪声。

  4. 回归/拟合线

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

    我会尝试使用这个:

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

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

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

  5. 计算它们的斜率

关于algorithm - 快速检测图像中线条倾斜度的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35919698/

相关文章:

python - 使用 Python C API 将 Python 中的函数移植到 C 时遇到问题

java - 为一组参与者找到最佳时间段的算法

c++ - 如何在从原始图像中提取的子图像中执行模板匹配过程并在原始图像中显示结果

python - 使用python仅在R(红色) channel 中显示图像

c++ - ITK安装及示例程序

python - Python-与平台无关的5.1声音库

c - 对于大型和小型 btree,btree 中每个节点的键数平均相同吗?

performance - 亚线性时间内的第 n 个斐波那契数

database - 仅通过矩阵转置内存不足

matlab - 汉宁窗和在线 FFT