Sto adattando un piano a un set di punti 3D con il metodo dei minimi quadrati. Ho già un algoritmo per farlo, ma voglio modificarlo per usare il minimo ponderato quadrato. Significato Ho un peso per ogni punto (il peso più grande, più vicino l'aereo dovrebbe essere al punto).Minimo quadrato ponderato: adattare un piano al set di punti 3D
L'algoritmo corrente (senza peso) si presenta come segue:
calcolare la somma:
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];
}
che compensare le matrici:
double[][] A = {
{fSumXX, fSumXY, fSumX},
{fSumXY, fSumYY, fSumY},
{fSumX, fSumY, pointCloud.size()}
};
double[][] B = {
{fSumXZ},
{fSumYZ},
{fSumZ}
};
che risolvere Ax = B e 3 componenti della soluzione sono i coefficienti della pianura montata ...
S o, per favore, aiutami a modificarlo per usare i pesi? Grazie!
CRONACA - se si può avere un sacco di punti (> dire 20) e/o le coordinate avere un grande offset, non mai calcolare le statistiche il modo in cui si sta facendo (prendendo le somme dei quadrati della posizione grezzo) - ha scarsa sensibilità agli errori numerici. Come minimo, è possibile sottrarre prima il valore medio delle coordinate X/Y/Z, quindi eseguire l'elaborazione, quindi aggiungere di nuovo gli offset. Esistono altri modi specifici per l'algoritmo, ma non capisco esattamente in che modo l'algoritmo utilizza i minimi quadrati, quindi non può aiutare di più. –
Cosa intendi per offset? (scusa, non capisco in questo contesto). –
Esempio rapido: punti p1 = (10001, 10002, 10003), p2 = (10005, 10006, 10007), p3 = (10009, 10004, 10008). Questi hanno valori medi di (10005, 10004, 10006). Quindi, offset (tradurre) le coordinate del punto per l'opposto di questa quantità per ottenere p1 '= (-4, -2, -3), p2' = (0,2,1), p3 '= (4,0, 2). Quindi fai i conti, quindi aggiungi l'offset. –