<aside> 💡 목차를 열어서 OpenCV USAC / MAGSAC 라이브러리 부분을 먼저 보시길 바랍니다!

</aside>

0. OpenCV RANSAC이란?


OpenCV에서 구현된 RANSAC의 종류는 4가지가 있다.

각각의 함수들에서 구현된 방식은 1981년도 Fischler가 제안한 '가장 기존의 RANSAC' 방식을 따른다.

"지난 글에서는 PROSAC이 RANSAC보다 좋다고 했는데, OpenCV는 왜 PROSAC을 쓰지 않는가?" 라고 한다면, 위의 함수들을 풀 때 꼭 image feature matching이 들어가야하는 것이 아니기 때문이다. 단순히 2D-3D point matching으로 푸는 경우에는, image feature matching이 없기 때문에 descriptor distance가 없고, 그러므로 PROSAC을 쓸 수 없다.

하지만 내가 구현하는 코드는 image feature matching을 써서 PROSAC을 쓸 수 있다면 어떨까? 안타깝게도 OpenCV에는 PROSAC()이 구현되어있지 않아서 쓸 수 없다. 정확히 이야기하면, PROSAC이라는 함수가 없다.

"그러면 사람들은 어떤 RANSAC 방법을 쓸까? 더 좋은 방식을 찾아서 쓰고있지 않을까?" 라고 생각했다면, 의외로 사람들은 다 OpenCV RANSAC을 그대로 쓰고 있다. 그 이유는 다들 다른 RANSAC 방식의 존재를 잘 모르기 때문이다. 단순히 "OpenCV는 많은 사람들이 쓰고 검증됬으니까, 제일 잘 되는 알고리즘을 넣어놨겠지!" 라는 생각이기 때문이다. 우리는 그러지 말자.