반응형

2020/10/13 5

[파이썬 OpenCV] HOG 알고리즘을 이용해서 사람 검출하기 - cv2.HOGDescriptor

1. HOG - Histogram of Oriented Gradients 영상의 지역적 그래디언트 방향 정보를 히스토그램으로 표현해서 영상의 형태를 표현하는 방법입니다. HOG와 SVM 머신러닝을 결합하여 정형화된 객체를 검출하는 알고리즘입니다. 2. HOG 알고리즘 전체 영상에서 부분 영상을 추출해서 부분 영상의 특징을 추출하여 전신을 판단하는 알고리즘입니다. 작동 순서 (1) 임의의 크기의 사각형을 정의해서 부분 영상을 추출합니다. (2) 추출한 부분 영상의 크기를 정규화 합니다. (64X128) (3) 64X128 영상의 그래디언트를 계산하여 방향 성분과 크기 성분을 파악합니다. (4) 64X128 영상을 8X8 크기의 셀(cell)로 분할합니다. (5) 각 셀마다 방향과 크기 성분을 이용하여 방향..

[파이썬 OpenCV] 캐스케이드 분류기를 이용해서 정면 얼굴 검출하기 - cv2.CascadeClassifier, detectMultiScale, Haar-like features

1. 캐스케이드 분류기 캐스케이드는 직렬로 연결되어 있다는 것을 의미합니다. 얼굴 검출 용도로 많이 쓰이며 눈, 보행자, 자동차 번호판까지 검출 가능합니다. 2. Viola - Jones 얼굴 검출기 머신러닝을 이용한 방식입니다. Positive 영상(얼굴 영상)과 negative 영상(얼굴 아닌 영상)을 훈련하여 빠르고 정확하게 얼굴 영역을 검출합니다. 기존 방법과의 차별점은 다음과 같습니다. (1) AdaBoost에 기반하여 강한 분류 성능을 갖습니다. (간단한 형태의 분류기를 여러개 모아서 강한 형태의 분류기를 만듭니다.) (2) 유사 하르(haar-like) 특징을 사용합니다. (3) 캐스케이드(cascade) 방식을 통한 빠른 동작 속도를 갖습니다. 기존 얼굴 검출 방법보다 약 15배 빠르게 동..

[파이썬 OpenCV] 탬플릿 매칭으로 원하는 영상 찾기 - cv2.matchTemplate

탬플릿 매칭 - Template matching 템플릿 매칭은 입력 영상에서 (작은 크기의) 템플릿 영상과 일치하는 부분을 찾는 기법입니다. 템플릿은 찻을 대상이 되는 작은 영상을 의미합니다. 커널이라는 용어도 씁니다. 탬플릿 매칭은 노이즈와 밝기 변화에 강합니다. CCOFF 연산을 이용하면 밝기 보정을 해서 매칭하기 때문입니다. 가우시안 노이즈 경우에 correlation 방법이 잘 동작합니다. 다만 기본적으로 같은 위치에 있는 픽셀 값들을 곱하고 더해서 유사도를 판단하는 방식이기 때문에 회전, 크기변환이 심하게 일어난 경우 내가 찾고자하는 템플릿 영상의 위치를 제대로 찾을 수 없습니다. 다른 방법을 이용해야 하는데 키포인트 로칼 피쳐매칭, 로칼 피쳐 포인트 매칭을 생각해볼 수 있습니다. 1. 템플릿 ..

[파이썬 OpenCV] 모멘트 기반 객체 검출 - cv2.matchShapes

모멘트 기반 객체 검출 모멘트(Moments)는 영상의 형태를 표현하는 일련의 실수 값입니다. 모멘트 기반 객체 검출은 두 개의 외곽선, 그레이스케일 영상을 이용하여 모양을 비교하는 방법입니다. 기본적으로 회전, 크기 변환, 대칭, 이동에 강력하며 객체에 변형이 생긴 경우에는 성능이 떨어집니다. 특정 함수 집합과의 상관 관계(correlation) 형태로 계산합니다. f(x,y)는 입력영상을 의미합니다. $x^p, y^q$는 이미 정의되어 있는 다항식 함수입니다. 이 두개를 correlation 계산을 해서 실수값 m을 계산합니다. p와 q를 변경하면서 많개는 몇십개까지 추출하여 영상의 모양 정보를 표현하는 방법입니다. x와 y 함수를 어떻게 정의하냐에 따라 모멘트를 여러가지 형태로 정의할 수 있습니다...

[파이썬 OpenCV] 그랩컷을 이용한 영상 분할 - cv2.grabCut

그랩컷 - GrabCut 그랩컷은 그래프 컷(graph cut)기반 영역 분할 알고리즘입니다. 그래프 알고리즘에서 사용되는 미니멀 컷 알고리즘을 이용해서 영역을 분할합니다. 영상의 픽셀을 그래프 정점으로 간주하고, 픽셀들을 두 개의 그룹(객체 그룹, 배경 그룹)으로 분할하는 최적의 컷(Max Flow Minimum Cut)을 찾는 방식입니다. 이 알고리즘으로 객체와 배경을 구분할 수 있습니다. 객체를 가운데, 배경은 바깥 부분으로 간주합니다. 크게 2가지 방법으로 적용할 수 있습니다. 1. 객체 위치를 러프하게 사각형 형태로 주는 방식 2. 객체 부분과 배경 부분을 마우스로 지정해주고 정보를 제공하고 다시 업데이트 하는 방식 1. 그랩컷 함수 - cv2.grabCut 인자를 어떻게 주냐에 따라 단순하게 ..

반응형