실제적인 연산 관점에서 호모그래피는 투시 변환과 같기 때문에 호모그래피는 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 객체가 반환됩니다. |