OpenCV는 해리스 코너 응답 함수 값을 계산하는 cornerHarris() 함수를 제공합니다. cornerHarris() 함수가 반환하는 해리스 코너 응답 함수 값에 적절한 임계값 연산을 적용하면 영상에서 코너 위치를 모두 찾을 수 있습니다. cornerHarris() 함수 원형은 다음과 같습니다.
void cornerHarris(InputArray src, OutputArray dst, int blockSize, int ksize, double k, int borderType = BORDER_DEFAULT); |
|
• src |
입력 영상. CV_8UC1 또는 CV_32FC1 |
• dst |
해리스 코너 응답 함수 값을 저장할 행렬. src와 크기가 같고 CV_32FC1 타입입니다. |
• blockSize |
행렬 M 연산에 사용할 이웃 픽셀 크기. 픽셀 주변 blockSize×blockSize 윈도우를 설정하여 행렬 M을 계산합니다. |
• ksize |
소벨 연산자를 위한 커널 크기 |
• k |
해리스 코너 검출 상수 |
• borderType |
가장자리 픽셀 확장 방식 |
cornerHarris() 함수는 입력 영상 src의 모든 픽셀 위치에서 해리스 코너 응답 함수 값을 계산하고, 그 결과를 dst 행렬로 반환합니다. dst 행렬의 모든 원소는 float 자료형을 사용하며, 이 값이 사용자가 지정한 임계값보다 크면 코너 점으로 판단할 수 있습니다. 이때 하나의 코너 위치에 사용자 지정 임계값보다 큰 픽셀이 여러 개 발생할 수 있으므로, 간단한 비최대 억제(non-maximum suppression)를 수행하여 지역 최댓값 위치만 코너로 판별하는 것이 좋습니다.