You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Octave中如何基于给定离散点拟合椭圆

椭圆拟合解决方案

你之前采用三角多项式结合最小二乘拟合效果不佳,核心原因是参数化拟合对初始值、点集采样均匀度敏感度极高,对于带噪声的离散点集,建议采用工业界通用的约束最小二乘拟合方案,稳定性和准确率远高于参数化拟合方法。

推荐实现方案:Fitzgibbon约束最小二乘椭圆拟合

该方案是目前应用最广泛的椭圆拟合方法,通过引入椭圆的二次曲线约束,避免拟合结果为抛物线或双曲线,对非均匀采样、低噪声点集的适配性极好。

实现步骤

  • 先将两个大小为[1001,1]的x、y向量拉平为一维数组,构造二次项设计矩阵
  • 求解带椭圆约束的最小二乘问题,得到椭圆二次曲线一般式的6个系数
  • 可根据需求将系数转换为椭圆中心、长/短半轴、旋转角等直观参数

代码示例(Python)

import numpy as np

def fit_ellipse(x, y):
    # 输入x、y为[1001,1]格式的向量
    x = x.ravel()
    y = y.ravel()
    # 构造设计矩阵:每一行对应 [x², xy, y², x, y, 1]
    D = np.vstack([x**2, x*y, y**2, x, y, np.ones_like(x)]).T
    S = D.T @ D
    # 椭圆约束矩阵:满足 B²-4AC < 0
    C = np.zeros([6, 6])
    C[0, 2] = C[2, 0] = -2
    C[1, 1] = 1
    # 求解广义特征值得到最优系数
    eig_val, eig_vec = np.linalg.eig(np.linalg.pinv(S) @ C)
    conic_coef = eig_vec[:, np.argmax(eig_val > 0)]
    return conic_coef

异常适配建议

  • 如果原始点集存在明显离群点,可以将上述拟合方法和RANSAC框架结合,剔除异常值后再做拟合,鲁棒性会进一步提升
  • 无需再尝试三角多项式这类参数化拟合方案,这类方案需要提前知道椭圆的中心、旋转角等先验信息,否则极易陷入局部最优得到非椭圆结果

内容的提问来源于stack exchange,提问作者stackfull

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:45:02