我试图找到答案来搜索如何在白色背景的图像中检测非常微小的环。但他们每个地方都有检测黑点的解决方案。 请帮我说明如何继续。我刚开始使用matlab并且仍在学习该工具的基础知识。 我想要检测戒指的图像如下所示!
答案 0 :(得分:1)
如果速度不是您的主要目标并且您拥有计算机视觉工具箱,我将使用这样的MSER算法:
Image=imread('YourRings.bmp');
Image=rgb2gray(Image);
Regions=detectMSERFeatures(Image);
plot(Regions);
结果:
如果您研究并了解该类的方法和特性,您还可以在没有形态学运算符的情况下过滤不需要的结果(更大或偏心的椭圆)。
答案 1 :(得分:0)
一个简单的选择是:
答案 2 :(得分:0)
如果戒指关闭,您可以bwlabel
(使用4连接)整个图像。最大的区域将属于背景,可以忽略。然后,您可以使用regionprops
查找其余环的质心。
lb = bwlabel( inputBW, 4 );
st = regionprops( lb, 'Centroid', 'Area' );
[bgArea toRemove] = max( [st(:).Area] );
st(toRemove) = []; %// discard background
cnt = vertcat( st.Centroid ); %// all centers
将结果显示为grenn'X'位于环的中心。
figure;
imshow( inputBW ); hold on;
scatter( cnt(:,1), cnt(:,2), 50, 'xg' );
如果戒指未关闭,您可以使用一些形态学操作(bwmorph
)作为预处理来关闭它们。