CAMShift ( Continuously Adaptive Mean Shift Algorithm ) 알고리즘은
Color Segment 방법의 MeanShift 알고리즘을 Streaming(효과,추적) 환경에서 사용하기 위해 개선한 것으로
탐색윈도우의 크기를 스스로 조정하는 기법을 사용하여 Mean-shift의 답점을 보강한다.
객체를 고속으로 추적하는데 사용되며 조도변화, 잡음이 많은 배경에서는 성능이 좋지않은 특징이 있다.
검출된 객체의 영역의 Hue 값의 분포를 이용하여 변화될 위치를 예측하고 탐지한 후
중심을 찾아 객체를 추적하게 된다.
이름에서 알수 있듯이 '연속적인 적응성 평균이동 알고리즘'이므로
mean-shift 를 사용하며 탐색윈도우 크기를 스스로 조정한다는 것이다.
CAMSHIFT 는 널리 알려진 meanshift algorithm의 변형으로 임의의 물체를 추출하기 위해
경험적 분포 (empirical distribution)에서 동작하는 탐색 알고리즘이다.
Camshift 알고리즘은 먼저 meanshift를 적용하고, 윈도우의 크기를 다음 공식에 의해 갱신한다.

또한 이 윈도우에 가장 잘 맞는 타원을 계산한다. 다시 새롭게 크기가 조정된 윈도우와 이전 윈도우의 위치를 가지고 Meanshift를 적용한다. 이러한 과정은 원하는 정확도가 나올때까지 반복한다.

출처: https://techlog.gurucat.net/146 [하얀쿠아의 이것저것 만들기 Blog]
import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
success, frame = cap.read()
x,y,w,h = cv.selectROI(frame)
track_window = (x, y, w, h)
roi = frame[y:y+h, x:x+w]
hsv_roi = cv.cvtColor(roi, cv.COLOR_BGR2HSV)
mask = None
roi_hist = cv.calcHist([hsv_roi], [0], mask, [180], [0, 180])
cv.normalize(roi_hist, roi_hist, 0, 255, cv.NORM_MINMAX)
# Define the termination criteria:
# 10 iterations or convergence within 1-pixel radius.
term_crit = (cv.TERM_CRITERIA_COUNT | cv.TERM_CRITERIA_EPS, 10, 1)
success, frame = cap.read()
cv.flip(frame,1)
while success:
# Perform back-projection of the HSV histogram onto the frame.
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
back_proj = cv.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)
# Perform tracking with CamShift.
rotated_rect, track_window = cv.CamShift(
back_proj, track_window, term_crit)
box_points = cv.boxPoints(rotated_rect)
box_points = np.int0(box_points)
cv.polylines(frame, [box_points], True, (255, 0, 0), 2)
cv.imshow('back-projection', back_proj)
cv.imshow('camshift', frame)
k = cv.waitKey(1)
if k == 27: # Escape
break
success, frame = cap.read()
cap.release()
cv.destroyAllWindows()

잘 인식하는 사진을 캡쳐해서 그렇지 배경에 조도변화랑 노이즈가 너무 많아서 조금만 움직여도 엉뚱한걸 인식한다 보완 할 점이 많아보인다
'ComputerVision' 카테고리의 다른 글
OpenCV week10 Object Tracking - MeanShift Algorithm (0) | 2021.05.12 |
---|---|
OpenCV_week09 Feature Detection_SIFT(scale-invariant-feature transform) (0) | 2021.05.03 |
OpenCV_week09 Feature Detection_Shi-Tomasi Corner Detection & Good Featur to Track (0) | 2021.05.03 |
OpenCV_week09 Feature Detection_Harris Corner Detection (0) | 2021.05.03 |
OpenCV_week07(DFT, Tamplate Matching) (0) | 2021.04.15 |