gpt4 book ai didi

algorithm - 加权最小二乘 - 将平面拟合到 3D 点集

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:45:05 35 4
gpt4 key购买 nike

我正在使用最小二乘法将平面拟合到 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 个分量是拟合平面的系数...

那么,您能帮我修改一下以使用权重吗?谢谢!

最佳答案

直觉

由法线 n 定义的平面上的点 x 和平面 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,其中每一行都是第ix_i减去质心c,我们可以重写:

f(n) = | M n |^2

您应该能够说服自己,这个矩阵乘法版本与前面等式的和相同。

然后你可以取singular value decomposition M,然后您想要的 n 由对应于最小奇异值的 M 的右奇异向量给出。

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

关于algorithm - 加权最小二乘 - 将平面拟合到 3D 点集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9243645/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com