4

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

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

4

2 回答 2

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

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

于 2013-02-06T02:44:39.127 回答
3

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

于 2013-02-05T17:11:54.907 回答