📄 circlerecog.m
字号:
function circleRecog
input=imread('another.jpg');%anothernewcircles.jpg
input=im2bw(input);
% subplot(2,2,1);
% imshow(input,[]);
input = bwmorph(bwmorph(bwmorph(input,'spur'),'clean'),'fill');
[numbers,features] = bwlabel(input);
count_circles = 0; centers = [0 0]; radius = [];
cnt=0;
sita=0:pi/20:2*pi;
for i = 1:features
t=zeros(size(input));%balack imgage
t(numbers==i)=1;%copy sub-image
f=imfeature(t,'all');
if(f.FilledArea<20)%排除噪声
continue;
end
%再万一的话可以用周长平方与面积的比判定 园最小为 4×pi
% (bwarea(bwperim(t))^2/f.Area);
%pi*(f.EquivDiameter/2)^2==f.Area 始终相等,因为它的半径是该面积所对应的椭圆半径
%所以用 bound面积和本身面积的系数 Extent 判定
if(abs(f.Extent)>0.9)
continue;
end
cnt=cnt+1;
% subplot(2,2,cnt+1),imshow(t);
% figure,imshow(t);
center(cnt,:)= [f.Centroid f.EquivDiameter/2];
end
display(center);
sita=0:pi/20:2*pi;
imshow(input);
hold on
for i=1:size(center,1)
%园的参数方程数学手册 P346
%plot(a*cos(sita+fi),b *sin(sita+fi)); %斜椭圆
plot(center(i,1)+center(i,3)*cos(sita),center(i,2)+center(i,3)*sin(sita),'r'); %半径为r的圆
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -