[23 동계 모각소] 05. 최종 결과물

동엽·2024년 2월 25일
0

23 동계 모각소

목록 보기
6/6

요약

  • 2/16 18:30 ~ 21:30 (원천정보관 대면 진행)
  • 전원 참석

내용

전체적인 프로그램의 구조


https://github.com/n01r1r/Sparse-Motion-Field-Tracker/


처음 frame에서 ROI를 결정하고, ROI 내부에서 feature point들을 감지한다.
(ROI 내부에서의 좌표계를 영상 frame 좌표로 변환하는 과정을 추가로 거친다)


앞 단계의 feature point를 대상으로 optical flow를 계산하여 sparse motion field를 얻는다. 이후 RANSAC 기법을 활용하여 inlier를 계산한다. 이 단계에서 구한 homography는 쓰이지 않는다.


앞에서 계산된 최종 feature point들을 통해 ROI를 2D Rotation/Translation으로 근사한다(RotatedRect()).
소실된 order를 결정하기 위해 별도로 정의한 sortCorner를 호출하고, 이후 homography를 계산하여 overlay image를 warp하는데 사용한다.


SortCorners()는 주어진 점들(cv::Point2f)이 그 중심에 대해서 어떤 방향에 있는지 결정하고,
그에 따라 순서를 정해주는 함수이다.

UI 추가 (cvui)

https://github.com/Dovyski/cvui

OpenCV를 위해서 만들어진 UI 추가 라이브러리로, header-only로 추가할 수 있어서 프로젝트 이식에 용이했다. 이 프로그램에서는 영상 중간에 프로그램을 종료하는 기능과, 해당 frame에서의 feature point 개수, 그리고 마스크를 씌울지 말지 결정하는 체크박스를 추가했다.


아쉬웠던 점, 보완할 점

  • 영상의 frame에 따라 성능이 좌우된다. 이는 최적화가 더 필요한 부분이고, 기존의 알고리즘은 비약적으로 일반화시킨 점이 있으므로 추후 더 보완해야 할 것이다.

  • RotatedRect()로 ROI를 1차로 근사한 뒤, 이후 Homography를 통해 2차로 근사하여 총 2회의 transformation을 통해 별도의 feature matching이나 딥러닝 등을 활용하지 않고도 충분한 성능을 낼 수 있었다. Homography를 연산하는 부분이나, ROI를 갱신하는 부분이 아직 미약하다고 생각되므로, 학술지 및 다른 프로그램에 적용된 예시를 통해 이를 더 보완할 수 있다고 생각한다.

profile
in verbs, not nouns

0개의 댓글