小编典典

加权最小二乘-使平面适合3D点集

algorithm

我正在用最小二乘法将平面拟合到3D点集。我已经有算法可以做到这一点,但是我想对其进行修改以使用加权最小二乘。意思是我对每个点都有权重(权重越大,平面应该越靠近该点)。

当前算法(无权重)如下所示:

计算总和:

for(Point3D p3d : pointCloud) {
    pos = p3d.getPosition();
    fSumX += pos[0];
    fSumY += pos[1];
    fSumZ += pos[2];
    fSumXX += pos[0]*pos[0];
    fSumXY += pos[0]*pos[1];
    fSumXZ += pos[0]*pos[2];
    fSumYY += pos[1]*pos[1];
    fSumYZ += pos[1]*pos[2];
}

比做矩阵:

double[][] A = {
    {fSumXX, fSumXY, fSumX},
    {fSumXY, fSumYY, fSumY},
    {fSumX,  fSumY,  pointCloud.size()}
};

double[][] B =  {
    {fSumXZ},
    {fSumYZ},
    {fSumZ}
};

比解Ax = B且解的3个分量是拟合平原的系数…

那么,您能帮我如何修改此值以使用权重吗?谢谢!


阅读 268

收藏
2020-07-28

共1个答案

小编典典

直觉

的点x上的平面限定由正常n和上平面上的点p服从:n.(x - p) = 0。如果点y不在平面上,n.(y -p)将不等于零,因此定义成本的一种有用方法是|n.(y - p)|^2。这是点y到平面的平方距离 。

在权重相等的情况下,您希望找到一个n在对各点求和时将总平方误差最小化的:

f(n) = sum_i | n.(x_i - p) |^2

现在假设我们知道飞机上的 某个p。我们可以轻松地将质心计算为质心,质心只是点云中各点的按分量平均,并且始终位于最小二乘平面中。

让我们定义一个矩阵M,其中每行是ithx_i减去质心c,我们可以重写:

f(n) = | M n |^2

您应该能够使自己确信,此矩阵乘法版本与先前公式的总和相同。

然后,您可以采取奇异值分解M,和n你想的那么由右奇异向量给出M对应于最小奇异值。

要合并权重,您只需w_i为每个点定义一个权重。计算c为点的加权平均值,然后sum_i | n.(x_i - c) |^2以类似的方式更改为sum_i | w_i * n.(x_i - c) |^2M。然后像以前一样解决。

2020-07-28