본문 바로가기
Computer Vision

14. Corner Detection(Harris Corner)

by 꿈꾸는 띵땅근 2021. 1. 22.
학습 내용
1. Corner Detection 하는법
2. Harris Corner

 

1. Corner Detection 하는법


일반적인 Corner Detection IDEA 

(위, 아래, 좌, 우) 어느 방향으로든 움직였을 때 Sum of Squared Difference(아래 그림의 네모 박스 내부 픽셀 합의 변화) 가 가장 작은 녀석 "마저" Threshold를 넘으면 Corner다!

즉, 모든 방향으로의 변화가 크면 코너다!

상하좌우로 움직였을 때 모두 다 값의 변화가 크면 corner. 상하 또는 좌우 한쪽으로만 크면 edge

 

 

 

 

 

 

 

2. Harris Corner


용어정리
- textureless : 픽셀변화가 눈에띄지 않아 '특징점(엣지)'이 없다. 

Harris Corner도 위의 Corner Detection IDEA랑 동일. 
이를, 아래에서는 수식으로 좀더 복잡하게 설명

Corner Detection IDEA를 복잡한 수식으로 나타냄

- I(x,y)는 FDG를 image에 컨볼루션 하면 나오는 "gradient"를 의미한다.

- W는 ROI(Region of Interest).

- 테일러급수를 이용해서 정리했더니, x, y를 분리하여 행렬형태로 나타낼 수 있게 되었다.

I는 magnitude of the gradient구나. 

 

- 픽셀값들이 타원형태로 분포한다고 가정했을 때(일반적으로 타원 형태다), 단축과 장축이 있다. 단축과 장축의 크기가 eigen value이다.

- 이 두 값 모두 일정 Threshold 넘어가면( 즉, 크면! ) corner point라고 말해도 되겠다는게 harris의 방식

- 장축과 단축은 행렬의 (1,1), (2,2) 에 나타난다(N으로 나누면 '분산'이 된다)

- 단, (1,2)와 (2,1)은 0이어야 한다.

- 0이 아닌경우는, x축, y축에 평행하지 않고, 회전한 경우 -> 다시 회전시켜 diagonal matrix만들어줘야함

(만드는법 : 선형대수)

 

- 그렇다면, Threshold 설정은 어떤방식으로 해야하나? (아래에 있음)

 

- 람다1, 람다2가 앞서 x^2, y^2이다. 

Threshold 설정하는 방식

- R은 corner인지 아닌지 threshold랑 비교되는 값.

- 복잡하게 짜여져있는데, Kanade-Tomasi라는 사람은 그냥, eigen value중에 작은거로 보면 된다고 했다. 그 이유는, 작은값마저 Threshold 넘으면 큰값도 넘을것이기 때문이고, 이렇게 했더니 잘 되더란다..

 

 

 


Harris Corner 구하는 알고리즘 정리

- FDG를 통해 I(x,y)를 만든다. (Gradient 변화 map)

=> 걍 미분하면 되지 왜 Gaussian 적용하냐? -> 영상의 high frequency noise를 없애줘야 미분했을 때 급격한 변화가 일어나는 부분을 제대로 검출할 수 있다. (12강. Edge Detection 중 3. Noise가 있을떄 Edge Detection하는법)

 

- Corner점으로 판별된 픽셀에 weight를 1을 주고, 주변 일정 범위 픽셀들에 weight를 조금씩 준다(Gaussian weight : 중심 픽셀로부터 떨어진 거리만큼 가우시안 분포처럼 weight를 주는 방법)

 

- weight가 점점 쌓이게 되면, Local maxima가 나타날텐데, 픽셀값이 비슷비슷한 점들이 뭉쳐있다. Non-maxima suppression(젤 큰놈 찾는법)하게되면 한 점이 나오고, 그 점이 Corner다! (Non-maxima suppression으로 알수있다)

(13강 Canny Edge Detection 중 2. Non-maxima suppression)

 

 

 

 

출처

댓글