注册 登录
编程论坛 Matlab

框定区域

呼延菊 发布于 2014-01-05 15:59, 540 次点击
我想使用椭圆框定图像中的区域,逐步求取椭圆的各项参数,最后画出椭圆包含整个目标区域,主要代码如下:
for i=1:m
    for j=1:2
    h(i,j)=status(i).Centroid(:,j);    %中心
    end
    h1(i)=status(i).Orientation;       %角度
    h2(i)=status(i).MajorAxisLength;   %长轴长
    h3(i)=status(i).MinorAxisLength;   %短轴长
    sum=sum+status(i).FilledArea;
end         %存储椭圆属性
theta1=h1(1);

x0=zeros(m,1);
y0=zeros(m,1);
a=zeros(m,1);
b=zeros(m,1);
x0(1)=h(1,1);
y0(1)=h(1,2);
a(1)=h2(1);
b(1)=h3(1);

for j=2:m
     x0(j)=(x0(j-1)+h(j,1))/2;  %中心坐标
     y0(j)=(y0(j-1)+h(j,2))/2;

     x1=abs((sin(abs(theta1*pi/180)))*(a(j-1)));
     y1=abs((cos(abs(theta1)*pi/180))*(a(j-1)));

     x2=abs((sin(abs((h1(j)*pi/180))))*(h2(j)));
     y2=abs((cos(abs(h1(j))*pi/180))*(h2(j)));
     %求椭圆参数
    a(j)=(sqrt((x0(j-1)-h(j,1))^2+(y0(j-1)-h(j,2))^2)+x1+x2);    %长轴

     b(j)=max(y1,y2);                                     %短轴
     % b=b+b;
     l1=sqrt((h(j,1)-x0(j-1))^2+(h(j,2)-y0(j-1))^2);
     l2=abs(h(j,1)-x0(j-1));
     l3=abs(h(j,2)-y0(j-1));
     theta1=acos((l1^2+l2^2-l3^2)/(2*l1*l2))*180/pi; %偏转角度
%      a(j)=a(j-1)+h(j);
%      x0=abs(x0+h(j,1))/2;             %椭圆中心坐标
%      y0=abs(y0+h(j,2))/2;
end
    theta=0:pi/100:2*pi;  
    x=a(m)*cos(theta)+x0(m);
    y=b(m)*sin(theta)+y0(m);
    z=plot(x,y);
    rotate(z,[0 0 1],theta1,[x0(m) y0(m) 0]);

可是最后画出来的图像只包含最后一部分,我明明计算的是所有的目标区域,实在找不出原因了,有没有知道我的程序错在哪里的同志,麻烦指点一下,多谢!!!
图片在附件里面,我的目标是用椭圆包围整个目标~谢谢!



只有本站会员才能查看附件,请 登录








0 回复
1