티스토리 뷰

다크프로그래머님 블로그에서 가져옴

경식이형의 코드와 parsing된 데이터셋 annotation json들을 보면 camera extrinsic parameter인 R,t가 다음과 같이 정의됨을 볼 수 있다. 

def world2cam(world_coord, R, t):
	cam_coord = np.dot(R, world_coord.transpose(1,0)).transpose(1,0) + t.reshape(1,3)
    return cam_coord

위의 코드를 해석하자면, world coordinate system에 정의된 대상(주로 우리는 keypoint다, Xw라고 하겠다)의 좌표를 camera coordinate system의 좌(Xc)로 바꾸기 위해, Xc = RXw + t를 하는 것이다. 

그런데 사실 이 R,t라는 변수가 물리적으로 카메라와 어떻게 연결되는 지 이해하기 쉽지 않다. R과 t가 각각 물리적으로 카메라의 무엇을 설명하는 지 한국 말로 설명하라 그러면 무어라 할 지 막막했다. 그러다 다크프로그래머님의 포스트를 보고 이해가 됐다.

결론부터 말하면, R은 world coordinate system axis (월드 좌표축)를 camera coordiante system axis (카메라 좌표축)으로 바꾸는 3D matrix의 inverse이고, t는 world coordinate system에 정의된 카메라의 위치 (혹은 월드 원점에서 카메라로의 vector)에 R을 행렬곱한 값의 음수이다. 말로 설명하면 힘든데, 다크프로그래머님의 식과 1대1 대응해보면 무슨 말인지 안다. Xc와 Xw는 정의가 같으며, R,t는 정의가 다르다. 

카메라의 좌표축이 무엇인지 이해가 안가는 분들은 다크프로그래머님 포스트를 보시면 된다. 참고로 경식이형 코드의 R이 좌표축 변환행렬의 inverse인 이유는, 좌표축의 변환행렬과 좌표값의 변환행렬이 inverse관계이기 때문이다. 어떤 좌표축이 있을 때 원점은 그대로 두고 좌표축을 회전시켰을 때 대상의 좌표가 어떻게 변하는 지 생각해보면 된다. 좌표축이 y축을 기준으로 90도 반시계 방향으로 회전했을 때 대상의 좌표값과, 좌표축은 그대로이고 대상을 y축 기준으로 90도 시계방향으로 회전시켰을 때 좌표값은 같을 것이다.

아 그리고 다크프로그래머님 포스트에 pan, tilt, roll이 카메라의 좌표축과 월드 좌표축과 무슨 관계인지도 적혀있어서 유익했다. 

 

참고: https://ksimek.github.io/2012/08/22/extrinsic/

'Research (연구 관련)' 카테고리의 다른 글

SPIN demo code 사용  (0) 2021.03.11
tool 자투리  (0) 2021.03.06
구글 대용량 다운로드  (0) 2021.01.11
linux meshlab obj  (0) 2021.01.08
overleaf에서 arxiv올리기  (0) 2020.11.04
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함