검색결과 리스트
글
[영상 Geometry #6] 이미지 투영(Imaging Geometry)
(3D 비전 geometry 5번째 파트 Imaging Geometry입니다)
5. Imaging Geometry
이제 지금까지의 내용을 종합하여 3D 월드좌표에서 2D 픽셀좌표로의 변환 관계, 즉 이미지가 형성되는 과정을 정리해 보겠습니다.
설명의 편의를 위해 [영상처리] - [컴퓨터 비전에서의 Geometry #1] 좌표계의 <그림 1>을 다시 참조합니다.
<그림 1>
5.1 원근 투영 변환 (Perspective Projection Transformation)
먼저, 3D에서 2D로의 투영변환 행렬을 살펴보겠습니다.
투영변환은 3차원 공간에 있는 점을 이미지 평면에 투영시키는 변환인데, 투영변환을 모델링하는 방법에는 크게 2가지가 있습니다.
하나는 위 <그림 1>처럼 투영 기준점(projection reference point)을 좌표계의 원점으로 잡고 이미지 평면을 전방 Zc = d에 두는 경우이고 다른 하나는 투영시킬 이미지 평면을 좌표계 원점에 위치시키고 투영 기준점을 Zc = -d에 잡는 경우입니다.
먼저, <그림 1>처럼 투영 기준점을 원점으로 잡은 경우 3차원 상의 점 P를 p'으로 투영시키는 변환 행렬은 다음과 같이 주어집니다 (homogeneous 좌표 표현).
--- (1)
즉, 투영평면이 Zc = d일 경우 (Xc, Yc, Zc, 1)는 (Xc, Yc, Zc/d) = (d*Xc/Zc, d*Yc/Zc, 1)로 투영됩니다.
다음으로, 만일 투영평면이 Zc = 0이고 투영 기준점을 (0, 0, -d)인 경우에는 투영변환 행렬이 다음과 같이 주어집니다.
--- (2)
이 경우, (Xc, Yc, Zc, 1)은 (Xc, Yc, 1+Zc/d) = (d*Xc/(Zc+d), d*Yc/(Zc+d), 1)로 투영됨을 알 수 있습니다.
이 외에도 투영변환을 표현하는 방법은 다양합니다면 여기서는 식 (1)을 기준으로 Zc = d로의 투영변환을 다음과 같이 표현하겠습니다.
--- (3)
5.2 이미지 투영 모델
월드 좌표계 상의 한 점 (X, Y, Z)를 이미지 평면(픽셀 좌표계) 상의 점 (x, y)로 변환시키는 행렬을 H라 하면, 그 관계식은 다음과 같습니다 (homogeneous 좌표를 사용).
--- (4)
이 때, H는 3 × 4 행렬로서 다음과 같이 분해하여 표현할 수 있습니다.
--- (5)
--- (6)
식 (5)에서, [R|t]는 월드 좌표계를 카메라 좌표계로 바꾸는 rigid 변환 행렬, Tpers(1)는 카메라 좌표계 상의 3D 좌표를 정규 이지미평면(normalized image plane)에 투영시키는 프로젝션(projection) 행렬, K는 카메라 내부(intrinsic) 파라미터 행렬로 정규 이미지 좌표를 픽셀 좌표로 바꾸어 줍니다. Tpers(1)은 d = 1 즉, Zc = 1인 평면으로의 투영변환을 말합니다 (즉, normalized image plane으로의 투영).
이제 식 (6)에서 투영변환 Tpers(1)과 rigid 변환 [R|t]를 하나로 합치면 다음과 같이 좀더 간단한 표현식이 됩니다.
--- (7)
이 때, 앞부분 K를 내부 카메라 행렬(intrinsic camera matrix)이라 부릅니다. K는 카메라 내부 파라미터 (intrinsic parameter)를 나타내고 뒷부분 rigid 변환 [R|t]은 카메라 외부 파라미터 (extrinsic parameter)를 나타냅니다.
* 참고사항 1
다른 문제들도 마찬가지겠지만 모델이라고 하는 것이 정의하기에 따라 또 기준을 어떻게 잡느냐에 따라 다양한 방식의 표현 및 해석이 가능합니다.
제가 이 글에서는 3D 공간이 일단은 정규 이미지 평면에 투영된 후에 픽셀 이미지로 변환되는 것으로 설정을 했기 때문에 식 (6)과 같은 형태로 카메라 모델 수식이 표현되었습니다. 그런데 이렇게 하면 수식 자체는 식 (7)과 같이 깔끔하게 정리되지만 카메라 내부 파라미터 행렬인 K에 대한 기하학적 해석이 직관적이지 않은 문제가 있습니다.
그 이유는 실제 투영은 가상의 normalized 이미지 평면이 아닌 초점거리 f의 이미지 평면으로 투영되기 때문입니다. 따라서, 실제로는 투영변환이 Zc = f 평면으로의 투영인 Tpers(f)가 되어야 하며 K는 물리적인 metric 좌표 단위를 픽셀 좌표계 단위로 변환시켜주는 변환행렬이 되어야 합니다.
--- (8)
위 식 (8)에서 f는 초점거리(카메라 좌표계 원점과 이미지 센서와의 거리), sx, sy는 이미지 센서의 metric 단위를 x, y 픽셀 단위로 바꿔주는 일종의 스케일(scale) 요소입니다.
여기서 Tpers(f)를 편의상 식 (3)과는 조금 다른 형태로 표현했는데, 표현만 다를 뿐 실제로는 같은 변환입니다. 즉, Tpers(f)는 다음과 같이 2가지 형태로 표현할 수 있으며 homogeneous 좌표에서는 둘다 같은 변환입니다.
--- (9)
결과적으로 식 (8)과 식 (7)을 비교해 보면 단지 sx*f를 fx, sy*f를 fy로 표현한 것임을 알 수 있습니다.
사실 식 (7)이나 식 (8)이나 모두 같은 말이며 어떤 모델 표현을 사용해도 관계는 없습니다. 하지만, 보통 일반적으로 사용되는 카메라 모델 표현은 식 (7)이므로 식 (7)의 표현을 사용하는게 좋겠습니다.
* 참고사항 2
식 (7)의 카메라 모델에서는 영상왜곡은 고려하지 않았습니다. 만일 영상왜곡까지 고려한다면 왜곡모델은 투영변환과 내부 파라미터 변환 사이에 들어가야 합니다. 즉, normalized 이미지 평면에 투영된 좌표 (u, v)에 대해 왜곡 파라미터를 반영한 후에 K를 통해 픽셀 좌표계로 변환해야 합니다. 영상왜곡에 대해서는 카메라 왜곡보정 - 이론 및 실제 글을 참조하기 바랍니다.
5.3 OpenCV 관련 함수
OpenCV 관련 함수들 목록입니다.
- calibrateCamera(): 평면물체(planar object) 상의 점들에 대한 3D 월드좌표와 2D 이미지 픽셀 좌표 쌍들을 입력으로 주면 camera matrix K와 왜곡계수, 그리고 [R|t] 행렬을 반환해 줌. 최소 2개 이상의 서로 다른 시점(view point)에서 입력 데이터를 획득해야 하며, [R|t]는 각 시점별로 계산되어 반환됨
- decomposeProjectionMatrix(): 3D 월드좌표를 2D 픽셀 좌표로 변환시켜주는 3 × 4 변환행렬을 입력으로 주면, 이 행렬을 카메라 행렬 K와 [R|t] 행렬로 분해해 줌
- solvePnP() / solvePnPRansac(): 카메라 내부 파라미터 행렬 K와 3D 월드좌표 - 2D 픽셀좌표 매칭쌍들을 입력으로 주면, 카메라 외부 파라미터인 [R|t] 행렬을 계산해 줌. 최소 4개의 좌표쌍을 필요로 함
by 다크 프로그래머
'영상처리' 카테고리의 다른 글
[영상 Geometry #7] Epipolar Geometry (141) | 2013.07.24 |
---|---|
[영상 Geometry #6] 이미지 투영(Imaging Geometry) (76) | 2013.07.22 |
[영상 Geometry #5] 3D 변환 (51) | 2013.07.15 |
[영상 Geometry #4] Homography 보완 (38) | 2013.07.12 |
설정
트랙백
댓글
- 이전 댓글 더보기
-
안녕하세요, 다크프로그래머님의 글을 잘 보고 있습니다. 일일이 답변도 다 달아주시고, 정말 감사하네요.
저도 한 가지 질문이 있어서 댓글을 달아봅니다.
외부 파라미터를 구하는 과정 - slovePnP와 같은 함수를 직접 만들어보고 있는데요, 입력좌표쌍의 월드좌표의 Z가 모두 0일 경우 r_13, r_23, r_33이 모두 쓸모없어지는게 아닌가 하구요. 매칭쌍 4개를 임의로 정한 뒤, 손으로 직접 풀어보기 위해 연립방정식을 전개해보면 r_13, r_23, r_33을 어떻게 알아내야 될지 모르겠습니다. -
질문을 올리고 다시 보니 너무 어이가 없는 질문 같아서 지우려고 했는데 패스워드를 모르네요 ㅎㅎ 너무 수준낮은 질문같아서~ 하여튼 저는 Z를 모두 1로 만들어서 어떻게든 해보려고 합니다.
그런데 호모지니어스 방법으로 변환행렬을 3x4로 싹 묶어서 한 번에 풀면 풀릴까요? 굳이 카메라의 좌표를 몰라도 되고 단지 월드->이미지 프로젝션만 하고 싶다면 나눌 필요가 없는 게 아닐까 생각중입니다... 였었는데 안 되네요. 해공간이 직선 이상으로 커져버립니다. 한 평면위에 있는 4개의 점은 무조건 안 되는 걸까요? -
안녕하세요 다크프로그래머님. 작성하신 글을 감사히 잘읽었습니다. 제가 이번에 directx에 관심을 가지게 되어서 투영에 관해 정보를 찾아보고있는 찰나에 다크프로그래머님의 글을 읽게 되었습니다. 저는 '5.2 이미지투영'에 관해 좀더 전문적인 서적이나,, 정보들을 알고싶은데.. 제가 찾아본 서적은 "DirectX11을 이용한 3D 게임 프로그래밍 입문" 입니다 제가 알고자하는 정보가 이 서적에 참고할만한 내용이 맞는지 아니면 어디서 투영에 관한 정보를 얻을수있는지 알고자 댓글을 남깁니다. /// 제가 알고싶은것 -> "특정 게임 내에서 좌표와 카메라 행렬을 추출한뒤 추출한 데이터를 이용해 외부 프로그램(directx)을 이용해서 케릭터 위에 특정 데이터를 출력하는 방식." (제 댓글을 뒷받침 할수있는 내용 -> 유튜브.com/watch?v=06PpBTzVNts) (데이터 추출은 방법을 제가 알고있기 때문에 이 내용과 무관합니다)
-
이제 막 비젼분야에 입문한 대학생입니다 :) 모르는 것 투성이지만 다크님 덕분에 차근차근 조금씩은 앞으로 나아가고 있는 것 같습니다. 다크님께 조언을 듣고자 댓글을 남겨봅니다
제가 고정되어 있지 않은 카메라와 바닥에 있는 물체 사이의 실제 거리를 구하고자 하는데요.
물체의 실제크기는 알지 못하는 상황입니다. 이 때 실제 거리를 어떻게 구해야 하나요?
실제 거리에 대한 이야기들을 많이 찾아보았지만 대부분 실제 크기를 아는 경우가 많더라구요ㅠ
이 때에는 epipolar 기법을 사용해서 2D에서 3D로 좌표변환을 해야 할 것 같은데 제 생각이 맞나요?
이에 대한 조언 부탁드립니다!! -
셀프칼리브레이션 논문 읽다가
////////// 1 0
p ~ KR [ 0 1 R't ]L
///////// 0 0
3x3 projection matrix를 위에처럼 나타냈는데 이해가 잘안되네요
K는 내부파라미터 R은 로테이션 t는 트렌스레이션 L은affine에서 Euclidean으로 바꿔주는 메트릭슨데
행렬안에 R'(전치행렬) t 가 되는 이유를 모르겠네요
혹시 다크님은 알고 있으신지요?? -
첫 번째로..수식(4) 밑에
이 때, T는 4 × 3 행렬로서 다음과 같이 분해하여 표현할 수 있습니다.
-->여기서 4 x 3 이 아니라 3 x 4 아닌가요?...
두 번째로.. 수식(8)의 첫 줄에서 두번째 줄로의 변환이 이해가 잘 가지 않습니다.
수식(6)에서 수식(7)로의 변환을 설명하시면서 Tpers(1)행렬과 RT행렬을 곱해서 하나의 행렬로 표현했다고 하셨고....동일한 방법으로 행렬곱셈을 해서 풀어보려고 하는데 이게 잘 안되네요...
무슨의미로 (8)수식을 쓰셨는지는 알겠고, 어떤형태로 3개의 행렬(카메라행렬과 Tpers행렬 RT행렬)을 2개의 행렬로(카메라, RT)로 통합하셨는지도 의미적으로는 알겠는데 직접 행렬을 풀어서 해보려니 잘 안되네요..;;
(8)에서 [3x3][3x4][4x4] 이면 [3x4][4x4]가 나와야 되는데 작성된 수식은 [3x3][4x4]이기도 하고...ㅜ.. [0, 0, 0]열의 표기에 대한 규칙이 있나요?
[sxf 0 cx 0] [0 syf cy 0][0 0 1 0] 행렬과
[r11 r12 r13 tx][r21 r22 r23 ty][r31 r32 r33 tz][ 0 0 0 1] 행렬로 표현되어야 할 것 같아 문의드립니다..
-
다크pgmr 2018.02.19 10:04 신고
안녕하세요. T는 3 x 4로 수정하였습니다. 잘못된 부분을 알려주셔서 감사합니다.
이하 수식에 대한 부분은 지금 제가 봐도 어려운 것 같습니다. 두 행렬의 곱 AB에서 A의 k번째 열벡터가 0벡터면 A에서 k번째 열벡터를 지우고, B에서 k번째 행벡터를 지운 축소된 행렬 A', B'에 대해 AB = A'B'과 같은 결과가 됩니다. 하지만, 결과적으로 같을 뿐인 것을 수식에서 설명없이 사용한 것은 비약이 심했던 것 같습니다. 지금보니 수식을 다시 정리할 필요가 있을 것 같습니다만.. 지금 수정하려니 daum 수식편집기가 오류가 나면서 뭔가 잘 작동을 하지 않습니다..
-
-
안녕하세요
이런저런정보를 찾아보다가 찾게되었습니다.
제가 이쪽은 잘모르나.. 관련된 업무를 진행할 일이 있어서 여쭤볼게 있어서요.
저는 앱 개발자입니다.
폰에서 카메라로 비춰지는 건물이 있다고 가정하면 그 건물이 화면에 보여지면 폰 화면에서의 건물의 양끝 x좌표를 구할수 있을까요?
건물의 양끝 GPS좌표가 있다고 가정하고요. 저의 GPS를 바탕으로 거리는 구할수 있겠는데 그걸 어떤식을 풀어 나가야 할지 애매해서 이렇게 질문 남깁니다.
-
다크pgmr 2018.03.06 14:32 신고
네, 그러시면 자신(휴대폰)의 gps 좌표, 표시하고자 하는 건물의 양 끝의 gps 좌표가 주어져 있을 때, 휴대폰 화면에서 건물 양 끝의 x 좌표를 구할 수 있는가의 문제로 생각하면 되나요? 제가 제대로 이해했는지는 잘 모르겠습니다만 이해한 것이 맞다면 구하는 것은 어려울 것 같습니다. 기하학적으로 영상에서의 위치를 결정하려면 카메라의 x, y 좌표뿐만 아니라 카메라의 높이(z), 그리고 방향(pitch, roll, yaw) 정보가 필요합니다. 그리고 덧붙여서 카메라의 내부 정보(초점거리)도 같이 필요합니다. 만일 제가 말한 정보가 모두 주어진다면 영상에서의 위치를 결정하는 것은 어렵지 않습니다.. 하지만 현실적으로 그러한 정보를 얻기가 쉽지 않으니 결론은 어렵다고 생각됩니다.
-
다크pgmr 2018.03.08 17:34 신고
일단 카메라 파라미터에 대한 이해가 필요하구요(http://darkpgmr.tistory.com/32), 이후 카메라 좌표계에 대한 이해(http://darkpgmr.tistory.com/77), 그리고 http://darkpgmr.tistory.com/122, http://darkpgmr.tistory.com/153 글들을 읽어보시면 좋을 것 같습니다. 기본적인 영상기하학을 이해하면 풀수 있는 문제이긴 하지만 그러기 위해서는 조금은 공부가 필요합니다. 완벽하진 않지만 제 블로그에 있는 위 글들도 읽어보시고 또 부족한 부분은 인터넷 등을 참고하시면 좋을 것 같습니다.
-
안녕하세요. 원근 투영 변환에 대해 이해가 잘 안가는 부분이 있어 질문드립니다.
1. 만약 d=1로 잡았을 경우, 원근 투영 변화는 x, y 성분을 z로 나눈 값이 된다고 이해했고,
2. 설명에서 점 P를 p'로 투영한다고 하셔서 카메라 좌표계의 점을 정규좌표계로 옮긴다고 이해했습니다.
3. 그리고 제가 알기로 정규 좌표계는 x,y 값이 -1~1 사이라고 알고있습니다.
그렇다면, 이 과정에서 카메라 모델의 x,y aspect가 고려가 되는 것인지, 그리고 카메라 내부 파라미터의 영향이 제거되는 것인지 잘 이해가 되지 않습니다. -
안녕하세요 좋은 정보 잘 보았습니다. 알려주신 방법대로 문제를 해결해 보려 하였으나
3차원 좌표에서 2차원 이미지 좌표로의 변환이 되지 않고 있습니다.ㅡㅠ
가지고 있는 정보는 3차원 좌표값과 카메라 위치와 회전정보, 카메라 내부요소 입니다.
위에 정보처럼 축 설정을 하였고 행렬을 구해보려 하였으나 3차원 모든 점이 2차원의 한점으로 수렴됩니다. 혹시 이와 관련하여 알려주실 힌드 좀 있으신가요. -
답변 감사드립니다.
간단하게 소스를 요약해드리면
R|t = mRz*mRy*mRx; //각 요소는 카메라 외부요소에 x축만 -90(라디안 변환함)
Result1 =R|t*GP+t; // GP(3차원 점Px,Py,Pz), t=이동량Matrix, 그리고 t=(GP-C); C는 카메라위치
if( Result1[2]!=1.0 )
{ // 동차좌표 표현
Result1[0] /=Result1[2]; Result1[1] /=Result[2]; Result1[2] /=Result[2];
}
Result2 =K*Result1; // K는 내부카메라요소행렬(fx =Sx*f) Sx =1mm당 픽셀수(=1/0.00345(픽셀사이즈mm), f:초점거리
이렇게 해서 나온 결과 Result2에 x,y 가 이미지 좌표라 생각하였는데
결과가 ...예를 들면,
첫번째 결과, 530.120393, 630.12456
두번째 결과, 530.124344, 630.13556
...이렇게 작은 값들만 뒤에서 변합니다.ㅠㅡㅠ
간략히 쓰긴 하였는데 이해가 되셨는지 모르겠네요.
-
다크pgmr 2018.09.11 15:30 신고
전반적으로 봤을 때, 계산 과정 상의 특별한 문제는 없어 보입니다. 다만, t = (GP-C)는 조금 이상합니다. t = -R*C이어야 합니다. 그리고, 표현상 R|t는 R로 표기하는 것이 좋습니다.
어떤 문제를 해결하기 위해서는 문제를 단순화시키는 것이 필요합니다. 예를 들어, 회전이 없다고 가정하고 R을 항등행렬(Identity 행렬) 로 놓고 계산을 했을 때도 동일한 문제가 발생하는지 확인해볼 필요가 있습니다. 그리고 테스트용 GP도 다양한 방식으로 다양성을 주면 좋을 것 같습니다.
-
-
안녕하세요. 실시간 프로젝션맵핑을 공부하는 사람입니다. 다크프로그래머님 정보 아주 자주 이용합니다.
하나 여쭙고 싶습니다. OPENCV의 calibratecamera 함수를 사용 중입니다. (https://www.youtube.com/watch?v=pCq7u2TvlxU) <--이렇게 구현하고 싶습니다... 3D월드좌표와 2D이미지픽셀좌표 중에 어느게 실시간으로 좌표값이 변화가 되어야하나요???? ㅜㅜ -
계속 기본적인 질문을 드려 죄송합니다 ㅠㅠ위에서 말씀해주신 calibratecamera함수에서 objectPoints(물체의 3d월드좌표)를 제가 tracker를 단 물체의 각 꼭지점(로컬좌표)으로 계산하였습니다. 그러면 projection matrix를 제대로 변환하기 위해서는 로컬좌표를 월드좌표로 변환해야하나요?
-
안녕하십니까 기본기 공부중이라 항상 잘보고 있습니다. 제 업무중에 RealSense d435 카메라의 left-infrared camera와 color camera를 align 시키는 업무가 있는데요(depth image는 left-infrared camera에 이미 align 되어있음)이 depth image를 color image에 align시키는 것은 librealsense2 함수 Align을 쓰면 잘 맞춰지는데 infrared image는 align 함수가 지원이 안되더라구요. 그래서 문의를 해보니까
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
But one suggestion for you to have a try, Basically the mapping is a triangulation technique where we go through the intersection point of a pixel in 3D space to find its origin in another frame, this method work properly when the source data is depth (Z16 format).
One possible way to map between two none-depth stream is to play three streams (Depth+IR+RGB), then calculate the UV map for Depth to Color, and then use this UV map to remap IR frame ( remember that Depth and left IR are aligned by design).
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
즉 depth 에서 color image로 매핑하는 UV map이라는것을 구해서 depth랑 left-infrared camera랑 align됐으니까 똑같이 UVmap을 통해 left-infrared camera를 재매핑시키라는 거 같은데요.. 그 UV map이라는게 자세히 머가 먼지 모르겠네요... 다크프로그래머님이 설명하신 내용중에 힌트가 있을꺼같은데.. 무지함에 화만나네요.. 조언해주시면 감사하겠습니다.. -
안녕하세요. 잘보고있씁니다!! 저번에 여쭈었던것 잘 활용하였습니다.
그런데 질문이 하나 더 생겼씁니다.
1. Tracker공간의 좌표와 projector의 좌표가 달라서.. 이것을 매핑시키고 싶습니다.
Tracker의 좌표는 tracker만의 공간상에서 실시간으로 (-0.5, 0.5,3.0) 이런식으로 변화합니다.(트래커 공간상의 위치는 알고 있으며 프로젝터는 1920*1280 해상도를 가지고 있습니다.) (제가 하고 싶은 것은 프로젝터가 쏘는 물체와 트래커와 정확히 일치시키고 싶은 것입니다 ㅠㅠ)
ㅠㅠ -
프로젝션 매핑에 선행되어야하는 projector와 tracker와의 캘리브레이션 방법은 어떻게 검색을 해야 공부를 할 수 있을까요??ㅠㅠ 초심자라 많이 힘드네요 ㅠㅠ
-
안녕하세요. 항상 글 잘보고 있습니다.
질문 한가지만 해도될까요? 시간 되실때 답변 주시면 정말 감사하겠습니다.
화면 좌표계와 월드 좌표계 변환 하는 식에서, s(x,y,1) = K[R|t](X,Y,Z,1) 이라고 설명해주셨는데요.
만약 화면 좌표 x,y를 알고 카메라 내부 매트릭스 K를 알고있다면,
'K의 역행렬 * s(x,y,1) = 월드좌표' 라는 식이 될것 같은데요. 이 때 s를 구할 수 있는 방법이 있을까요??
(화면 좌표에서 월드 좌표계로 변환을 하려고 합니다.) -
항상 좋은 지식을 얻어가고 있습니다. 감사합니다.
식(5),(6)에서 Tpers(1)이 정규이미지평면으로 변환이라고 하셨는데 이부분이 잘 이해가 가질 않네요. 정규이미지평면은 영상의 수직,수평 길이가 각각 -0.5 ~ 0.5인 평면으로 알고 있는데요. 그러면 정규이미지평면의 값은 [u v 1] 이렇게 나와야하는거 아닌가요? 위 식대로 연산하면 그냥 [Xc Yc Zc]가 나오는데 이것이 어떻게 정규이미지평면상의 점이 되는지 여쭙고 싶습니다. -
안녕하세요. 올려주신 자료로 많은 도움 받고잇습니다.
스룹땁다 님과 같은 비슷한질문이 있습니다. 화면이 지면만을 보고 있어 지면에 대한 월드 좌표를 구하고자 합니다.
위 질문에서 답에 점과 거리를 알고있거나 그점이 지면위에 있는점 이라고 하셨는데, s는 뭐로 보면 되나요?
Pw = (K[R|t])^-1*s[x,y,1]
이식을 이용하여 월드 좌표계상에 포인트를 알고싶습니다.
※카메라는 바닥과 불과 몇센치 안떨어져 있으며 거의 정면을 보고있습니다. yaw, pitch값 정도는 바뀌나 거의 바닥만 봅니다.
-
안녕하세요, 좋은 글 잘 보았습니다. 한가지 질문이 있어 글을 남깁니다.
투영평면이 Zc = d일 경우 (Xc, Yc, Zc, 1)은 (Xc, Yc, Zc/d) = (d*Xc/Zc, d*Yc/Zc, 1)로 투영된다는 의미는 카메라 좌표계를 중심으로 Xc,Yc,Zc를 중심으로 잡는다고 이해를 했는데, Zc = 0이고 투영 기준점은 (0, 0, -d)이라는 의미는 정규 좌표계를 중심으로 잡는다는 말씀이신가요?
답변 부탁드리겠습니다. 감사합니다.-
다크pgmr 2020.12.02 00:33 신고
옛날에 처음 영상 기하학을 공부하면서 썼던 글들이라서 제가 봐도 내용이 어렵기만 합니다..
카메라의 원점은 렌즈 중심이고 빛이 렌즈 중심을 통과해서 이미지 센서(필름)에 상하좌우 반전되어서 상이 맺히게 됩니다. 투영 기준점(원점)은 항상 렌즈 중심이고, 상이 맺히는 이미지 평면의 위치가 (0, 0, -d)이겠습니다. 실제 물리적으로는 이미지 평면이 카메라 원점 뒷편에 존재하지면 이렇게 곧이 곧대로 기하학을 풀면 상하좌우가 바뀌어서 계산이 너무 복잡해집니다. 그래서 컴퓨터 비전 분야에서는 그림1과 같이 이미지 평면을 (가상적으로) 앞으로 보내서 기하학을 단순화하여 풉니다.
좌표계에 대해서는 https://darkpgmr.tistory.com/77 글을 참조해 주시기 바랍니다.
-