728x90

Theory

이전 포스팅 에서 Harris Corner Detector에 대해서 다뤘다.

1994년도 후반, J. Shi and C. Tomasi 는 그들의 논문에서 Good Features to Track 라는 작은 수정을 했는데 이는 Harris Corner Detector에 비해서 더 좋은 성능을 나타내었다.

Harris Corner Detector 의 scoring function 은 다음과 같다.:

 

대신, Shi-Tomasi 가 제한한 함수는:

인데,  이것이 만약 threshold value 보다 크다면, 이를 코너라고 생각하는 것이다. 만약 우리가 이를

라는 공간 아래에 그린다면, Harris Corner Detector에서 보았던 공간 그림과 같을 것이다. 우리는 아래와 같은 이미지를 얻는다.

이 그림에서 당신은, λ1 과 λ2가 최소값 λmin 위일때만 , corner 라고 고려하면 된다. (green region).

Code

이 모든 정보를 통해 함수는 이미지의 코너를 찾는다. 품질 수준 이하의 모든 코너가 제외된다. 그런 다음 품질에 따라 내림차순으로 나머지 모서리를 정렬한다. 그런 다음 함수는 가장 강한 모서리를 가져 와서 최소 거리의 범위보다 가까운 모든 모서리를 버리고 N 개의 가장 강한 모서리를 반환한다.

 

이 함수는 Tracking에 더 적절하다고 하신다.

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('blox.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 
# (img,   max number of corners,   Quality level,   Min Euclidian distance between corners)

corners = cv2.goodFeaturesToTrack(gray,25,0.01,10) 
# img = float32 형식 그레이스케일 이미지
# max# = 검출할 최대 코너 수 
# Quality = 품질 수준 
# Min distance = 감지된 코너 사이의 최소 유클리드 거리 

corners = np.int0(corners) #정수형으로 바꿔준다
for i in corners:
    print('i:',i)
    x,y = i.ravel() # 2D -> 1D로 바꿔준다 
    print('x:{}, y:{}'.format(x,y))
    cv2.circle(img,(x,y),3,255,-1)
plt.imshow(img),plt.show()

 

728x90

+ Recent posts