matlab画椭圆为什么会缺失一小段,请教程序为什么无法根据方程画出椭圆

请高手帮忙看看为什么椭圆方程已经拟合出来但画不出来!椭圆拟合的函数来自论坛yanpu帖子的程序。处理之后画出一些直线来,看不见椭圆的影子。

附上程序:

%%%%%%%需找边缘%%%%%%%

I=imread('C:\Documents and Settings\Alex\桌面\新建文件夹\Image006.jpg');

IM=I;

I=rgb2gray(I);

I=imadjust(I);

t=graythresh(I);

I=im2bw(I,t);

I=imfill(I,'holes');

se=strel('disk',6);

I=imdilate(I,se);

I=imfill(I,'holes');

%se=strel('disk',10);

%I=imerode(I,se);

figure;imshow(I);

[b,l]=bwboundaries(I,'noholes');

figure;imshow(IM);hold on

for k=1:length(b)

a= b{k};

plot(a(:,2),a(:,1),'g','LineWidth',1);

end

stats=regionprops(l,'Area','Centroid');

t=0.7;

j=1;k=1;

for i=1:length(b)

c=b{i};

d=diff(c).^2;

p=sum(sqrt(sum(d,2)));

ar=stats(i).Area;

m=4*pi*ar/p^2;

ms=sprintf('2.2f',m);

if m>t

cd=stats(i).Centroid;

x=zeros(length(b{i}),2);

x(:,:)=b{i};

M(j,:)=EllipseDirectFit(x);

j=j+1;

plot(cd(1),cd(2),'+r');

else y=zeros(length(b{i}),2);

y(:,:)=b{i};

N(k,:)=EllipseDirectFit(y);

k=k+1;

end

end

%%%%%%%%%%画椭圆%%%%%%%%%%%%%%%

imshow(IM);hold on;

for i=1:length(M)

a=(2*M(i,1).^2-2*M(i,1)*M(i,3)+M(i,2).^2)/(2*(M(i,1)-M(i,3)));%%消去Ellipse函数中求得的交叉项b,方法是进行坐标轴的旋转

c=(2*M(i,1)*M(i,3)-2*M(i,3).^2-M(i,2).^2)/(2*(M(i,1)-M(i,3)));

z=sqrt((M(i,1)-M(i,3)).^2+M(i,2).^2);

d=(M(i,4)*abs(M(i,1)-M(i,3))+M(i,5)*abs(M(i,2)))/(2*z);

e=(M(i,5)*abs(M(i,1)-M(i,3))-M(i,4)*abs(M(i,2)))/(2*z);

f=M(i,6);

x=-d/(2*a);y=(-e/(2*c));%%椭圆中心

ar=sqrt((d.^2/(4*a)+e.^2/(4*c)-f)/a);%%长轴

br=sqrt((d.^2/(4*a)+e.^2/(4*c)-f)/c);%%短轴

thita=atan(M(i,2)/M(i,1)-M(i,3))/2;%%椭圆旋转角度

t1=0:0.02:pi;

t2=pi:0.02:2*pi;

z1=exp(i*t1);

z2=exp(i*t2);

z1=(ar*real(z1)+i*br*imag(z1))*exp(i*thita);

z2=(ar*real(z2)+i*br*imag(z2))*exp(i*thita);

z1=z1+x+y*i;

z2=z2+x+y*i;

plot(z1,'r');

hold on;

plot(z2,'r');

end

Image006.jpg

(232.16 KB, 下载次数: 5)

2011-7-9 17:09 上传

b4d287d1aacbf0cf95a77c41289acfe6.gif

c5006d1a5b4047f80d42a7082635a87b.gif

ddcd41f75eadb49697cbe1a04776b64f.png

6712fa43d918eeacb445e51bf896eabe.gif

2011-7-9 17:09 上传

点击文件名下载附件

960 Bytes, 下载次数: 15

6712fa43d918eeacb445e51bf896eabe.gif

2011-7-9 17:09 上传

点击文件名下载附件

795 Bytes, 下载次数: 15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值