2017-10-23 16 views
1

을 투영법 좌표 : 내가 PX, PY 및 PZ의 값을 추측하려 어디 제대로 위의 코드를 작성하는 경우변환 <a href="http://paulbourke.net/dome/dualfish2sphere/" rel="nofollow noreferrer">link</a> 다음 것은 우리가 듀얼 어안 변환 할 수 있음을 제안하는 다음과 같은 식을 사용하여 좌표를 투영법 좌표 좌표

const float FOV = 220.0f * PI/180.0f; 
float r = sqrt(u*u + v*v); 
float theta = atan2(v, u); 
float phi = r * FOV * 0.5f; 
float px = u; 
float py = r * sin(phi); 
float pz = v; 
float longitude = atan2(py, px); // theta 
float latitude = atan2(pz, sqrt(px*px + py*py)); // phi 
x = longitude/PI; 
y = 2.0f * latitude/PI; 

불행하게도 나의 수학이 이해하기 충분하고 확실하지입니다.

내 카메라 FOV가 220도이고 카메라 해상도가 2880x1440이라고 가정하면 중첩 된 영역에서 후면 카메라의 지점 (358, 224)과 전면 카메라의 지점 (2563, 197)이 중복 될 것으로 예상됩니다. 영역은 둘 다 (2205, 1009)에 가까운 좌표로 매핑됩니다. 그러나 실제 매핑 포인트는 각각 (515.966370,1834.647949) 및 (1644.442017,1853.060669)이며 이는 모두 (2205,1009)와 매우 다릅니다. 친절하게 위의 코드를 수정하는 방법을 제안하십시오. 많은 감사합니다!

답변

1

등변 각 이미지를 작성 중이므로 역 매핑을 사용하는 것이 좋습니다.

페인팅중인 대상 이미지에서 픽셀 위치부터 시작하십시오. 2D 위치를 경도/위도로 변환하십시오. 그런 다음이를 단위 구 표면의 3D 점으로 변환합니다. 그런 다음 3D 포인트에서 2D 어안 렌즈 이미지의 위치로 변환합니다. 폴 버크 (Paul Bourke) 페이지에서 맨 아래 방정식을 시작한 다음 가장 오른쪽 방정식을 시작한 다음 맨 위 방정식을 시작합니다.

각 단계에서 결과가 올바른지 확인하려면 90 ° 0 ° lat와 같은 획기적인 점을 사용하십시오.

최종 결과는 [-1 .. + 1] 범위의 소스 어안 이미지의 위치 여야합니다. 필요에 따라 픽셀 또는 UV로 다시 매핑하십시오. 원본이 두 개의 눈 이미지로 나뉘어 있기 때문에 대상 (등거리) 경도에서 올바른 원본 하위 이미지로의 매핑이 필요합니다.