最小二乗法で平面を 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 つのコンポーネントは、当てはめられたプレーンの係数です...
それで、重みを使用するようにこれを変更する方法を教えてください。ありがとう!