我在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
我尝试了一些中心和半径的其他条件,但是当我执行代码时,我得到尺寸错误,或者有时它会显示一个不是圆形的形状。我还尝试做一个变量,只有当他找到一个圆圈时才会设置,但没有结果。你能帮帮我吗?
提前致谢。
答案 0 :(得分:0)
您期望regionprops
的输出是什么?它没有挑出圆圈 - 它正在挑选所有“区域”(im_bw
中任何连接区域)。此外,虽然imfindcircles
可以找到与其他内容重叠的圆圈,但regionprops
会将重叠区域检测为单个对象。
另一方面,您调用imfindcircles
,然后对输出不执行任何操作。
不要使用regionprops
执行任何操作,只需使用centers
,radii
的值来定义每个检测到的圆圈周围的边界框(可选择使用一些额外的填充),裁剪该区域超出图像并保存/显示它。