2022.07.01 금일은 캠시프트 알고리즘에 관한 강의였다.
지난시간에 배운 Mean Shift 알고리즘의 단점을 보완해줄 수 있는
캠시프트 알고리즘에 대해 배워본다.
캠시프트 ( CamShift ) 란?
- Continuously Adaptive Mean Shift
- Mean Shift 알고리즘을 계속 적응형으로 동작시키는 알고리즘
- 추적하는 객체의 크기가 변하더라도 검색 윈도우의 크기가 고정되어 있는 평균 이동 알고리즘의 단점을 보완
캠시프트 동작 방법
- 우선 평균 이동 알고리즘으로 이동 위치 계산
- 윈도우 크기를 조정
- 특징 공간을 가장 잘 표현하는 타원 검출
- 새로운 크기의 윈도우를 이용하여 다시 평균 이동 수행
캠시프트 알고리즘
- 캠시프트 알고리즘을 이용한 관심 영역 추적
이전 프레임의 위치가 위와같이 빨간 사각형이라고 생각하고
Mean Shift 알고리즘과 동일하게 옆으로 이동하면서 Scan을 진행한다.
그리고 미리 설정해놓은 ROI와 가장 유사한 부분에서 Scan을 중단한다.
이후 Scan을 중단한 부분에서 사각형 ( 검색 윈도우 ) 의 크기를 넓혀가면서
해당 검색 윈도우 내부에서 다시한번 객체위치를 찾아낸다.
내부 데이터 분포등을 사용하여 타원을 만들어내고 타원의 크기만큼 검색윈도우의 크기를 키워주게된다.
따라서 검색 윈도우 내부에서 객체의 크기가 작더라도
객체를 감싸는 타원의 크기가 작기 때문에 검색윈도우가 작아지게 된다.
그래서 일단 크기를 키웠는데 객체가 작다면 타원의 크기가 작을것이고 객체가 사각형보다 크다면 검색 윈도우도 점점 커지는 것이 위 알고리즘의 메인이다.
캠시프트 추적 함수cv2.CamShift ( probImage, window, criteria ) -> retval , windowprobImage : 관심 객체에 대한 히스토그램 역투영 영상 ( 확률 영상 ) window : 초기 검색 영역 윈도우 & 결과 영역 반환criteria : 알고리즘 종료 기준 ( type, maxCount, epsilon ) 튜플
(e.g.) term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1)
최대 10번 반복하며, 정확도가 1이하이면 ( 즉, 이동 크기가 1픽셀봗 작으면 ) 종료retval = 추적하는 객체의 모양을 나타내는 회전된 사각형 정보를 반환.
( (cx, cy), ( width, height ) , angle ) 튜플.
실제 코드를 살펴보자.CamShift 함수를 사용하기 전까지는 이 전 강의였던 MeanShift 알고리즘과 동일하다.그리고 OpenCV에서는 elipse 를 표현하는 방법 중 직사각형에 내접하는 타원을 그리는 사용하였다.OpenCV에서는 회전된 사각형의 튜플값을 그대로 넣어주면 그 사각형에 내접하는 타원을 그려준다.
그리고 실제로 실행해보면 해당 객체를 따라서 사각형을 그릴 때 해당 크기에 맞춰서 그려지지 않는 것을 볼 수 있는데Cam Shift 알고리즘을 다시 보게되면 크기를 넓혀가면서 찾는다고 설명했기 때문에
( OpenCV에서는 10픽셀씩 늘려가게된다 )크기가 천천히 커지는 것을 볼 수 있다.
이상 MeanShift 알고리즘과 Cam Shift 알고리즘에 대해 설명이 끝났는데
기억해야할 것은 Mean Cam Shift 알고리즘 입력에 어떤 영상을 주었는지 보면
확률에 대한 개념의 이미지를 주게되는데
우리는 역투영이미지를 주었는데 또다른 확률분포 이미지를 줄 수도있다.
그리고 색상 정보를 추적하는 코드는 금일과 전일의 코드를 사용하면잘 추적되는 것도 볼 수 있다.
그리고 원색에 가까운 색상을 추출하기 위해서 HSV를 사용한 것도 볼 수 있다.
이처럼 세세하게 어떤방식으로 코드가 구성되어있는지 분석하고 사용하면 좋은 결과를 얻을 수 있다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 객체추척과 모션벡터 _ 밀집 옵티컬플로우 (0) | 2022.07.03 |
---|---|
[Open CV] 객체추척과 모션벡터 _ 카나데옵티컬플로우 (0) | 2022.07.02 |
[Open CV] 객체추척과 모션벡터 _ 평균이동 알고리즘 (0) | 2022.06.29 |
[Open CV] 객체추척과 모션벡터 _ 배경차분 _ MOG 배경모델 (0) | 2022.06.28 |
[Open CV] 객체추척과 모션벡터 _ 배경차분 _ 이동평균배경 (0) | 2022.06.27 |