请高手帮忙看看为什么椭圆方程已经拟合出来但画不出来!椭圆拟合的函数来自论坛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 上传
2011-7-9 17:09 上传
点击文件名下载附件
960 Bytes, 下载次数: 15
2011-7-9 17:09 上传
点击文件名下载附件
795 Bytes, 下载次数: 15