객체 검출

이주희·2022년 12월 9일
0

템플릿 매칭

작은 크기의 부분 영상 위치 찾아내고 싶을 때
동작 원리
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)가 결과가 좋은 것으로 알려짐

캐스케이드 분류기와 얼굴 검출

  • boosting
    ensemble 기법중 하나
    weak learner 이어나가서 모델 성능 개선

얼굴 검출에서 좋은 성능 보임
유사-하르 필터
흑백 사각형이 서로 붙어있는 형태로 구성된 필터

흰색 영역은 더함
검은색 영역은 뺌
24*24 영역에서 유사하르 필터 18만개 생성 가능
오래걸림

-> 비올라, 존스가 adaboost와 integral image(적분 영상) 이용해서 해결

  1. adaboost 알고리즘으로 의미있는 특징 6000개가량 선출

  2. 캐스케이드 구조를 도입하여 가장 유용한 유사-하르 필터를 이용해 얼굴이 아니라 판단되면 이후의 계산 하지 않음

CascadeClassifier 클래스
미리 훈련된 객체 검출 분류기 XML 파일을 불러와 검출함

  1. classifier = cv2.CascadeClassifier('~.xml') 통해 불러옴

  2. classifier.detectMultiScale(src) 통해 객체 검출

HOG 알고리즘과 보행자 검출

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 코드 검출

모서리의 흑백 정사각형 검출
검출된 QR 코드 정사각형으로 투시변환
내부 해석해서 문자열 추출
QRCodeDetector 클래스 이용

detector = cv2.QRCodeDetector()
info , points, _ = detector.detectAndDecode(frame)
info에 정보 들어옴

0개의 댓글