더북(TheBook)

실제적인 연산 관점에서 호모그래피는 투시 변환과 같기 때문에 호모그래피는 3×3 실수 행렬로 표현할 수 있습니다. 또한 투시 변환을 구할 때와 마찬가지로 네 개의 대응되는 점의 좌표 이동 정보가 있으면 호모그래피 행렬을 구할 수 있습니다. 그러나 특징점 매칭 정보로부터 호모그래피를 구하는 경우에는 서로 대응되는 점 개수가 네 개보다 훨씬 많기 때문에 이러한 경우에는 투시 변환 시 에러가 최소가 되는 형태의 호모그래피 행렬을 구해야 합니다.

OpenCV는 두 영상 평면에서 추출된 특징점 매칭 정보로부터 호모그래피를 계산할 때 사용할 수 있는 findHomography() 함수를 제공합니다. findHomography() 함수 원형은 다음과 같습니다.

Mat findHomography(InputArray srcPoints, InputArray dstPoints,
                   int method = 0, double ransacReprojThreshold = 3,
                   OutputArray mask = noArray(), const int maxIters = 2000,
                   const double confidence = 0.995);

• srcPoints

원본 평면상의 점 좌표. CV_32FC2 타입의 Mat 객체 또는 vector<Point2f> 타입의 변수를 지정합니다.

• dstPoints

목표 평면상의 점 좌표. CV_32FC2 타입의 Mat 객체 또는 vector<Point2f> 타입의 변수를 지정합니다.

• method

호모그래피 행렬 계산 방법. 다음 방법 중 하나를 지정합니다.

• 0 - 모든 점을 사용하는 일반적인 방법. 최소자승법

• LMEDS - 최소 메디안 제곱(least-median of squares) 방법

• RANSAC - RANSAC 방법

• RHO - PROSAC 방법

• ransacReprojThreshold

최대 허용 재투영 에러. 이 값 이내로 특징점이 재투영되는 경우에만 정상치로 간주합니다. RANSAC과 RHO 방법에서만 사용됩니다.

• mask

호모그래피 계산에 사용된 점들을 알려 주는 출력 마스크 행렬. LMEDS와 RANSAC 방법에서만 사용됩니다.

• maxIters

RANSAC 최대 반복 횟수

• confidence

신뢰도 레벨. 0에서 1 사이의 실수를 지정합니다.

• 반환값

CV_64FC1 타입의 3×3 호모그래피 행렬을 반환합니다. 만약 호모그래피를 계산할 수 없는 상황이라면 비어 있는 Mat 객체가 반환됩니다.