最小二乗法を用いて3Dポイントセットに平面を当てはめています。私はすでにそれを行うアルゴリズムを持っていますが、重み付き最小二乗法を使用するように修正したいと思います。意味私は各点の重量を持っています(体重が大きいほど、飛行機はその点に近づくはずです)。加重最小二乗 - 平面を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];
}
:解く方程式Ax = B及び3より
double[][] A = {
{fSumXX, fSumXY, fSumX},
{fSumXY, fSumYY, fSumY},
{fSumX, fSumY, pointCloud.size()}
};
double[][] B = {
{fSumXZ},
{fSumYZ},
{fSumZ}
};
解の成分はフィットした平面の係数です。
S oこれを変更してウェイトを使用する方法を教えてください。ありがとう!
FYI - 多くのポイント(> 20など)があり、座標に大きなオフセットがある場合は、生の位置の平方和) - 数値誤差に対する感度が低い。少なくとも、X/Y/Z座標の平均値を最初に差し引いてから、処理を行い、最後にオフセットを戻します。これを行うアルゴリズム固有の方法は他にもありますが、アルゴリズムが最小二乗法をどのように使っているかはわかりませんので、それ以上のことはできません。 –
オフセットとはどういう意味ですか? (申し訳ありませんが、この文脈では分かりません)。 –
簡単な例:点p1 =(10001,10002,10003)、p2 =(10005,10006,10007)、p3 =(10009,10004,10008)。これらの平均値は(10005,10004,10006)です。したがって、ポイント座標をこの量の反対にオフセット(平行移動)して、p1 '=(-4、-2、-3)、p2' =(0,2,1)、p3 '=(4,0、 2)。次に、あなたの数学を行い、その後オフセットに戻します。 –