더북(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 객체가 반환됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.