더북(TheBook)

IppHarrisCorner 함수는 크게 네 개의 부분으로 구분할 수 있다. 첫 번째는 행렬 M에 정의되어 있는 Ix2, IxIy, Iy2 값을 계산하는 부분이다. 이를 위하여 11.1절에서 배웠던 프리윗 마스크 형태의 미분 연산자를 사용하였다. 두 번째 부분은 가우시안 필터링을 수행하는 부분이다. 여기서는 간단하게 5×5 크기의 근사된 형태의 가우시안 마스크를 사용하였다. 이는 이 책의 8.2절에서 설명한 가중 평균 값 필터에서 제시한 마스크와 동일한 형태이다. 세 번째 “코너 응답 함수 생성” 부분에서는 해리스 코너 응답 함수를 계산하며, 여기서는 2차원 포인터 변수 crf에 응답 함숫값을 저장하였다. 마지막으로는 해리스 코너 응답 함수에서 국지적 최댓값을 찾아 이를 코너 포인트로 설정하는 부분이다. 국지적 최댓값을 찾기 위하여 다음과 같은 코드가 사용되었다.

if( crf[j][i] > crf[j-1][i] && crf[j][i] > crf[j-1][i+1] &&
    crf[j][i] > crf[j][i+1] && crf[j][i] > crf[j+1][i+1] &&
    crf[j][i] > crf[j+1][i] && crf[j][i] > crf[j+1][i-1] &&
    crf[j][i] > crf[j][i-1] && crf[j][i] > crf[j-1][i-1] )
{
    // 코너 포인트로 기록
}

위 코드는 좌표 (i, j)와 주변 8픽셀에서의 해리스 코너 응답 함숫값을 비교하여 (i, j)에서의 함숫값이 가장 클 때에만 코너 포인트로 기록하게 한다.

IppHarrisCorner 함수는 입력 영상과 동일한 크기의 동적 배열을 여러 개 만들어 사용하고 있다. imgDx2, imgDy2, imgDxy는 각각 Ix2, Iy2, IxIy를 나타낸다. imgDgdx2, imgDgdy2, imgDgdxy는 Ix2, Iy2, IxIy에 가우시안 필터링을 수행한 결과를 저장한다. imgCrf는 해리스 코너 응답 함수의 값을 저장한다.

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