티스토리 뷰

2021.08.06 Update.

이 포스트 말고 아래 링크 보면 됩니다.

https://redstarhong.tistory.com/174

 

novel view synthesis, virtual camera

사람을 중심으로 camera 위치를 변형해 novel view synthesis를 하는 일을 하고 있다. 이 때 camera 위치 변화에 따라 camera parameter를 어떻게 바꿀지가 중요한데, 이 포스트는 코드와 함께 개념을 되짚어본

redstarhong.tistory.com


2021.04.06 Update

이 포스트는 내가 잘못 이해한 것들이 너무 많아 다른 사람은 안 읽는 게 나을 것 같고, 이걸 보는 걸 추천한다.


Human3.6m데이터를 Virtual Camera를 통해 Augment하려 그러는데 Rotation을 어떻게 해야할 지 너무 헷갈려서 한참 구글링을 하다 결국 Right handed rule, Left handed rule이 무엇인 지 정확히 알아야한다는 것을 깨달았다. 지금 정리하는 것은 나의 추측일 뿐 사실 아직도 헷갈리며 틀릴 수도 있다.

먼저 Right handed rule, Left handed rule은 단지 3D 데이터의 표현방법일 뿐이다. 실제 어떤 데이터가, 예를들면 Human3.6m이, Right handed rule혹은 Left handed rule로 기록되어 있지는 않고, 저장된 3D 데이터를 Visualize할 때 두 방법 중 하나를 쓸 수 있다. 일반적으로 쓰는 방법은 Right handed rule인데, 내가 Visualize할 때 쓰는 tool인 matplotlib은 Left handed rule을 쓰고 있다. 그래서 매우 헷갈렸다. 아마 matplotlib은 RenderMan 계열인가보다. 참고 

그러면 다시 Virtual Camera를 만드는 Task로 돌아와보자. 이 논문에 제시된 방법대로, 사람을 중심으로 실제 카메라와 같은 반경 안에 있는 가상 카메라를 만들고 싶다. 즉 새로운 카메라의 Center (Translation) 값이 사람의 중심(Pelvis or mean ...)으로 부터 실제 카메라까지의 거리만큼 떨어져 있어야 한다. 

Virtual Camera around a Person

이 때 Rotation을 어떻게 시키냐가 골치였는데, 나는 Visualize되는 결과가 Left handed Rule을 따르니 Rotation도 그렇게 처리해주면 된다. https://en.wikipedia.org/wiki/Rotation_matrix 에 Right handed Rule에서 counter clock wise하게 Rotation하는 matrix가 있다. 여기서 θ 값을 - 해서 matrix를 만들면 Left handed Rule에서 clock wise하게 rotation하는 matrix가 된다. 그런데 카메라를 단순히 Translation 시키기만 하면 당연히 이상한 결과(Pixel Coordinate)이 나온다. Camera Coordinate 상에서 +z 방향은 카메라 렌즈의 방향인데, 단순히 카메라 위치를 회전시켜 이동하기만 하면 렌즈가 더 이상 대상(사람)을 가리키지 않게 된다. 따라서 그만큼 카메라 렌즈의 방향을 보정해줘야 되는데 카메라 위치를 z축을 중심으로 이동시켰다면, 렌즈는 y축을 중심으로 rotation시켜주면 된다. 이것은 Human3.6m의 카메라 좌표계에 한정되는 얘기일 수 있다. 

가상 카메라 만드는 법. 우상단의 카메라가 Virtual 카메라, 우하단이 실제카메라.

이 때 카메라 위치 회전은 out plane rotation이고, 보정을 위한 렌즈방향 회전은 in plane rotation일 것이다. 사용하는 각도는 동일!

공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함