从图像中提取重复结构
信息处理
图像处理
2022-02-01 06:52:30
1个回答
您想检测两件事:线条/曲线和圆圈。两者都有众所周知的算法,所以让我们分别找到它们。我将在 Mathematica 中提出一个解决方案。您可以翻译成您的语言。
- 第一步是消除背景。我们通过查找背景来做到这一点:
img = Import["http://i.stack.imgur.com/Olczj.jpg"] bimg = ColorConvert[img, "Grayscale"] Blur[Closing[bimg, 20], 15]
然后除以它:
evenImg = Image[ImageData@bimg/ImageData@Blur[Closing[bimg, 20], 10]]
- 检测边缘:
binImg = EdgeDetect[evenImg, 1, .1]
现在我们只需要填写笔画:
smImg = ImageResize[膨胀[binImg, 2], {500}]
- 我们终于准备好进行一些检测了。让我们从线条/曲线开始:
Show[smImg, Graphics[{Yellow, Thick, Line /@ ImageLines[smImg, 0.25]}]]
- 圈子呢?让我们从查看所有连接的组件开始:
变形 = 形态成分@smImg; 着色@变形
圆圈在那里,好吧。我们只需要过滤掉非圆形的对象。我们可以通过查看圆度、伸长率、偏心率或欧拉特性来做到这一点。通过这些属性,圆形很容易与其他形状区分开来。
noncircles = #[[1]] & /@ ComponentMeasurements[morph, "Elongation", # > 0.3 &]
circles = morph /. x_ :> 0 /; MemberQ[noncircles, x] //
Colorize // RemoveBackground
其它你可能感兴趣的问题







