두 edge의 교차점
flat 영역과 edge 영역은 고유한 위치를 찾기 어려움
corner는 변별력이 높은 편이며 영상의 이동 및 회전 변환에 강인함
1988년 C.Harris가 제안한 방법
영상 내에 정의된 윈도우안의 픽셀 값이 상하좌우 방향으로 모두 급격하게 변하는 위치를 코너로 규정하고 이를 효과적으로 구하는 방법을 제시
입력 영상으로부터 Harris corner response function R을 구하고 R(x, y)값이 충분히 큰 위치를 코너로 지정
src : 입력 단일 채널
dst : Harris corner 응답 계수 값 행렬
blockSize : 내부 연산에서 사용되는 이웃 픽셀 크기
ksize : 소벨 연산자 커널 크기
k : Harris corner 검출 상수(보통 0.04)
borderType : 가장자리 픽셀 확장 방식
void cornerHarris(InputArray src,
OutputArray dst,
int blockSize,
int ksize,
double k,
int borderType = BORDER_DEFAULT);
1994년 Shi & Tomsami가 제안한 방법
Harris corner 검출 방법을 향상시킨 코너 검출 방법
코너 응답 함수의 정의를 다음과 같이 변경
코너 품질 함수 값이 큰 순서대로 정렬하여 코너 점을 반환
비최대 억제 수행
images : 입력 8비트 또는 32비트 실수
corners : 출력 검출된 코너점 좌표
maxCorners : 최대 코너 개수
qualityLevel : 코너점 결정을 위한 값
minDistance : 코너점 사이의 최소 거리
mask : 마스크 영상
blockSize : 내부 연산에서 사용되는 이웃 픽셀 크기
useHarrisDetector : Harris corner 응답 함수 사용 여부
k : Harris corner 응답 함수 사용 시 사용되는 파리미터
void goodFeaturesToTrack(InputArray image,
OutputArray corners,
int maxCorners,
double qualityLevel,
double minDistance,
InputArray mask = noArray(),
int blockSize = 3,
bool useHarrisDetector = false,
double k = 0.04);
corners
Features from Accelerated Segment Test) 코너 검출 방법
2006년 Rosten & Drummond가 제안한 방법
각각의 픽셀에 대해 주변 16개 픽셀 값 크기를 분석하여 해당 픽셀(p)보다 충분히 밝거나 충분히 어두운 픽셀이 n개 이상 연속으로 나타나면 코너로 인식(n은 보통 9)
비최대 억제 수행
Harris, GFTT 방법보다 매우 빠르게 동작
반복 검출률이 대체로 높음
노이즈에 민감함
image : 입력 grayscale 영상
keypoints : 출력 검출된 키포인트
threshold : 중심 픽셀 값과 주변 픽셀 값과의 차이 임계값
nonmaxSuppression : 비최대 억제 수행 여부
void FAST(InputArray image,
std::vector<KeyPoint>& keypoints,
int threshold,
bool nonmaxSuppression=true);
corners
GFTT와 FAST 연산 시간 비교