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_Image Processing - Fatal编程技术网

Matlab 如何从二值图像中删除圆形,但保留线条?

Matlab 如何从二值图像中删除圆形,但保留线条?,matlab,image-processing,Matlab,Image Processing,在下图中,如何删除圆以仅保留线条 使用圆形Hough变换检测圆,然后可以删除它们。文件交换有多个文件可供使用,例如,或。Matlab还提供了一个名为的工具,可以做同样的事情。使用适当的结构元素进行形态学打开: 打开[f,DiskMatrix[7] 要完成整个任务,有两种方法,一些方法是从先前的结果(您可能会进行实验)中减去输入图像,还有一些不同的方法。其中一个不同的方法是从细化输入图像开始,这样可以将不与直线重叠的圆减少到单个像素(或者接近这个像素,因为圆不是完美的),这样可以很容易地移除。然

在下图中,如何删除圆以仅保留线条


使用圆形Hough变换检测圆,然后可以删除它们。文件交换有多个文件可供使用,例如,或。Matlab还提供了一个名为的工具,可以做同样的事情。

使用适当的结构元素进行形态学打开:

打开[f,DiskMatrix[7]

要完成整个任务,有两种方法,一些方法是从先前的结果(您可能会进行实验)中减去输入图像,还有一些不同的方法。其中一个不同的方法是从细化输入图像开始,这样可以将不与直线重叠的圆减少到单个像素(或者接近这个像素,因为圆不是完美的),这样可以很容易地移除。然后修剪此图像并检测线条(右下图)


您可以通过考虑所示第一幅图像中检测到的圆以及靠近给定圆的线段的方向来尝试补充给定连接组件中的红线。

您可能应该首先尝试确定一个好的方法/算法,而不是在同一个问题中同时问这两个问题,然后尝试在Matlab中实现。谢谢,但我想继续。圆被移除当然,只需从原始图像中移除这个结果图像,并进行一些智能的线条填充。在某个时候,我可能会在这方面补充一些东西。
f = ImageCrop[Binarize[Import["http://i.stack.imgur.com/AurlZ.png"]]] (* Input *)
g = SelectComponents[Thinning[f], "Count", #1 > 10 &]          (* Second image *)
h = Pruning[g, 9];
lines = ImageLines[h, 0.1, Method -> "RANSAC", Segmented -> True];
Show[Dilation[h, 3], Graphics[{Thick, Red, Line /@ lines}]]    (* Third image *)