Matlab最小二乘法椭圆拟合

function [semimajor_axis,semiminor_axis,x0,y0,phi]=ellipse_fit(x,y)
x=x(:);
y=y(:);
M=[2*x.*y y.^2 2*x 2*y ones(size(x))];
pinv(M)
e=M\(-x.^2);
a=1;
b=e(1);
c=e(2);
d=e(3);
f=e(4);
g=e(5);
delta=b^2-a*c;
x0=(c*d-b*f)/delta;
y0=(a*f-b*d)/delta;
phi=0.5*acot((c-a)/(2*b));
nom=2*(a*f^2+c*d^2+g*b^2-2*b*d*f-a*c*g);
s=sqrt(1+(4*b^2)/(a-c)^2);
a_prime=sqrt(nom/(delta*((c-a)*s-(c+a))));
b_prime=sqrt(nom/(delta*((a-c)*s-(c+a))));
semimajor_axis=max(a_prime,b_prime);
semiminor_axis=min(a_prime,b_prime);
if (a_prime<b_prime)
    phi=pi/2-phi;
end
end
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值