作业帮 > 综合 > 作业

matlab求圆半径首先是画一个256*256bw 半径r=64的一个黑白圆圈,在产生这个圆之后,如何运用程序求出这个圆

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/25 10:38:28
matlab求圆半径
首先是画一个256*256bw 半径r=64的一个黑白圆圈,在产生这个圆之后,如何运用程序求出这个圆的周长,并且误差与实际误差越小越好.希望给出具体的matlab程序,
刚注册,所以分不多,希望各位大侠能帮下忙 ,另外补充下,不是直接调用圆周长公式求,这样没意义,而是用图像处理方法求
楼主做人要厚道,这可是我辛辛苦苦帮你做的.
I=ones(256,256);
t=linspace(0,2*pi,5000);
x=uint8(128+64*cos(t));
y=uint8(128+64*sin(t));
I1=I;
for i=1:5000
I1(x(i),y(i))=0;
end
figure,imshow(I1)
index=find(I1==0);
len=length(index);
x1=mod(index(1),256); % 随便选取圆上三个点
y1=index(1)/256;
x2=mod(index(floor(len/3)),256);
y2=index(floor(len/3))/256;
x3=mod(index(floor(2*len/3)),256);
y3=index(floor(2*len/3))/256;
if ((y1==y2) && (y2==y3)) || ((x1==x2) && (x2==x3))
x0=0;
y0=0;
r0=0;
return;
else if y1~=y2 && y1 =y2
if (x1-x2)/(y1-y2)==(x1-x3)/(y1-y3)
x0=0;
y0=0;
r0=0;
return;
end
end
end
a=2*(x2-x1);
b=2*(y2-y1);
c=x2*x2+y2*y2-x1*x1-y1*y1;
d=2*(x3-x2);
e=2*(y3-y2);
f=x3*x3+y3*y3-x2*x2-y2*y2;
x0=(b*f-e*c)/(b*d-e*a+eps) % 求圆心
y0=(d*c-a*f)/(b*d-e*a+eps)
r0=sqrt((x0-x1)*(x0-x1)+(y0-y1)*(y0-y1)) % 求半径
hold on
plot(x0,y0,'*r','LineWidth',2); %画圆心与半径
line([x0 x2],[y0 y2]);
str=num2str(r0);
text(x2+2,y2,'R=');
text(x2+15,y2,str);
运行结果:
x0 =
128.1562
y0 =
127.2148
r0 =
64.2658