728x90

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()

잘 인식하는 사진을 캡쳐해서 그렇지 배경에 조도변화랑 노이즈가 너무 많아서 조금만 움직여도 엉뚱한걸 인식한다 보완 할 점이 많아보인다 

728x90

+ Recent posts