[OpenCV] 05-3. Shi-Tomasi Corner Detector & Good Features to Track
🐍Python/OpenCV

[OpenCV] 05-3. Shi-Tomasi Corner Detector & Good Features to Track

728x90
반응형

< Shi-Tomasi Corner Detector & Good Features to Track >

이번 장에서는

  • Shi-Tomasi Corner Detector라는 다른 모서리 탐지 기법
  • cv2.goodFeaturesToTrack() 함수

에 대해 배워 볼 것이다.

Theory

이전 장에서 Harris Corner Detector을 봤다. 그 이후에 조금의 수정을 더한 Good Features to Track은 Harris Corner Detector에 비해 결과가 좋았다. Harris Corner Detector의 스코어링 함수는 다음과 같았다.

R=λ1λ2k(λ1+λ2)2

이 대신에, Shi-Tomasi의 스코어링 함수는 다음과 같다.

R=min(λ1,λ2)

이 값이 임계값보다 더 크다면, 모서리로 인식될 것이다. 만약 λ1λ2 공간에 Harris Corner Detector 처럼 그리면 다음과 같을 것이다.



그림에서 λ1 λ2가 최솟값인 λmin 이상이어야 모서리로 판단된다는 것을 볼 수 있다.(초록색 영역/ λminλ2,λminλ1)

Code

OpenCV는 cv2.goodFeaturesToTrack()이라는 함수가 있다. 이는 Shi-Tomasi 방법으로 이미지내에서 강력한 모서리 N개를 찾는다.(또는 Harris Corner Detection으로, 설정하기 나름이다) 보통, 이미지는 흑백스케일 이미지여야 한다. 그리고 원하는 만큼의 모서리 수를 지정한다. 그리고 품질 레벨을 정하는데 이는 0~1까지 값이고, 모서리의 최소 품질 이하의 것들은 다 버려진다. 그리고 탐지된 모서리들 간의 최소 유클리디안 거리를 제공한다.

이 모든 정보들과 함께, 함수는 이미지내에서 모서리를 찾아낸다. 품질 레벨 아래의 모든 모서리들은 버려진다. 그리고 내림차순으로 품질에 기반해서 남은 모서리들을 골라낸다. 그리고 함수는 가장 강력한 모서리를 고르고, 최소 거리의 범위에 해당하는 주변부 모서리들을 다 제거하고 N개의 강력한 모서리만 남긴다.

아래의 예시는, 25개의 가장 좋은 모서리들을 찾을 것이다.

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

img = cv2.imread('./images/container.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# (input, # of corners, threshold, minimum distance between corners) corners = cv2.goodFeaturesToTrack(gray,25,0.01,10) corners = np.int0(corners) for i in corners: x,y = i.ravel() cv2.circle(img,(x,y),3,(0,0,255),-1) plt.imshow(img[:,:,::-1]) plt.axis('off') plt.show()

아래 결과를 보자.



이 함수는 추적(Tracking)에 더 적합하다. 다음에 더 자세히 보자!

728x90
반응형