拟合图像中的线条

时间:2016-01-24 11:11:03

标签: c++ matlab image-processing

我正在尝试实现Edge绘图算法。我获得了图像的线条,下一步是用给定的阈值拟合线条,我的问题是给定1和0的矩阵((1部分线条)遍历所有像素并开始拟合线条。 想法是通过最小二乘线拟合方法生成最小长度的初始线段,然后通过向其添加更多像素来扩展该线段。在检测到最小长度的初始线段之后,我们应该遍历链的剩余像素并计算每个像素到当前拟合线的距离。只要像素在距当前行一定距离内,就会将像素添加到当前行。我们继续向当前线段添加像素 直到我们转弯并且线的方向改变。此时,我们输出当前线段。然后递归处理链的剩余像素以提取更多的线段。

我的问题是我不知道如何开始越过像素...如果有一个特定的方向我应该首先采取...

1 个答案:

答案 0 :(得分:0)

我同意 flawr 。没有更多的信息,如输入图像和想要的结果示例很难回答。我猜你的某些物体的轮廓不完整,想要回归/推断2D空间的间隙。在那种情况下,我会:

  1. 获取可见轮廓线

    你已经有了这个。

  2. 按方向角度对线条进行排序

    如果行(i)端点为A(i),B(i),则:

    ang(i)=atan2(B(i).y-A(i).y,B(i).x-A(i).x)
    
  3. 合并行

    合并所有包含以下内容的行:

    • 类似角度
    • 不太远
    • 具有小的垂直距离(好像是平行的)
    • 合并的线不与任何其他线相交
  4. 缩小差距

    合并后只需找到所有轮廓边缘点。这些点仅连接到单行。现在你可以在OP中应用你提出的推断,但是我会尝试用简单的线连接最近的这些点(如果连接没有穿过任何一行)。