2017-11-16 20 views
0

Kinect V2를 사용하여 3D 점 구름과 해당 컬러 이미지를 캡처합니다. 일부 3D 모델을이 컬러 이미지로 올바르게 투영하려면 카메라에서 이미지 공간으로 유효한 투영 행렬을 계산해야합니다 .Kinect V2 SDK에 RGB 카메라에 대한 보정 정보가 없기 때문에 나는 coordinateMapper 클래스의 MapCameraPointsToColorSpace입니다.Kinect v2, 3D 점 구름을 컬러 이미지로 투영

이 메서드는 클라우드의 각 3D 점과 이미지 픽셀 간의 대응을 포함하는 찾아보기 테이블을 반환합니다. 테이블에서 RGB 카메라 내장 매트릭스 (초점 거리, 주요 포인트, 이미지 간격 인수)를 계산하려고했습니다. 그러나 계산 된 고유 내부 행렬을 사용하여 투영 된 2D 점과 조회 테이블의 값 사이에는 오류가 있습니다. 방사형 왜곡을 계산하지 않았기 때문에이 오류가 발생했다고 생각합니다. 내가 맞습니까? 이 Lookup 테이블을 통해 3D에서 2D 색상 포인트 사이의 정확한 매핑을 얻으려면 방사형 왜곡을 고려해야합니까?

답변

0

네, 맞습니다. Raw Kinect RGB 이미지에 왜곡이 있습니다. 가장 좋은 방법은 먼저 RGB 카메라 내장 매트릭스를 사용하여 수동으로 빈 이미지를 왜곡하고 룩업 테이블로 사용하는 것입니다.

distort(int mx, int my, float& x, float& y) const 
    { 
     float dx = ((float)mx - depth.cx)/depth.fx; 
     float dy = ((float)my - depth.cy)/depth.fy; 
     float dx2 = dx * dx; 
     float dy2 = dy * dy; 
     float r2 = dx2 + dy2; 
     float dxdy2 = 2 * dx * dy; 
     float kr = 1 + ((depth.k3 * r2 + depth.k2) * r2 + depth.k1) * r2; 
     x = depth.fx * (dx * kr + depth.p2 * (r2 + 2 * dx2) + depth.p1 * dxdy2) + depth.cx; 
     y = depth.fy * (dy * kr + depth.p1 * (r2 + 2 * dy2) + depth.p2 * dxdy2) + depth.cy; 
} 

For more information

+0

감사합니다! 나에게 많은 도움이된다. –