如何从二进制图像中删除圆圈但保留线条?

时间:2013-02-05 16:53:53

标签: matlab image-processing

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

http://s4.postimage.org/wndlnwph9/morph.png

2 个答案:

答案 0 :(得分:4)

使用足够的结构元素做一个形态开口:

enter image description here

Opening[f, DiskMatrix[7]]

要完成整个任务,有几种方法,一些方法首先从前一个结果中减去输入图像(您可能会尝试),以及不同的方法。其中一个不同的方法是先将输入图像细化,这样可以将圆圈(不与线条重叠)缩小为单个像素(或接近圆形,因为圆圈不完美),您可以轻松删除。然后你修剪这个图像并检测线条(右图跟随图像)。

enter image description here enter image description here

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 *)

您可以尝试通过考虑第一张图像中检测到的圆圈以及接近给定圆圈的线段的方向来补充给定连通分量中的红线。

答案 1 :(得分:3)

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