基于最小二乘的椭圆拟合直接算法 (Direct Least Squares Fitting of Ellipses)
项目介绍
本项目实现了一种基于直接最小二乘法的稳健椭圆拟合算法。该算法的核心理论源于 Fitzgibbon、Pilu 和 Fisher 于 1999 年提出的广义特征值分解方法。与传统的迭代优化方法不同,该算法通过将椭圆几何约束($4ac - b^2 = 1$)引入最小二乘目标的求解过程中,将非线性问题转化为线性代数中的广义特征值求解问题。
该算法在数学逻辑上强制执行“椭圆约束”,这意味着无论输入数据点的噪声如何,拟合出的曲线始终是一个闭合的椭圆,而不会退化为双曲线或抛物线。这使得该程序在处理离散、带噪声的实验数据时具有极高的鲁棒性和计算效率。
---
功能特性
- 结果唯一性:通过解析闭式解(Closed-form solution)获取参数,不需要提供迭代初始值。
- 数学稳定性:通过施加特定的二次约束,确保拟合结果在逻辑上永远满足椭圆定义。
- 抗噪性强:在含有高斯噪声的离散点集上表现出良好的数值稳定性。
- 参数解析详尽:不仅提供代数方程系数,还能自动还原为直观的几何参数(中心坐标、长短轴长、旋转角度)。
- 实时可视化:程序内置绘图功能,能够实时展示数据点分布、拟合曲线及其几何中心。
---
实现逻辑与详细分析
程序通过以下步骤完成从离散点坐标到椭圆参数的完整映射:
1. 模拟数据生成
为了验证算法准确性,程序首先根据预设的几何参数生成模拟数据:
- 设定真实中心地址、长短轴半径及旋转角度。
- 利用参数方程生成圆周点,并施加旋转变换矩阵。
- 向生成的坐标点中注入随机高斯噪声,以模拟真实的传感器或图像提取环境。
2. 构造设计矩阵 (Design Matrix)
程序将输入的二维坐标点转化为代数二次型所需的基底形式。对于每个点 $(x, y)$,构造向量 $[x^2, xy, y^2, x, y, 1]$。将所有点拼接形成设计矩阵 $D$,随后计算散射矩阵 $S = D^T D$,该矩阵包含了观测数据的所有二阶统计信息。
3. 定义椭圆约束矩阵
这是该算法的关键技术细节。为了确保拟合结果为椭圆,程序定义了一个系数约束矩阵 $C$。其数学本质是对应于方程 $ax^2 + bxy + cy^2 + dx + ey + f = 0$ 中系数的判别式约束 $4ac - b^2 = 1$。
在程序实现中,矩阵 $C$ 被定义为 $6 times 6$ 矩阵,并在对应位置(1,3)、(2,2)和(3,1)设置特定常数。
4. 广义特征值求解
程序通过求解广义特征值问题 $Sv = lambda Cv$ 来获取拟合系数。
- 在所有特征值中,该特定约束条件保证了存在且仅存在一个正特征值。
- 程序会自动筛选出该正特征值,并提取其对应的特征向量。该特征向量 $A = [a, b, c, d, e, f]^T$ 即为椭圆代数方程的系数。
5. 几何参数反解
获取代数系数后,程序通过解析公式将其转化为直观的几何属性:
- 几何中心:通过求解偏导数为零的线性方程组获得。
- 旋转角度:利用 $arctan$ 函数根据二阶项系数计算椭圆相对于水平轴的偏转角。
- 轴长半径:基于特征向量归一化后的二次型矩阵计算长轴和短轴的精确长度。
- 长轴校准:通过逻辑判断确保输出的轴长符合“长轴大于短轴”的物理定义,并相应调整旋转角度。
6. 可视化输出
最后,程序创建图形窗口进行成果展示:
- 绘制原始带噪声的散点图。
- 绘制根据拟合参数重新生成的连续椭圆曲线。
- 标注拟合后的几何中心。
- 在图表中以文本框形式实时显示计算得到的二次曲线标准方程。
---
系统要求
- 运行环境:MATLAB R2016b 及以上版本(需支持基础矩阵运算与
eig 函数)。 - 核心算力:算法采用矩阵运算,对硬件要求极低,普通电脑即可实现毫秒级响应。
- 输入要求:要求输入至少 5 个非共线的二维平面坐标点。
---
使用方法
- 打开程序环境。
- 直接运行主程序脚本。
- 程序将自动在命令行窗口输出椭圆的:
- 代数系数($a, b, c, d, e, f$)
- 中心坐标($xc, yc$)
- 长短轴半径
- 旋转角度(角度制)
- 同时会弹出图形窗口,直观呈现数据拟合效果及方程描述。
- 若需处理自定义数据,只需修改程序开头的数据生成部分,将
X_raw 和 Y_raw 替换为自定义的坐标向量即可。