用imfindcircles在图像中裁剪圆圈

时间:2014-06-11 21:25:40

标签: matlab

我在Matlab做一个路标识别程序,我想识别圆形路标。因此我使用matlab函数imfindcircles。我想只裁剪圆形路标并将它们放在一个孤立的数字中。但是,我们在每个图形(三角形或正方形)上都有其他路标,但我不想要它们。我不知道该怎么做。这是我的代码:

[im_bw,map] = imread('roadsign.JPG'); %image black and white

S = regionprops(im_bw,'Extrema','Centroid','BoundingBox');

[centers, radii] = imfindcircles(im_bw,[12 40]); 

for k = 1:length(S)

   im_cercle = imcrop(im_bw, S(k).BoundingBox); 
   im_cercle = padarray(im_cercle, [20 20]); % put each roadsigns in a small figure

      if radii(k) ~= 0 % Error 

   figure,imshow(im_cercle); title 'Circle spotted'; % Show every circular roadsigns in a figure

      else

   figure('visible','off'),imshow(im_cercle); title 'wrong raodsign';

      end

end

我尝试了一些中心和半径的其他条件,但是当我执行代码时,我得到尺寸错误,或者有时它会显示一个不是圆形的形状。我还尝试做一个变量,只有当他找到一个圆圈时才会设置,但没有结果。你能帮帮我吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您期望regionprops的输出是什么?它没有挑出圆圈 - 它正在挑选所有“区域”(im_bw中任何连接区域)。此外,虽然imfindcircles可以找到与其他内容重叠的圆圈,但regionprops会将重叠区域检测为单个对象。

另一方面,您调用imfindcircles,然后对输出不执行任何操作。

不要使用regionprops执行任何操作,只需使用centersradii的值来定义每个检测到的圆圈周围的边界框(可选择使用一些额外的填充),裁剪该区域超出图像并保存/显示它。