2016-01-24 81 views
-1

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

我的问题是,我不知道如何下手去在像素......如果有一个特定的方向,我应该先......

+0

通过标记C++和Matlab,你的意思是任何解决方案都可以接受吗?没有像OpenCV这样的CV库的C++将非常困难和冗余 –

+2

您无法提供足够的上下文。没有任何进一步的解释,你谈论的大部分内容都是毫无意义的。 – flawr

回答

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中推断的外推法,但是我会尝试用简单的线代替(如果连接不穿过任何线)将最近的这样的点彼此连接起来。