2011-10-28 3 views
3

iOS에서 AR 응용 프로그램을 작성 중이며 UIView에서 CATransform3D 변환을 사용하고 있습니다.4x4 매트릭스를 3x3 매트릭스로 변환하는 방법은 무엇입니까?

OpenCV를 통해 cvGetPerspectiveTransform() 호출을 통해 퍼스펙티브 매트릭스를 얻을 수 있습니다. 3x3 행렬을 반환합니다.

내가 그것을 발견 위치를 기억 할 수 없지만, 나는 다음과 같은 한 샘플 코드를했다 :

//the opencv transform matrix is put into map_matrix 
cvGetPerspectiveTransform (src_pnt, dst_pnt, map_matrix); 

CATransform3D t = CATransform3DIdentity; 

// map over the CATransform3D 4x4 matrix from the opencv 3x3 matrix 
t.m11 = cvmGet(map_matrix,0,0); 
t.m12 = cvmGet(map_matrix,1,0); 
t.m14 = cvmGet(map_matrix,2,0); 
t.m21 = cvmGet(map_matrix,0,1); 
t.m22 = cvmGet(map_matrix,1,1); 
t.m24 = cvmGet(map_matrix,2,1); 
t.m41 = cvmGet(map_matrix,0,2); 
t.m42 = cvmGet(map_matrix,1,2); 
t.m44 = cvmGet(map_matrix,2,2); 

myView.layer.transform = t; 

그러나,이 양식을 적용하는 것은 미친 가서 여기 저기 뛰어 내 시야를 야기합니다. 나는 3D 그래픽에 최대 읽어 봤는데

t.m14 = cvmGet(map_matrix,2,0); //left and right transform 
t.m24 = cvmGet(map_matrix,2,1); //up and down transform 
t.m21 = cvmGet(map_matrix,0,1); //some kind of skew? 

와 수학을 변환하지만, 꽤 어려운 작업이다 : 약간 번의 실험으로, 나는 단지이 세 가지 매핑이 어느 정도 작동 것을 발견했다.

3x3 매트릭스에서 4x4 매트릭스의 올바른 매핑은 어떻게됩니까?

감사합니다. 당신이 (당신이 목적지에서 소스에 실제로 얻은 변환 경우) 당신 행렬의 역행렬을 시도해야,

첫째 :

답변

2

다른 문제가있을 수 있습니다. mat.inv()를 사용하거나 getPerspectiveMatrix에 전송 된 매개 변수를 스왑합니다.

문제가 해결되지 않으면 3x3 매트릭스를 회전 및 변환으로 분해하고 결합하여 4x4 매트릭스를 형성해야합니다. 대략적인 해결책은 마지막 행과 세 번째 열 (3D 회전에 해당)을 삭제하는 것입니다. 그러나 이는 대략적인 근사치입니다.

확인하시기 바랍니다 또한 시각을 만드는 방법에 대한이 아주 좋은 게시물 행렬 Opencv virtually camera rotating/translating for bird's eye view

+0

당신을 감사 변환이 좋은 읽기입니다! – kurisukun

관련 문제