问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

我想用MATLAB实现 将近似椭圆形的一些离散点 拟合成椭圆曲线

发布网友 发布时间:2022-04-23 09:15

我来回答

1个回答

热心网友 时间:2023-06-28 16:49

以下为matlab采用最小二乘法的椭圆拟合程序:

function a = fitellipse(X,Y)

% FITELLIPSE Least-squares fit of ellipse to 2D points.
% A = FITELLIPSE(X,Y) returns the parameters of the best-fit
% ellipse to 2D points (X,Y).
% The returned vector A contains the center, radii, and orientation
% of the ellipse, stored as (Cx, Cy, Rx, Ry, theta_radians)
%
% Example: Run fitellipse without any arguments to get a demo
if nargin == 0
% Create an ellipse
t = linspace(0,2);

Rx = 300
Ry = 200
Cx = 250
Cy = 150
Rotation = .4 % Radians

x = Rx * cos(t);
y = Ry * sin(t);
nx = x*cos(Rotation)-y*sin(Rotation) + Cx;
ny = x*sin(Rotation)+y*cos(Rotation) + Cy;
% Draw it
plot(nx,ny,'o');
% Fit it
fitellipse(nx,ny)
% Note it returns (Rotation - pi/2) and swapped radii, this is fine.
return
end

% normalize data
mx = mean(X);
my = mean(Y);
sx = (max(X)-min(X))/2;
sy = (max(Y)-min(Y))/2;

x = (X-mx)/sx;
y = (Y-my)/sy;

% Force to column vectors
x = x(:);
y = y(:);

% Build design matrix
D = [ x.*x x.*y y.*y x y ones(size(x)) ];

% Build scatter matrix
S = D'*D;

% Build 6x6 constraint matrix
C(6,6) = 0; C(1,3) = -2; C(2,2) = 1; C(3,1) = -2;

% Solve eigensystem
[gevec, geval] = eig(S,C);

% Find the negative eigenvalue
I = find(real(diag(geval)) < 1e-8 & ~isinf(diag(geval)));

% Extract eigenvector corresponding to negative eigenvalue
A = real(gevec(:,I));

% unnormalize
par = [
A(1)*sy*sy, ...
A(2)*sx*sy, ...
A(3)*sx*sx, ...
-2*A(1)*sy*sy*mx - A(2)*sx*sy*my + A(4)*sx*sy*sy, ...
-A(2)*sx*sy*mx - 2*A(3)*sx*sx*my + A(5)*sx*sx*sy, ...
A(1)*sy*sy*mx*mx + A(2)*sx*sy*mx*my + A(3)*sx*sx*my*my ...
- A(4)*sx*sy*sy*mx - A(5)*sx*sx*sy*my ...
+ A(6)*sx*sx*sy*sy ...
]';

% Convert to geometric radii, and centers

thetarad = 0.5*atan2(par(2),par(1) - par(3));
cost = cos(thetarad);
sint = sin(thetarad);
sin_squared = sint.*sint;
cos_squared = cost.*cost;
cos_sin = sint .* cost;

Ao = par(6);
Au = par(4) .* cost + par(5) .* sint;
Av = - par(4) .* sint + par(5) .* cost;
Auu = par(1) .* cos_squared + par(3) .* sin_squared + par(2) .* cos_sin;
Avv = par(1) .* sin_squared + par(3) .* cos_squared - par(2) .* cos_sin;

% ROTATED = [Ao Au Av Auu Avv]

tuCentre = - Au./(2.*Auu);
tvCentre = - Av./(2.*Avv);
wCentre = Ao - Auu.*tuCentre.*tuCentre - Avv.*tvCentre.*tvCentre;

uCentre = tuCentre .* cost - tvCentre .* sint;
vCentre = tuCentre .* sint + tvCentre .* cost;

Ru = -wCentre./Auu;
Rv = -wCentre./Avv;

Ru = sqrt(abs(Ru)).*sign(Ru);
Rv = sqrt(abs(Rv)).*sign(Rv);

a = [uCentre, vCentre, Ru, Rv, thetarad];
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 跟修有关的成语 家电水管清洗一体机靠谱吗? Matrix的中文翻译是什么? 蓉儿和修最后怎样了 水管清洗项目怎么样 Matrix这个单词是什么意思?谢谢!赏10分!因为我只有10分 管道清洗这个项目到底怎么样(打广告的就不要来了)? 终极三国 孙尚香和修 芝士放冰箱冷冻过期了可以吃吗 模能组什么词?最少5个。 自来水管道清洗这个行业怎么样 东京食尸鬼金木研是不是和修家的后代? 什么是&quot;系统重复哑变量&quot;(统计学)? 广州花都自来水管道清洗前景怎么样? 东京喰种中和修家族的目的是什么? 请教关于韦恩图分析差异表达基因的问题 家庭水管清洗的有必要吗,靠谱吗? 和修家族为什么是喰种? 求准确点的翻译呀 最近看到一个家庭自来水管道清洗,自来水管清洗这个项目怎么样,有前景吗? 自来水管道清洗靠谱么?单子多么? 芝麻酱保质期多长,过期能吃吗 与修字相互联通的字有哪些 黑客帝国中Matrix 和machines 是什么关系 管洁在管道清洗行业知名度怎么样,创业选择水再康怎么样? 与修同义的字 高分!!!求翻译!! 万分感谢!!!汉译英 维修和修理的区别 python dmatrices怎么用 请问芝麻酱放冰箱一年了又拿出来一个月了能吃吗?? 什么是BETA什么是TM什么是MX什么是CS(文件名中的) 现榨黑芝麻酱放冰箱两年了还可以吃吗? 修行和修炼是不是同一个意思?如果不同,分别是什么? matlab中lhsdesign函数怎么用啊, 汽车保养和修理之间有什么区别 牛排一直放在冷冻过期了还能吃吗 虚幻引擎5抢先体验,你感觉如何? 和修政是喰种吗 ue5需要学c++吗 芝麻油放了几年了但没有哈喇味还能食用吗?