给定ℝ²中3个及以上近似圆弧点,求解最优圆的技术方案咨询
嘿,这个问题我在做视觉检测和点云处理的时候经常碰到!用最小二乘拟合最优圆确实是个既严谨又容易实现的方案,我给你一步步拆解清楚:
第一步:把圆的方程转成线性形式
我们从圆的基本定义出发,对于每个采样点$(x_i, y_i)$,它满足:
$(x_i - X_c)^2 + (y_i - Y_c)^2 = R^2$
把左边展开后整理一下:
$x_i^2 - 2x_iX_c + X_c^2 + y_i^2 - 2y_iY_c + Y_c^2 = R^2$
接下来把所有项移到同一侧,把含$x_i$、$y_i$的项和常数项分开,就能得到一个线性化的方程:
$x_i(-2X_c) + y_i(-2Y_c) + 1 \cdot (X_c^2 + Y_c^2 - R^2) = x_i^2 + y_i^2$
这里的关键技巧是引入三个新变量,把非线性问题转化为我们熟悉的线性回归问题:
令 A = -2X_c,B = -2Y_c,C = X_c² + Y_c² - R²,那么方程就简化成:A·x_i + B·y_i + C = x_i² + y_i²
第二步:用最小二乘求解线性参数A、B、C
现在问题变成了:找到最优的A、B、C,让所有点的(A·x_i + B·y_i + C) - (x_i² + y_i²)的平方和最小——这就是标准的线性最小二乘问题。
假设我们有n个点(n≥3),可以把所有点的方程写成矩阵形式:
[ x₁ y₁ 1 ] [A] [x₁² + y₁²] [ x₂ y₂ 1 ] [B] = [x₂² + y₂²] [ ... ... ... ] [C] [ ... ] [ xₙ yₙ 1 ] [xₙ² + yₙ²]
用符号表示就是 $M \cdot \vec{θ} = \vec{b}$,其中$\vec{θ} = [A,B,C]^T$,$\vec{b}$是每个点的$x_i²+y_i²$组成的向量。
最小二乘的解可以通过矩阵运算得到:θ = (M^T · M)⁻¹ · M^T · b
这里要注意:只要你的点不是完全共线的(共线的话拟合出来是直线,不是圆),矩阵$M^T · M$就是可逆的,不会出现无解的情况。
第三步:从线性参数还原圆心和半径
解出A、B、C之后,我们就能反推回圆的原始参数了:
- 圆心坐标:$X_c = -A/2$,$Y_c = -B/2$
- 半径:$R = \sqrt{X_c² + Y_c² - C}$
实际开发的小提醒
- 如果你的点集存在严重的共线情况,这个方法会失效(矩阵奇异),所以实际代码里最好加个共线性检查,或者捕获矩阵求逆失败的异常。
- 这个方法是代数距离最小化的拟合,和点到圆的几何垂直距离最小化略有差异,但对于大多数工程场景(比如图像特征点拟合、激光点云圆弧提取),精度已经足够。如果需要更高精度的几何拟合,可以把这个结果作为初始值,用高斯-牛顿法做迭代优化。
内容的提问来源于stack exchange,提问作者BCS

