반응형


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




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

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

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






윈도우내의  좌표(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



반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 ~~

유튜브 구독하기


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

  1. d 2018.12.07 16:49

    Traceback (most recent call last):
    File "CR.py", line 11, in <module>
    img_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

    죄송하지만 이러한 에러가 나는데 왜 그러는 걸까요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2018.12.07 17:20 신고

      cvtColor함수의 입력영상을 읽어오지 못해서 나는 에러입니다

+ Recent posts