전체 글 28

[Computer vision] Efficient adaptive non-maximal suppression

Link: https://www.researchgate.net/publication/323388062_Efficient_adaptive_non-maximal_suppression_algorithms_for_homogeneous_spatial_keypoint_distribution Github: https://github.com/BAILOOL/ANMS-Codes SLAM을 위해 이미지에서 keypoint detection을 하게 되면 알고리즘에 의해 주로 같은 위치에서 여러 번 중복 검출이 되는 현상이 발생한다. 이렇게 중복 검출된 keypoint들은 오히려 SLAM의 성능을 저하시키는 요인이 된다. (In terms of memory, processing time, noise, etc.) 그래서 non-..

Paper review 2022.04.24

[Introduction] Projective geometry in camera models

Chapter1. Introduction. A tour of Multiple View Geometry 해당 챕터는 MVG를 공부하기에 앞서서 어떤 내용들이 다루어지는지에 대한 brief sketch를 보여준다. Projective transformation Camera는 실제 3차원 물체를 2차원 이미지로 투영시켜서 보여준다. 이 과정은 projective transformation의 한 예라고 할 수 있다. 그런데 반듯한 직사각형 모양의 피사체도 카메라가 어디서 촬영했는지에 따라 제각각의 모양으로 투영된다. 이 projective transformation에서 변환 전 후가 동일하게 보장되는 것은 무엇일까? 모양은 확실하게 아님을 위의 예시로부터 알 수 있었다. 길이 또한 제각각 달라지는 것으로 보아 ..

Subjects/MVG 2022.04.24

C++ 표준 난수 라이브러리 <random>

완벽한 Random number를 소프트웨어로 생성하기란 불가능하다. 그래서 의사(pseudo) 난수 생성기라고도 부른다. 무작위인 것 처럼 보이게 만드는 수학 공식에 따라 생성하기 때문이다. C++에서 제공하는 표준 난수 라이브러리를 사용하기 위해서는 아래와 같이 헤더를 추가해 주어야 한다. #include 기존의 C-style 난수 생성방법은 여러가지 문제들이 있었다. 이를 보완하기 위해서 C++에서는 좀 더 퀄리티가 좋은 난수 생성기를 제공한다. C++ radom 라이브러리는 크게 두 가지 구성으로 이루어져 있다. - Engine - Distribution Engine Engine은 기본적으로 uniform distribution을 따르는 random number를 생성해 준다. Engine은 se..

[Camera model] Camera calibration

3차원 물체를 카메라로 관측하고, 이미지로 투영되는 과정을 생각해보자. 동일한 3차원 물체를 카메라로 촬영해서 나오는 결과 이미지가 모두 같을까? 절대 그렇지 않다. 동일한 3차원 물체를 관측해도 대포 카메라로 촬영하는 것과 고프로를 사용해서 촬영하면 결과 이미지가 다르다. 동일한 카메라를 사용한다 하더라도 사진을 어디서 찍느냐에 따라서 결과 이미지가 달라질 수 있다. 이것을 수학적으로 모델링 한 것이 바로 camera parameter이다. camera parameter는 또 다시 2가지로 구분 될 수 있는데, 카메라 자체에서 결정되는 intrinsic parameter와, 카메라의 자세를 통해 결정되는 extrinsic parameter로 구분할 수 있다. 위와 같은 camera parameter를 ..

Doxygen 사용법

협업을 하면 누구나 느끼겠지만 사람에 따라 코딩 스타일이 천차 만별이다. 내가 짠 코드를 몇 년뒤에 봐도 '이게... 뭐하는 함수지' 라는 생각이 들 때도 있는데, 남이 짠 코드는 오죽하겠는가...! 그렇다고 코드 이해를 돕는답시고 소스코드 중간중간에 주석을 임의로 집어넣으면 오히려 가독성이 더 떨이지는 경우가 허다하다. 이런 것을 방지하기 위해서 꼭 쓰이는 것이 바로 Doxygen이다. 물론 best case는 doxygen도 필요없이 누가 봐도 명쾌한 코드를 짜는 것이지만 실제로 그렇게 되기란 쉽지 않다. Doxygen을 통해서 별도의 문서를 만들지 않고도 코드의 API document를 만들 수 있다. 이번 포스팅에서는 GUI를 사용하는 방법은 다루지 않고, 오직 터미널로 doxygen을 작성하는 ..

Programming/Tools 2022.03.25

[Camera model] Lens distortion

Pinhole 카메라에서는 straight line은 straight line으로 투영된다. 하지만 우리가 실제 사용하는 카메라는 pinhole 카메라와 다르게 렌즈를 통해 반사된 빛을 받는다. 따라서 우리가 사용하는 카메라는 렌즈에 의한 왜곡을 받게 된다. 왜곡은 straight line이 실제로 투영되었을 때 약간의 휘어짐을 갖는 채로 투영되게끔 한다. Distortion types 일반적인 왜곡의 종류는 크게 두 가지로 나눌 수 있다. Radial distortion Tangential distortion Radial distortion은 가장 일반적으로 나타나는 왜곡의 형태이다. Radial distortion은 카메라 렌즈의 굴절률에 의해 발생하고, 그렇기 때문에 principal point과의..