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
Matlab 分离连接的线和形状_Matlab_Shape_Image Recognition_Overlapping_Image Segmentation - Fatal编程技术网

Matlab 分离连接的线和形状

Matlab 分离连接的线和形状,matlab,shape,image-recognition,overlapping,image-segmentation,Matlab,Shape,Image Recognition,Overlapping,Image Segmentation,我想要一种方法和方法来分离连接的线路。这是我的照片 这是我想要的结果 我该如何解决这个问题?提前谢谢你 诚恳地说,正如您所示,分水岭将是一个问题,它会对原始线产生多个分段。最初,分水岭适用于谷物,因为它们的形状不同,而在这里,如果线条没有全局凸面形状来造成良好的碎片,则最好使用具有一些约束的分水岭 最好尝试解决一个更简单的问题。想象一下,只有水平线和垂直线是可能的。因此,在这种情况下,它意味着通过切割短垂直线(通过在x-y梯度上投影测量长度)来分离水平长线。基本提示是使用这些线的坡度/坡度来

我想要一种方法和方法来分离连接的线路。这是我的照片

这是我想要的结果

我该如何解决这个问题?提前谢谢你


诚恳地说,

正如您所示,分水岭将是一个问题,它会对原始线产生多个分段。最初,分水岭适用于谷物,因为它们的形状不同,而在这里,如果线条没有全局凸面形状来造成良好的碎片,则最好使用具有一些约束的分水岭

最好尝试解决一个更简单的问题。想象一下,只有水平线和垂直线是可能的。因此,在这种情况下,它意味着通过切割短垂直线(通过在x-y梯度上投影测量长度)来分离水平长线。基本提示是使用这些线的坡度/坡度来帮助决定在何处切割正交线。在更一般的情况下,问题需要测量或

一个更简单的解决方案(在编辑中)就是删除骨架中的连接点。 这会导致一些水平连接的线被分割,但我想这可以通过一些端点过滤来解决。这里有一个简单的尝试:

 J = imread('input.png');
 B = bwmorph(J,'branchpoints');
 L = bwlabel((J>0).*(~B),8); %removing the branch points from the skeleton
 Label = label2rgb(bwlabel((J>0).*(~B),8),'jet',[0 0 0]);


最终标记线组件。这需要进一步的端点预过滤和基于方向的过滤。

应分离的轮廓部分基本上是与轮廓其余部分的方向不同的部分

我只能给你一个基本的方法来做这件事,没有具体的代码或函数,我怀疑这是最有效的,但因为这里没有太多的答案…这也是使用知识的问题和解决方案

  • 查找连接的轮廓及其所有分支作为一组像素坐标(将线表示为单个像素宽的轮廓)
  • 将轮廓列表转换为每个相邻像素坐标之间的一组角度
  • 可选:使用平均滤波器滤除高频分量
  • 对角度进行柱状图,以确定大多数等高线所处的角度(称之为公共角度)
  • 搜索轮廓,查找从+/-公共角度(公差+/-30度)到该(-/+具有类似公差的公共角度)负值的截面
  • 对于每个部分,删除与上述两个阈值之间的角度相关联的像素(即公共角度+30度到-公共角度-30度)
  • 对每个连接的轮廓重复此操作

  • 希望这对一些人有所帮助

    我尝试了这种方法,使用连接组件集的距离函数上的分水岭将它们像和一样分开。下面是获得的一些结果……这种方法不适用于形状文本谢谢你的回答,我已经试过了,但我可以检测到所有分支点,我称之为bwmorph获取分支点。然后移除。然后获取线段的端点并计算角度。检测(pi/4和3pi/4)之间垂直大于水平的任何线段。这是获得的结果。但尽管我可以检测到所有分支点,也可以检测到所有连接线。这是获得的结果,我想最好使用线段之间的相对角度,而不是直接使用线段所包含的绝对角度。这可能会提供更高的稳健性。