2023.07.12 수정
우선, 좌표계를 변환한다는 것은 좌표축을 변환한다는 것과 같은 말이다.
하지만 좌표계 변환과 좌표(점) 변환은 다른 말이고 서로 반대 변환이다.
이런 개념까지는 알고 있었으나 이 개념을 구현하려다 보니 막상 헷갈리는 개념들이 있어 살짝 기록하려고 한다.
지금까지 world 좌표계상에서 정의된 점을 camera 좌표계상에서 바라보았을때는 좌표가 몇으로 보일까? 를 풀기 위해서 다음의 수식을 이용해왔었다.
Xw : 점 X를 World좌표계상에서 바라보았을때의 좌표
Xc : 점 X를 Camera 좌표계상에서 바라보았을때의 좌표
그런데 문제는 그럼 R,t 는 뭐지?
R은 world 좌표축을 camera 좌표축으로 회전하는건가? 아니면 camera 좌표축을 world좌표축으로 회전하는 건가??
를 생각하다보니 내가 지금껏 얼마나 개념도 모른채 코드를 짜고있었는지 깨닫게된다.
매우 매우 간단한 상황을 통해 직접 알아보자.
여기서 빨간 축은 camera 좌표계, 검은 축은 world 좌표계라고 정의하고, 편의상 두 좌표계간의 translation 은 없다고 가정하자.(그럼 원점이 겹치니까)
그리고 Xw = (1,1) 이라고 하고, camera 좌표축은 world 좌표축을 45deg 만큼 회전시킨 것이라고 보자.
그럼 당연히 Xc = (root(2), 0) 이 나온다.
자 그럼 이제 아래 수식 중에 무엇이 맞는지를 체크해보자.
위 수식에서 왼쪽과 오른쪽은 서로 반대로의 rotation을 적용한 것이다.
R이 world 축을 camera 축으로 회전하는 변환이면 바로 위 그림에서 왼쪽 수식에 theta=45 를 넣는게 맞을것이고
R이 camera 축을 world 축으로 회전하는 변환이면 바로 위 그림에서 오른쪽 수식에 theta=45를 넣는게 맞을것이다.
계산해보면 알겠지만 오른쪽 수식이 정답이다.
즉,
에서 R은 camera 축을 world 축으로 회전하는 변환이다.
그리고 이 과정에서 설명은 빠졌지만 t는 카메라좌표계에서 바라본 월드좌표계의 원점좌표를 의미한다.
즉, 다시말해 t 는 카메라좌표축에서 정의된 평행이동이고, 카메라좌표축 원점을 월드좌표축 원점으로 평행이동 시키는 값이다.
그리고 이 수식은 world 좌표계상의 점을 camera 좌표계상의 점으로 변환하는 식이다.
앞으로도 매우 헷갈릴 듯 하지만 잘 기록해서 두고두고 확인하자.
참고:
https://redstarhong.tistory.com/107
https://color-change.tistory.com/54
https://darkpgmr.tistory.com/84
'연구 > 내 연구공간' 카테고리의 다른 글
[torch error] off-the-shelf 모델을 이식했는데 pretrained model 이 잘 동작하지 않을때 (0) | 2023.07.14 |
---|---|
[SMPL Pose] 상대적 회전 표현을 절대적 회전 표현으로 바꾸기 (0) | 2022.11.15 |
[실수] 모델 학습할때 학습이 잘 안될경우에 확인해볼 실수 리스트 (0) | 2021.12.20 |
[공부] 공학적인 의미에서 primitive 란 (0) | 2021.12.06 |
[설치] MPI-IS mesh github 설치 (2) | 2021.09.19 |