二维椭圆拟合算法及推导过程

目录

1、间接平差法

  该方法忽略了半长轴相对于 x x x轴的旋转角度,需要较好的初值才能拟合成功。


2、最小二乘法

  一般斜椭圆具有5个参数,即椭圆中心坐标 ( x 0 , y 0 ) ( x_0 , y_0 ) (x0,y0) (x_0,y_0),椭圆长径和短径 R 1 , R 2 R_1,R_2 R1,R2以及坐标轴旋转的角度 ϕ \phi ϕ,只需要求解了这几个参数椭圆就被唯一确定了。那么对于椭圆的求解则至少需要5个独立的方程。即输入的点的个数至少是5个。

  二维椭圆的一般方程为:
A x 2 + B x y + C y 2 + D x + E y + 1 = 0 (1) Ax^2+Bxy+Cy^2+Dx+Ey+1=0\tag{1} Ax2+Bxy+Cy2+Dx+Ey+1=0(1)

其与我们想要参数之间的转换关系是:
  参考文章:椭圆拟合理论推导和Matlab实现说怎么得来的不是重点,故直接给出截图。

  根据间接平差与最小二乘的关系可知,整个理论推导的过程就是间接平差理论中法方程的建立过程,也不是什么重点和难点,原文写的偏复杂化了,故省略。构建完法方程采用任意一种自己喜欢的方程解算方法进行求解即可。所以,参考文章里的代码实现过程也过于复杂了。

3、matlab案例

matlab 复制代码
%% --------------------------最小二乘求解----------------------------------
X = lsqlin(NBB,W);
%% --------------------------获取椭圆参数----------------------------------
a = X(1); b = X(2); c = X(3); d = X(4); e = X(5);
x0 = (b * e - 2 * c * d) / (4 * a * c - b * b);
y0 = (b * d - 2 * a * e) / (4 * a * c - b * b);
r1 = sqrt(2 * (a * x0^2 + c * y0^2 + b * x0 * y0 - 1) / (a + c + sqrt((a - c)^2 + b^2)));
r2 = sqrt(2 * (a * x0^2 + c * y0^2 + b * x0 * y0 - 1) / (a + c - sqrt((a - c)^2 + b^2)));
phi = 0.5 * atan2(b, a - c);

4、案例结果

5、参考链接

相关推荐
fensnote9 分钟前
西门子 S7 PLC 内部寄存器读写 Demo(C 语言)
c语言·开发语言
benchmark_cc1 小时前
量化项目启动时,应该先设计数据接口还是先编写策略?从系统架构角度做出正确选择
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_962885721 小时前
如何用 Python 判断一只股票“追涨”还是“抄底”更有效?
android·开发语言·python
把我格子衫拿来1 小时前
VTK 与 Qt 的 CMake 工程怎么组织?模块、工具链与二进制兼容排错
c++·qt·vtk·cmake·工程实践
denlaku1 小时前
JDK 15 新特性详解
java·开发语言
滴滴答答哒1 小时前
C# 技巧:优雅实现对象的“局部更新”与“字段合并”
开发语言·c#
原子延迟1 小时前
证件照压缩到20k,原图和电子版的3种方法(2026)
图像处理·人工智能·计算机视觉
总裁余(余登武)1 小时前
K-means算法改进(Python版)
python·算法·kmeans
灯澜忆梦2 小时前
【面向对象编程c++】| 指针与自定义数据类型
开发语言·c++·算法
陈嘿萌2 小时前
CVPR 2026|CHAL:面向运动红外小目标检测的因果引导分层异常感知学习
图像处理·人工智能·深度学习·计算机视觉·学术研究与理论基础