findHomography() 함수는 두 평면 위에 있는 점들을 투영 변환하는 3×3 호모그래피 행렬을 반환합니다. 원본 평면상의 점 좌표를 (xi, yi)로 표현하고 목표 평면상의 점 좌표를 (x′i, y′i)로 표현할 경우, 호모그래피 H는 다음 수식을 최소화하는 형태의 행렬입니다.
앞 수식에서 hij(1≤i, j≤3)는 호모그래피 행렬 H의 원소를 나타내고, 다음과 같은 관계를 만족시킵니다.
findHomography() 함수의 method 인자에 기본값인 0을 지정하면 입력 점과 출력 점을 모두 사용하는 최소자승법(least squares)으로 호모그래피 행렬을 계산합니다. 그러나 일반적으로 특징점 매칭 결과로부터 호모그래피를 계산할 때 최소자승법을 사용하면 호모그래피가 제대로 계산되지 않습니다. 잘못 매칭된 점들처럼 오차가 큰 입력 정보를 이상치(outlier)라고 부르며, 이상치가 많이 존재하는 경우에는 호모그래피 계산 방법 method를 LMEDS, RANSAC, RHO 방법으로 설정하는 것이 좋습니다. LMEDS 메서드는 보통 이상치가 50% 이하인 경우에 올바르게 작동합니다. RANSAC 또는 RHO 방법은 이상치가 50% 이상 존재하더라도 호모그래피 행렬을 잘 찾아 주는 편입니다. RANSAC과 RHO 방법을 사용할 경우에는 srcPoints와 dstPoints에 저장된 점이 이상치가 아니라고 판단하기 위한 임계값을 설정해야 하며, 이 값은 ransacReprojThreshold 인자로 지정합니다. 만약 H*srcPointsi와 dstPointsi 사이의 거리가 ransacReprojThreshold보다 작으면 정상치(inlier)로 간주합니다.
Note
RANSAC(RANdom SAmple Consensus) 알고리즘은 이상치가 포함된 입력 데이터로부터 수학적 모델 파라미터를 효과적으로 결정하는 알고리즘입니다. RANSAC 알고리즘으로 호모그래피를 계산하는 경우, 다수의 특징점 매칭 정보로부터 네 개의 대응점을 임의로 추출합니다. 이 대응점 정보를 이용하여 3×3 호모그래피 행렬을 계산하고, 나머지 특징점 매칭 쌍 중에서 현재 구한 호모그래피 행렬에 부합되는 매칭 쌍 개수를 셉니다. 그리고 다시 임의로 네 개의 대응점을 추출하고, 호모그래피 행렬 계산과 해당 호모그래피에 부합되는 매칭 쌍 개수 세는 작업을 반복합니다. 이 작업을 여러 번 반복한 후, 가장 많은 매칭 쌍의 지지를 받은 호모그래피 행렬을 최종 호모그래피 행렬로 결정하는 방식이 RANSAC입니다.