Edge가 일직선으로 이루어졌다고 하면 매칭되는 구간이 많아질 수 있다. (특정 방향 Gradient 높음)
Corner는 유사한 포인트가 있을 순 있지만, 대체로 하나의 포인트와 매칭될 수 있다. (두 방향 이상에서의 Gradient가 높음)
Flat은 어떠한 매칭점이 없는 경우라서 Gradient도 낮다
1. 이미지를 가우시안 등으로 스무딩 -> Denoising
2. Gradient magnitude를 계산 -> 변화의 세기
3. NMS 적용하고 Thresholding 처리
여기서 중요한건 2번인데 Gradient = Derivative 로 생각할 수 있고 이는 결국 이미지의 특정 포인트에서 픽셀의 Intensity 변화량이 센 영역을 찾는 것을 의미한다. 변화량이 크지 않은 평평한 영역은 이 값이 낮을 것이다.
대표적인 구현체로는 Canny가 있다. Canny에는 min과 max threshold가 있으며 아래 그림으로 설명된다
max_val보다 크다면 무조건 edge인거고, min_val보다 작으면 무조건 edge가 아니다. 다만 min과 max 사이에 있는 값의 경우에는 max_val보다 커서 edge라고 판정된 영역과 연결
되어 있다면 edge로 취급하는 것이다.
주변 값과의 차이에 비례하므로, 주변값과의 차이가 클수록 코너일 가능성이 높아진다.
위 예시에서 x와 y로의 derivative가 모두 높은 포인트가 존재하며 해당 지점은 Corner라고 볼 수 있다
이미지 전체에서 윈도우 슬라이딩을 하며 Corner Detection을 하였을때, x와 y derivative에 대한 산점도를 그릴 수 있는데 이 분포에 따라 셋 중 어떤 상태인지 추론해볼 수 있다
그 중 1사분면만 보았을때 위 그림과 같이 표현할 수 있다
코너 디텍션에서 가장 유명한 알고리즘 중 하나
주변보다 밝거나 어두운 영역을 의미한다
Edge는 Intensity가 이전에 비해 높아지거나 낮아진채로 유지되며 위에 설명했듯이 Gaussian Derivative로 구할 수 있다. Blob은 Intensity가 높아지거나 낮아졌다가 다시 원상태로 돌아오는 형태를 의미한다. 그래서 Gaussian Derivative를 각 rising 및 falling edge 영역에서 정방향 및 역방향으로 적용해주는 것이다
식으로 비교한다면
Edge: Derivative of Gaussian (DoG)
Blob: Laplacian of Gaussian (LoG)
라플라스 = 2차 미분 연산이고 왜 2차 미분을 하는지는 위에서 설명하였듯이 Blob은 변화는 포인트가 2개이기 때문이다.
scale invariant한 속성을 유지하기 위해서 σ^2 을 곱해주어 normalization을 해주어야 한다
SIFT(Scale Invariant Feature Transform)에 사용되는 Feature로 활용하기 위해서