📄 最大半径及圆心坐标.m
字号:
n=1;
p0=picture{n};
x=sum(p0,2);
x=ones(512,1).*512-x; %计算各行0元的个数
y=sum(p0);
y=ones(1,512).*512-y;
for d0=50:65 %寻找图像中最大圆的初始直径
%统计0元>d0的行的区间及列的区间,以缩小圆心搜索范围
start=0;
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;
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
break
end
end
x0
y0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -