在下图中,如何删除圆圈以仅保留线条?
答案 0 :(得分:4)
使用足够的结构元素做一个形态开口:
Opening[f, DiskMatrix[7]]
要完成整个任务,有几种方法,一些方法首先从前一个结果中减去输入图像(您可能会尝试),以及不同的方法。其中一个不同的方法是先将输入图像细化,这样可以将圆圈(不与线条重叠)缩小为单个像素(或接近圆形,因为圆圈不完美),您可以轻松删除。然后你修剪这个图像并检测线条(右图跟随图像)。
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 one或this one。 Matlab还提供了一个名为imfindcircles
的工具,可以做同样的事情。