Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.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
C++ 在图像中拟合线条_C++_Matlab_Image Processing - Fatal编程技术网

C++ 在图像中拟合线条

C++ 在图像中拟合线条,c++,matlab,image-processing,C++,Matlab,Image Processing,我正在尝试实现边绘制算法。我获得了图像的线条,下一步是用给定的树状体拟合线条,我的问题是给定一个1和0的矩阵,(线条的1部分)穿过所有像素并开始拟合线条。 其思想是通过最小二乘直线拟合方法生成最小长度的初始线段,然后通过向该线段添加更多像素来扩展该线段。在检测到最小长度的初始线段后,我们应该遍历链的剩余像素,并计算每个像素到当前拟合线的距离。只要像素与当前行的距离在一定范围内,就会将像素添加到当前行。我们继续向当前线段添加像素 直到我们转弯,线的方向改变。此时,我们输出当前线段。然后对链的其余像

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


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

我同意有缺陷的人。没有更多的信息,比如输入图像和想要的结果,这个例子很难回答。我猜你得到了某个物体的不完整轮廓,想要回归/外推2D空间中的间隙。在这种情况下,我将:

  • 获取可见轮廓线

    你已经有这个了

  • 按方向角度对线进行排序

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

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

    合并具有以下内容的所有行:

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

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


  • 通过标记C++和Matlab,你是指其中任何一个都可以接受的解决方案?没有像OpenCV这样的CV库,C++将是如此的困难和冗余,以至于你不能提供足够的上下文。你所谈论的大多数事情没有任何进一步的解释都是毫无意义的。