평면을 최소 제곱 법으로 설정된 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];
}
행렬하게보다 :
double[][] A = {
{fSumXX, fSumXY, fSumX},
{fSumXY, fSumYY, fSumY},
{fSumX, fSumY, pointCloud.size()}
};
double[][] B = {
{fSumXZ},
{fSumYZ},
{fSumZ}
};
도끼 = B 해결보다
및 3 솔루션의 구성 요소는 맞는 평야의 계수입니다 ...
S 오, 무게를 사용하기 위해 이것을 수정하는 법을 제발 도와 주실 수 있습니까? 감사!
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). 그런 다음 계산을 한 다음 오프셋에서 다시 추가하십시오. –