작은 크기의 부분 영상 위치 찾아내고 싶을 때
동작 원리
1. 얼굴 영역 부분을 템플릿으로 설정
2. 템플릿 영상을 입력 영상 전체 영역에 대해 이동하면서 유사도, 비유사도 검사
3. 결과를 그레이스캐일 영상 형태로 나타냄
matchTemplate() 함수를 이용
비교 방식 method 인자로 결정
TM_SQDIFF
제곱차 일치
차를 제곱해서 총 합
완벽하게 일치시 0, 아니면 양수값
0 ~ ?
NORM : 차의 제곱을 둘의 곱 절대값으로 나눔
TM_CCORR
상관관계 매칭
그냥 매칭된 두칸 곱함 -> 같으면 제곱이라 합했을 때 큰값 나옴
유사하면 큰 양수 나옴, 아니면 작은 값
NORM : 차의 제곱을 둘의 곱 절대값으로 나눔
TM_CCOEFF
상관계수 매칭
미리 평균 밝기로 보정한 수 상관관계 매칭
유사하면 큰 양수
유사하지 않으면 0에 가까운 양수 또는 음수
-? ~ ?
뒤에 _NORMED가 붙으면 각 영상의 밝기 차를 줄여줌
TM_CCORR_NORMED에서는 0~1사이의 값
TM_CCOEFF_NORMED에서는 -1 ~ 1 사이의 값
1에 가까울 수록 매칭 잘됨
정규화된 상관계수 매칭(TM_CCOEFF_NORMED)가 결과가 좋은 것으로 알려짐
얼굴 검출에서 좋은 성능 보임
유사-하르 필터
흑백 사각형이 서로 붙어있는 형태로 구성된 필터
흰색 영역은 더함
검은색 영역은 뺌
24*24 영역에서 유사하르 필터 18만개 생성 가능
오래걸림
-> 비올라, 존스가 adaboost와 integral image(적분 영상) 이용해서 해결
adaboost 알고리즘으로 의미있는 특징 6000개가량 선출
캐스케이드 구조를 도입하여 가장 유용한 유사-하르 필터를 이용해 얼굴이 아니라 판단되면 이후의 계산 하지 않음
CascadeClassifier 클래스
미리 훈련된 객체 검출 분류기 XML 파일을 불러와 검출함
classifier = cv2.CascadeClassifier('~.xml') 통해 불러옴
classifier.detectMultiScale(src) 통해 객체 검출
HOG(Histograms of Oriented Gradients)
그래디언트 방향 히스토그램
SVM 이용해서 보행자 위치 검출하는 방법 제안
기본적으로 64 128
그래디언트는 0도 ~ 180도까지 설정
영상을 8 16개로 나눔
각 셀로부터 그래디언트 방향 성분 히스토그램 구함
20도로 나누어 히스토그램 구하면 9개의 빈으로 구성된 방향 히스토그램 만들어짐
인접한 4칸끼리 block이라 정의
블록 하나에 36개의 실수값 ( 4 * 9) 실수로 이루어진 방향 히스토그램 정보 추출
8 16 -> 7 15개의 block 검출
105개의 블록, 추출되는 방향 히스토그램은
105 * 36개
이 3780개의 실수로 특징벡터 잡음
위의 특징벡터를 보행자와 보행자가 아닌 사람을 구한 후 SVM 훈련
HOGDescripter 클래스 이용하면 HOG 기술자 쉽게 도출
미리 계산된 HOG 기술자 정보 제공
hog = cv2.HOGDescripter()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
hog.detectMultiScale(frame)
모서리의 흑백 정사각형 검출
검출된 QR 코드 정사각형으로 투시변환
내부 해석해서 문자열 추출
QRCodeDetector 클래스 이용
detector = cv2.QRCodeDetector()
info , points, _ = detector.detectAndDecode(frame)
info에 정보 들어옴