使用matlab检测并找到微小黑环的中心

时间:2014-09-01 05:41:31

标签: matlab image-processing detection matlab-cvst

我试图找到答案来搜索如何在白色背景的图像中检测非常微小的环。但他们每个地方都有检测黑点的解决方案。 请帮我说明如何继续。我刚开始使用matlab并且仍在学习该工具的基础知识。 我想要检测戒指的图像如下所示!

3 个答案:

答案 0 :(得分:1)

如果速度不是您的主要目标并且您拥有计算机视觉工具箱,我将使用这样的MSER算法:

Image=imread('YourRings.bmp'); 
Image=rgb2gray(Image);

 Regions=detectMSERFeatures(Image);
 plot(Regions);

结果:enter image description here

如果您研究并了解该类的方法和特性,您还可以在没有形态学运算符的情况下过滤不需要的结果(更大或偏心的椭圆)。

答案 1 :(得分:0)

一个简单的选择是:

  1. 进行边缘检测(laplacian,canny等),滤波器的宽度必须小于环宽,以识别两个环边缘。
  2. 然后搜索圈子。
  3. 为每个圆圈搜索其中的一个额外(仅一个)圆圈。
  4. 当发现圆圈内的圆圈为圆环时(内边界和外边界标有边缘)。

答案 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)作为预处理来关闭它们。