Transcript 160218_한상훈.
Pride
Power
P3 in VISION laboratory…
Passion
7th week Presentation
Vision System Lab, Sang-Hun Han
OpenCV
• OpenCV(Open Computer Vision)
– 오픈 소스 컴퓨터 비전 C 라이브러리이다. 원래는 인텔이 개발하였다.
– 윈도우, 리눅스 등의 여러 플랫폼에서 사용할 수 있으며 실시간 이미지 프로세싱에
중점을 둔 라이브러리이다.
OpenCV
• Face Detection
– Haar Classifier : 부스트된 거절 캐스케이드(boosted rejection cascade)를 생성하는
알고리즘
– OpenCV에서는 Paul Viola와 Michel Jones에 의해 처음 개발되고 나중에 Rainer
Lienhart와 Jochen Maydt에 의해 확장된 얼굴 검출기에 대한 구현을 제공
– 영상에서 특정 사각형 영역을 더하거나 빼는 과정을 통해 구해지는 유사-하르 웨이
블릿(Haar-like wavelet) 또는 하르 특징(Haar feature)을 사용
•
•
wavelet : FT(Fourier Transform)은 무한히 반복되는 사인파를 기본파형으로 이용하여 주파수만을 변화시
키며 상관관계를 밝히지만 Wavelet은 한 파장의 파형(사인파가 아닐 수도 있음)을 기본파형으로 하여 그
크기와 위치를 변화시켜가며 상관관계를 밝히는 기술
Haar feature : 기본적으로 영상에서의 영역과 영역의 밝기차를 이용한 특징
OpenCV
• 교사 학습과 부스팅 이론
– 교사 학습 : 입력에 대한 “올바른 결과”가 무엇인지 알고리즘에 알려주는 것
– 일반적으로 히스토그램 균등화 및 크기 정규화된 영상패치를 분류기에 입력하고, 이
영상 패치에 관심 객체가 포함되어 있는지 여부를 알려줌
– Viola-Jones 검출기는 각 노드에서 AdaBoost를 거절 캐스케이드(rejection cascade)
로써 사용
– 즉, 각 노드는 낮은 거절 비율과 높은 검출률을 갖도록 설계된 다중 트리 Adaboost
형태의 분류기가 됨
OpenCV
– Source Code
타이머 구현
버튼 함수 구현
OpenCV
– Source Code
클래스 구현(헤더)
OpenCV
– Source Code
클래스 구현(cpp)
OpenCV
– Source Code
클래스 구현(cpp)
OpenCV
– Result
OpenCV
• 평균배경방법(Averaging Background)
– 배경 모델을 생성하기 위해 각 픽셀의 평균과 편차를 이용
– 배경요소가 없는 간단한 영상에서 잘 동작
– 조명이 일정하게 유지되고 있는 상황에서 유리
– 배경 모델 구하기
•
•
•
•
•
•
1. 배경연상과 프레임 간 차이의 절대값을 각각 누적하여 이를 학습
2. 1번 반복
3. 누적된 영상들을 이용하여 배경에 대한 통계적 모델 생성
각 픽셀에서 평균과 편차 정도(평균 절대값 차이)를 계산
4. 영상을 전경과 배경으로 분리
배경 : 임계값(Threshold) 사이에 존재
OpenCV
– Source Code
프로젝트명dlg.h 구현
OpenCV
– Source Code
프로젝트명dlg.cpp 타이머 구현(계속)
OpenCV
– Source Code
프로젝트명dlg.cpp 타이머 구현
OpenCV
– Source Code
버튼 구현
OpenCV
– Result
OpenCV
• Hough Transform
– 한 평면 위에 놓여 있는 점들의 집합 P의 원소 (𝑥𝑖 , 𝑦𝑖 )를 지나는 모든 직선을 아래 식
과 같이 표현하였을 때, 𝑟과 𝜃는 변수가 되고 𝑥와 𝑦는 상수가 됨
𝑥𝑐𝑜𝑠𝜃 + 𝑦𝑠𝑖𝑛𝜃 = 𝑟
– 이 때 𝑟, 𝜃를 𝑟, 𝜃 평면 위에 나타내면 곡선을 이루게 되고, 모든 𝑥𝑖 , 𝑦𝑖 에 대해 곡선으
로 표현하게 되면 교점이 나타나게 됨
– 이 곡선들의 교점을 통해 교점을 이룬 곡선들은 하나의 직선 위에 있다라는 것을 알
수 있음. 즉, n개의 곡선이 한 점에서 만나면 n개의 점이 하나의 직선 위에 있다는 것
을 뜻함
OpenCV
– Source Code
타이머 구현
버튼 구현
OpenCV
– Source Code
클래스 함수 구현
OpenCV
– Result
OpenCV
• Mean-Shift & Cam-Shift
– Mean-Shift 알고리즘은 데이터 집합의 밀도분포(특징점, 코너, 색상)을 기반으로 관
심영역(ROI) 객체를 고속으로 추적하는 알고리즘
– 초기의 검색 영역의 크기와 위치를 지정하면 반복되는 색 분할 계산에 의해서 색상
클러스터가 발생되고 초기 지정한 색 영역에 기반하여 경계를 결정하여 관심 물체를
추출할 수 있음
– Mode Seeking 알고리즘이라고도 하며, 특정 데이터들의 중심(mean)으로 이동
(shift)하는 알고리즘
– 이를 이용하여 데이터 분포의 mode를 찾기도 하고, 트래킹도 가능
OpenCV
• Mean-Shift & Cam-Shift
– Mean-Shift의 흐름
•
•
•
•
1) 관심영역 선택
2) 선택된 범위 안에 들어있는 특징점들의 밀도가 가장 큰 곳을 찾음
3) 밀도가 가장 큰 곳을 중심으로 재설정
4) 재설정된 중심을 기준으로 임의의 범위를 다시 설정
– 위의 1~4를 반복하는데, 이렇게 반복하면 전체에서 가장 밀도가 많은 부분에서 맴돌
게됨
– Cam-Shift(Continuously Adaptive Mean Shift Algorithm)
– Color Segment 방법의 Mean-Shift 알고리즘을 Streaming(효과, 추적) 환경에서 사
용하기 위해 개선한 것으로 탐색 윈도우의 크기를 스스로 조정하는 기법을 사용하여
Mean-Shift의 단점을 보강
– 객체를 고속으로 추적하는데 사용되며 조도변화, 잡음이 많은 배경에서는 성능이 좋
지 않음
– 검출된 객체의 영역의 Hue 값의 분포를 이용하여 변화될 위치를 예측하고 탐지한 후
중심을 찾아 객체를 추적
OpenCV
• Mean-Shift & Cam-Shift
– ‘연속적인 적응성 평균이동 알고리즘’이므로 Mean-Shift를 사용하며 탐색윈도우 크
기를 스스로 조정한다는 것
– 경험적 분포(empirical distribution)에서 동작하는 탐색 알고리즘
– 영상 내에서 여러 개의 윈도우를 설정하고, 각 윈도우의 크기 및 중심점의 위치를 반
복적으로 변화시킴. 크기는 화소 값들의 합에 비례해 증가
OpenCV
– Source Code
클래스 선언부
OpenCV
– Source Code
클래스 생성자&파괴자
OpenCV
– Source Code
클래스 함수 구현
OpenCV
– Source Code
클래스 함수 구현
OpenCV
– Source Code
타이머 구현
버튼 구현
OpenCV
– Source Code
•
•
•
마우스 이벤트
영상이 뿌려지는 화면을 클릭하고 드래그, 해당 사각형 정보(관심영역)를 획득
클래스 마법사를 이용하여 생성
OpenCV
– Source Code
•
•
마우스 이벤트
영상이 뿌려지는 화면을 클릭하고 드래그, 해당 사각형 정보(관심영역)를 획득
마우스 이벤트 구현(왼쪽 마우스 버튼 클릭)
OpenCV
– Source Code
•
•
마우스 이벤트
영상이 뿌려지는 화면을 클릭하고 드래그, 해당 사각형 정보(관심영역)를 획득
마우스 이벤트 구현(왼쪽 마우스 버튼 클릭 끝났을 경우)
OpenCV
– Result
•
•
마우스 클릭&드래깅하여 관심영역(ROI)을 설정
관심영역 설정하면 해당 색상을 추적
OpenCV
• Optical Flow
– 명도 유형을 서서히 변화시킴으로써 발생하는 화상에서의 명백한 움직임의 속도 분
포
– 3가지 가정을 기초로 구성
•
•
•
밝기 항상성 : 어떤 객체 상의 픽셀은 프레임이 바뀌어도 그 값이 변하지 않음
시간 지속성 : 영상 내에서의 움직임은 빠르지 않음. 즉, 영상에서의 객체 움직임에 비하여 시간 변화가 더
빨리 진행(연속된 프레임 상에서 보면 이동량이 크지 않다는 것을 의미)
공간 일관성 : 공간적으로 인접한 객체는 동일 객체일 확률이 높음
OpenCV
• Optical Flow
– 종류
•
•
•
밀집 옵티컬 플로우 : 영상에 내부의 모든 픽셀에서 속도를 계산(혼-셩크)
희소 옵티컬 플로우 : 코너와 같이 두드러진 속성을 가진 추적할 점을 미리 지정하여 속도 계산
루카스-카나데 : 한 프레임의 각 픽셀 윈도우를 설정하고 다음 프레임에서 이 윈도우와 가장 잘 일치하는
곳을 찾음. 작은 지역 윈도우를 사용하기 때문에 이 윈도우보다 큰 움직임이 발생하였을 경우 움직임을 계
산하지 못하는 단점이 존재. 이러한 단점을 해결하기 위해 피라미드를 이용
•
피라미드 : 영상 피라미드를 구성, 상위 계층에서 하위 계층으로 추적하여 커다란 움직임도 찾아냄
Image Pyramid
Optical Flow
OpenCV
– Source code
클래스 함수 구현
OpenCV
– Source code
클래스 함수 구현
OpenCV
– Source code
클래스 함수 구현
OpenCV
– Source code
프로젝트명Dlg.h 구현
OpenCV
– Source code
프로젝트명Dlg.cpp(Init 함수)
OpenCV
– Source code
프로젝트명Dlg.cpp 타이머 구현
OpenCV
– Source code
프로젝트명Dlg.cpp 버튼 구현
OpenCV
– Result
OpenCV
– 숙제
– 자신의 주제에 맞는 필요한 방법 1개를 구현
– 제출 방법 : 프로젝트 내의 Debug 폴더만 압축하여 [email protected] 메일로 제출