전체 글 496

Trifocal tensor 이해하기

Trifocal tensor는 epipolar geometry에 등장하는 fundamental matrix의 카메라 3대 버전이라고 이해하면 된다. 즉, trifocal tensor를 이해한다는 것은 반대로 카메라 3대 간의 geometry를 이해하는 것과 같다. epipolar geometry와 같이 trifocal tensor가 다루는 것은 여전히 point와 line 간의 관계다. epipolar geometry에서 한 카메라 이미지에 찍힌 점은 다른 카메라 이미지 상에 선으로 나타난다는 것이 핵심이듯이 trifocal tensor가 다루는 geometry에서는 한 카메라 이미지의 점이 다른 카메라에서 어떻게 등장하는지가 핵심이다. 다만 그 경우의 수가 point-line-line, point-li..

Knowledge/Vision 2023.03.30

[Depth] Practical Stereo Matching via Cascaded Recurrent Network with Adaptive Correlation

Practical Stereo Matching via Cascaded Recurrent Network with Adaptive Correlation 내 맘대로 Introduction 이 논문은 제목에 그대로 Stereo matching 논문인데 "rectification 후 epipolar line을 따라 search한다." 라는 기본 stereo matching pipeline 에서 "epipolar line을 따라"를 변경한 논문이다. rectification은 완벽할 수 없기 때문에 (실제로 내가 해봐도 pixel 수준으로 align되도록 하는 것은 힘들더라) 하나의 epipolar line만 따라 search하는 것은 사실 실환경에서는 문제가 있는 접근법이라고 지적하며 rectification 오..

Paper/3D vision 2023.03.28

Epipolar line visualization

여러 카메라 간 상대 자세가 정확한지 판별하는 방법 중 하나로 Epipolar line을 확인하는 방법이 있다. 카메라 자세들이 정확하다면 한 카메라 이미지에서 특징점 하나를 찍었을 때 다른 카메라 이미지에서 그려지는 epipolar line은 같은 특징점을 지나가야 한다. 예를 들어 카메라 0번과 1번를 고려할 때, 카메라 0번 이미지에서 서랍 모서리를 찍었다면 카메라 1번 이미지에 그려지는 epipolar line은 같은 서랍 모서리 위를 지나가야 한다. 이 방법은 카메라 자세 정확성을 평가할 GT가 없을 때 정성적으로 평가할 수 있는 방법 중 가장 직관적이고 정확하다. 이 글에서는 위와 같은 목적으로 epipolar line을 그려보고 싶을 때 활용할 수 있는 Visualizer 코드를 기록해두고자..

Knowhow/Vision 2023.03.24

C++ 코드 build 시, C++ 버전으로 인한 실패 해결법

C++ 코드를 build하는 과정에서 CMake, make를 한 번만 쳐서 성공하는 경우는 거의 없다. 환경 설정이 간단하지 않기 때문에 오류명을 보면서 시도의 시도를 거듭해서 build하는 경우가 더 많다. 나 역시도 그런다. 특히 C++을 안 쓴지 오래 돼서 사실 상 초급자가 되어버렸기 때문에 실수 때문이든 몰라서든 자주 구르면서 build를 가까스로 해낸다. 내가 겪은 오류 중 가장 간단해보이지만 원인을 찾아내기까지 가장 오래 걸렸던 C++ 버전 관련 오류의 해결법을 기록해두고자 한다. 오류 양상std와 같은 C++ 대표 namespace에 함수나 변수가 없다는 오류들.thirdparty 설치를 빼먹지 않았음에도 발생하는 not found, missing 오류들.예를 들어, std::integer_..

Linux echo로 파일 처음/끝에 문장 추가하기

echo 커맨드를 많이 봐왔고 많이 써왔지만, 대부분 설치 과정에서 따라하라니까 사용했기 때문에 사용법에 대해서 잘 몰랐다. 여러 사용법이 당연히 있겠지만 그 중 echo를 이용해 파일에 문장을 추가하는 방법에 대해서 기록해두고자 한다. 그냥 파일 열고 손으로 적어도 그만이긴 하지만 최근 DockerFile을 작성하면서 커맨드 라인으로만 모든 작업을 진행해야 할 경우가 있었는데 알아두면 꽤 유용한 것 같다. 근데 자꾸 까먹어서 매번 검색하길래 적어둔다. 파일 끝에 추가하기 echo "ANYTHING" >> FILE_PATH 주의 점은 > 가 아닌 >>라는 점이다. > 쓰면 파일에 덮어쓰는 것이라서 원본이 날아간다. 꼭 >>로 써야 한다. 파일 처음에 추가하기 echo -e "ANYTHING\n$(cat ..

Knowhow/Linux 2023.03.23

Docker 컨테이너 내 opencv-python 설치 시 ImportError: libGL.so.1 문제

ImportError: libGL.so.1: cannot open shared object file: No such file or directoryPython opencv를 사용하고자 하면 단순하게 pip install opencv-python을 입력하면 끝이라 큰 이슈가 없지만 Docker 컨테이너 내에서 같은 명령어를 치면 위 오류가 날 수 있다. 딱 봐도 libGL이 없다는 오류라는 것을 알 수 있는데 libgl1-mesa-glx를 설치해주면 된다. 컨테이너에 직접 설치할 경우, 다음과 같이 하면 끝이고pip install libgl1-mesa-glx Docker 이미지에 선반영되게 만들고 싶다면, DockerFile 내에 다음을 추가해주면 된다. -y tag를 까먹지 말자.~~~~ 생략 RUN a..

Trouble/Docker 2023.03.21

Open3d manual registration (손으로 point cloud 정합하기)

Point cloud 여러개를 ICP를 이용해 registration(정합)하는 일은 생각보다 빈번하게 발생하는데, 이 때 초기 transformation을 제대로 정해주지 않으면 정합이 이상하게 된다. 특히 정합 대상인 두 point cloud가 noise point를 많이 갖고 있을수록 초기화가 어렵고 정합 성능도 떨어진다. 이럴 때 정합 성능을 높일 방법으로 RANSAC 같이 trial-and-error 접근을 할수도 있지만 경험적으로 보았을 때는 수가 많지 않다면 그냥 손으로 기준점을 잡아주는 것이 최고였다. 다른 말로, 사람이 직접 손으로 correspondence 몇 개를 잡아주고 이를 바탕으로 초기 transformation을 계산하여 사용하는 것이다. http://www.open3d.org..

Knowhow/Vision 2023.03.20

Open3d RGB/Depth image rendering 2

2022.07.01 - [Knowhow] - Open3d RGB/Depth image rendering 에서 기록한 코드와 크게 다른 것은 없으나 intrinsic, camera pose를 미리 알고 있을 때가 아니라, 그저 Open3d visualizer 상에서 손(drag)으로 돌려가며 구도를 잡은 뒤 해당 구도로 이미지를 rendering하고 싶을 때가 많길래 추가 정리한다. 다시 말하면, 구체적인 카메라 파라미터는 필요없고 대충 open3d GUI에서 손으로 구도 잡은 뒤, 그 구도의 RGB/Depth를 얻을 때 자주 썼다. 먼저 이 코드는 준비물이 필요한데, 일단 o3d.visualization.draw_geometries()를 이용해 먼저 visualizer를 켠다. 그리고 원하는 구도로 마우..

Knowhow/Vision 2023.03.20

상대적이며 절대적인 고양이 백과사전

읽게 된 계기 베르나르 베르베르 작가에 대한 팬심과 짧은 길이, 그리고 상대적이며 절대적인 지식의 백과사전에 이은 기대감 때문에 읽었다. 짧은 평 눈에 띄는 것은 내용 자체가 아니라 표현법이었다. 고양이에 대한 잡다한 지식들은 따지고 보면 특별한 것들이 아닌데 고양이를 화자로 내세우면서 특별한 것처럼 들리게 잘 표현한 책이다. 단순한 지식에 상상력을 끼얹은 책이라고 하고 싶다. 이름에서도 알 수 있다시피 고양이에 대한 이런저런 잡담을 담은 책이어서 그냥 내용 그대로 듣고 끝나는 책이다. 정말 백과사전을 본 듯한 느낌. 책이 심오한 의미를 담고 있다거나 암시한다거나 그런 책이 아니기 때문에 '아, 그렇구나' 하고 넘어가는 책이다. 심심풀이 책으로 좋은 정도. 이 책은 크게 좋지도 나쁘지도 않았기에 3점을 ..

Book/Fun 2023.03.17

[Human] H-NeRF: Neural Radiance Fields for Rendering andTemporal Reconstruction of Humans in Motion

H-NeRF: Neural Radiance Fields for Rendering and Temporal Reconstruction of Humans in Motion 내 맘대로 Introduction NeRF란 고정된 대상에 대해 학습되는 알고리즘인데 이를 dynamic object, 특히 사람에 적용하려는 시도가 많이 있었다. 각종 warping 혹은 deformation을 정의해서 사람을 복원해내는 것까지 완성했는데 한가지 문제가 복원된 사람은 촬영된 이미지 범위에 한정된다는 것이다. 즉, 촬영된 이미지 상에서 취한 자세만 표현할 수 있는, 데이터 종속된 형태로 복원된다는 것이다. 이 논문은 이를 확장해서 unseen pose까지 커버할 수 있는 Human NeRF에 대한 내용이다. 핵심 아이디어는 ..

Paper/Human 2023.03.17