관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

지역 특징 4 - 호모그래피 추정 본문

인공지능/컴퓨터 비전

지역 특징 4 - 호모그래피 추정

huenuri 2024. 11. 11. 07:13

마지막 한 단원이 남아있다. 여기까지 하고 아침 루틴을 수행하고 주말에 하지 않았던 큐티도 하며 중요한 일들을 실천하려고 한다.

 

프로그램 5-3은 꽤 정확하게 매칭 쌍을 찾았지만 여전히 부족한 점이 있다. 예를 들어 잘못된 쌍(거짓 긍정)으로 인행 건물을 버스로 착각할 수 있다. 따라서 아웃라이어를 걸러내는 과정이 필요하다. 또한 매칭 쌍을 이용하여 물체 위치를 찾는 과정이 추가되어야 한다. 호모그래피는 이런 일을 가능하게 해 준다.


 

 

 

1. 문제의 이해

그림 5-18은 3차원 공간에 있는 평면 P의 두 점 p1과 p2를 보여준다. 카메라 A와 B는 다른 방향에서 영상을 획득한다. p1과 p2는 카메라 A의 영상 공간에 a1과 a2로 투영되며 카메라 B에서 b1과 b2로 투영된다. 이처럼 3차원 점이 2차원 평면으로 변환되는 기하 관계를 투영 변환이라 한다.

 

 


 

 

 

2. 강인한 호모그래피 추정

 

 

 

중앙값을 이용한 강인한 추정

 

식 (5.21)을 사용하는 최소평균제곱오차 방법은 모든 매칭 쌍이 같은 자격으로 오류 계산에 참여하기 때문에 틀린 매칭 쌍, 즉 아웃라이어로 인해 호모그래피의 정확도가 떨어질 수 있다. 아웃라이어를 걸러내는 방법은 여러 가지인데, 가장 단순한 방법은 모든 쌍의 오차를 계산한 다음 평균 대신 중앙값을 사용하는 것이다.

다시 말해 n개의 오차를 계산한 다음 정렬하고 가운데 위치한 오차를 E로 취한다. 이렇게 하면 틀린 매칭 쌍은 중앙값 계산까지만 영향을 미치고 해를 계산하는 과정에서는 빠지기 때문에 보다 강인한 해를 얻을 수 있다. 이어 살펴볼 RANSAC은 중앙값보다 더 강인한 추정 기법이다.


 

 

 

RANSAC

RANSAC은 샘플에 섞여 있는 아웃라이어를 회피하면서 최적해를 구하는 일반 기법이다. 이전에는 에지에 선분을 적합하는데 RANSAC을 활용했다. 여기서는 매칭 쌍 집합에서 호모그래피 행렬을 추정하는데 RANSAC을 활용한다.

 

 

 

RANSAC을 개선한 PROSAC이 개발되었다. PROSAC의 아이디어는 단순하다. 알고리즘 5-2의 3행에서 네 쌍을 랜덤하게 뽑는 대신 차별하여 뽑는다.


 

 

 

 

호모그래피 추정 실험

프로그램 5-4는 프로그램 5-3에 호모그래피를 추정하는 기능을 추가한 것이다. 

 

RANSAC을 이용해 호모그래피 추정하기

 

 

39행 이후 동작을 이해하려면 good_match 객체의 세부 내용을 알아야 한다. good_match는 28~35행을 통해 매칭 쌍 중에 좋은 것을 골라 저장한 리스트다. good_match의 0번 요소를 아래 명령어로 확인해 보자.

 

distance 멤버 변수는 두 특징점의 거리, queryldx는 첫 번째 영상에서 출출한 특징점의 번호, trainIdx는 두 번째 영상에서 추출한 특징점의 번호다.

 

 

프로그램의 실행 결과를 보면 버스 모델 영상을 장면 영상에서 잘 검출하고 호모그래피 행렬도 정확하게 추정했음을 확인할 수 있다. 그리고 보라색으로 표시된 매칭 쌍은 아웃라이어인데 제대로 걸러냈다.

 


 

 

 

학습을 마치고

이렇게 해서 5장 지역 특징에 대한 대부분의 공부를 모두 마쳤다. 이제 아침 공부 시간에 연습문제를 풀어보려고 한다. 요즘 아침에 수학과 영어 공부를 하느라 공부를 시작하려고 하면 12시가 넘거나 오후에 시작할 때도 있는데, 오늘은 늦어도 11시에는 시작하려고 한다.