框定区域
我想使用椭圆框定图像中的区域,逐步求取椭圆的各项参数,最后画出椭圆包含整个目标区域,主要代码如下: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]);
可是最后画出来的图像只包含最后一部分,我明明计算的是所有的目标区域,实在找不出原因了,有没有知道我的程序错在哪里的同志,麻烦指点一下,多谢!!!
图片在附件里面,我的目标是用椭圆包围整个目标~谢谢!
图
图