반응형


윈도우(일정 범위)를 모든 방향으로 이동시키며 픽셀의 강도 변화를 측정함으로써 윈도우 내의 특징을 발견할 수 있다.




평평한 영역에서는 모든 방향으로 픽셀 강도 변화가 없다.

에지에서는 에지의 방향따라 픽셀 강도 변화가 없고 에지와 수직방향으로 픽셀 강도 변화가 있다.

코너에서는 모든 방향에 대해 강한 픽셀 강도 변화가 존재한다.  






윈도우내의  좌표(x,y)에 있는 픽셀 강도와  (u,v)만큼 윈도우를 시프트 시켰을때 픽셀 강도의 변화량은 다음 식으로 측정한다.


Window function은  직사각형 윈도우이거나 가우시안 윈도우를 사용하며 윈도우 아래의 픽셀들에 가중치를 주는 용도로 사용되어 진다.


평평한 영역에서는 강도 변화가 거의 없기 때문에 위 식은 0에 가까울 것이다.

특징을 추출할 수 있는 것들이 많은 영역에서는 강도 변화가 크기 때문에  위 식은 매우 큰 값을 가지게 될것이다.


따라서 코너를 검출하기 위해 E( u, v )를 최대화하는 영역을 찾으면 된다.



위 식에 테일러 전개를 적용하면 아래 식과 같아진다.



Ix와 Iy는 각각 x와 y방향으로 소벨에지를 구하여 얻어지며 IxIx는 같은 좌표의 픽셀값끼리 곱하여 

해당 위치에 값을 기록함으로써 얻어진다.

IxIx는 x방향으로 강도 변화를 크게하고 IyIy는 y방향의 강도변화를 크게하고 IxIy는 x,y방향으로의 강도변화를 크게한다.


아래 이미지는 전체 이미지에 대해 각각 Ix, Iy를 구하여 곱을 구한 결과물이다.










아래 식은 코너가 윈도우에 포함되어 있는지 판단하기 위해 사용되어 진다.  




M에 대한 고유값에의해서 R값이 달라지며  코너,에지,평면인지 여부를 결정하게 된다. 

R이 threshold값보다 크면 코너로 판단하게 된다. 








Harris Corner Detector in OpenCV

  1. import cv2  
  2. import numpy as np  
  3.   
  4. image = cv2.imread('line.jpg')  
  5. img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  
  6. img_gray = np.float32(img_gray)  
  7.   
  8. dst = cv2.cornerHarris( img_gray, 230.04 )  
  9.   
  10. image[dst>0.01*dst.max()] = [0,0,255]  
  11.   
  12. cv2.imshow('dst', image)  
  13. cv2.waitKey(0)  






참고
http://docs.opencv.org/3.0.0/dc/d0d/tutorial_py_features_harris.html
http://www.cse.psu.edu/~rtc12/CSE486/lecture06.pdf



반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts