📄 find_center.m
字号:
for n=1:100
p0=picture{n};
for d0=57:62 %寻找图像中最大圆的初始直径
x=sum(p0,2);
x=ones(512,1).*512-x; %计算各行0元的个数
y=sum(p0);
y=ones(1,512).*512-y;
%统计0元>d0的行的区间及列的区间,以缩小圆心搜索范围
start=0;
xleg=zeros(1,2);
for m=1:512
if start==0&x(m)>d0
start=1;
xleg(1)=m;
elseif start==1&x(m)<d0
xleg(2)=m-1;
break
end
end
start=0;
% yleg=zeros(1,2);
for m=1:512
if start==0&y(m)>d0
start=1;
yleg(1)=m;
elseif start==1&y(m)<d0
yleg(2)=m-1;
break
end
end
clear x y
% (x-a)^2+(y-b)^2<r^2 其中(x,y)为圆心坐标,(a,b)为圆所包含的点
r=ceil(d0/2);
xmin=xleg(1);xmax=xleg(2);ymin=yleg(1);ymax=yleg(2);
fail=0; %能否找到最大圆的标准变量
success=0;
for x=xmin:xmax
for y=ymin:ymax
for b=y-r:y+r
for a=x-r:x+r %只需判断以(x,y)中心,r0为边长的正方形内元素
if (x-a)^2+(y-b)^2<r^2&p0(a,b)
fail=1;
break
end
end
if fail==1
break
end
end
if fail==0
success=1;
break
else
fail=0;
end
end
if success==1
x0=x;y0=y;
break
end
end
if success==0
dmax=d0-1;
break
end
end
zuobiaox(n)=x0;zuobiaoy(n)=y0;d(n)=dmax;zuobiaoz(n)=n;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -