在下图中,如何去除圆圈以仅保留线条?
最佳答案
使用足够的结构元素进行形态学开运算:
打开[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 *)
您可以尝试通过考虑显示的第一张图像中检测到的圆以及接近给定圆的线段的方向来补充给定连接组件中的红线。
关于matlab - 如何从二进制图像中删除圆圈但保留线条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14712699/