Language - Python(Opencv) 48

Python Opencv - #36, 객체 추적(MOG 배경)

영상의 객체 추적 - 배경 차분 - MOG 배경 모델 MOG 배경 모델을 이용해서 배경 차분을 하는 방법을 알아보겠습니다. 1. MOG란? Mixture of Gaussian, GMM(Gaussian Mixture Model)을 의미합니다. 각 픽셀에 대해 MOG 확률 모델을 설정하여 배경과 전경을 구분하는 방법입니다. 영상의 각각의 픽셀 값을 배경 영상으로 정의합니다. 미리 정의해둔 배경 영상의 각각의 픽셀마다 가우시안 모델을 정의합니다. 픽셀 값이 정해진된 것이 아니라 픽셀 값이 가우시안 형태를 따르는 모델로 정의하는 것입니다. 배경 차분뿐만 아니라 데이터 사이언스에서 전반적으로 사용되는 데이터 분석 기법입니다. 2. 다양한 배경 모델 구성 방법 (1) Static scene static scene은..

Python Opencv - #35, statci Object 추적

영상의 객체 추적 - 정적 배경 차분 방법 배경 차분(Background Subtraction : BS)은 등록된 배경 모델과 현재 입력 프레임과의 차영상을 이용하여 전경 객체를 검출하는 방법입니다. 동영상에서 움직이는 전경 객체 검출을 위한 기본적인 방법입니다. 배경 영상을 model이라는 용어를 써서 배경 영상을 등록시켜두고 배경 영상과 다른 부븐을 찾아서 그 부분이 새로 나타난 객체라고 판단하는 방식으로 작동합니다. 배경과 현재 프레임의 차이가 있는 부분을 검출하게 됩니다. 출처 : OpenCV 튜토리얼 정적 배경을 이용한 전경 객체 검출 예제 코드 배경 영상과 현재 프레임 영상의 차이를 구하기 위해 cv2.absdiff 함수를 이용합니다. -. Color 영상 → GrayScale로 변환 후, G..

Python Opencv - #34, 사람 검출

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

Python Opencv - #33, 얼굴 검출

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

Python Opencv - #32, Template Matching

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

Python Opencv - #31, 모멘트 객체 검출

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

Python Opencv - #30, GrabCut

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

Python Opencv - #29, 외곽선 검출

▶ 다양한 외곽선 함수 (1) cv.arcLength() 외곽선 길이를 반환합니다. (2) cv2.contourArea() 외곽선이 감싸는 영역의 면적을 반환합니다. (3) cv2.boundingRect() 주어진 점을 감싸는 최소 크기 사각형(바운딩 박스)를 반환합니다. (4) cv2.minEnclosingCircle() 주어진 점을 감싸는 최소 크기 원을 반환합니다. (5) cv2.minAreaRect() 주어진 점을 감싸는 최소 크기 회전된 사각형을 반환합니다. (6) cv2.minEnclosingTriangle() 주어진 점을 감싸는 최소 크기 삼각형을 반환합니다. (7) cv2.approxPolyDP() 외곽선을 근사화(단순화) 합니다. (8) cv2.fitEllipse() 주어진 점에 적합한 ..

Python Opencv - #28, 레이블링

▶ 객체 단위 분석 객체 단위 분석은 객체를 분할하여 특징을 분석하는 것을 의미합니다. 영상이 입력되었을 때 객체와 배경이 분리될 수 있다고 가정하며 이진화를 통해 객체와 배경을 분리합니다. 각각의 객체의 모양과 크기를 분석해서 내가 원하는 객체가 어디에 이쓰지 확인하고 싶을 때 객체단위 분석이 필요합니다. 객체 위치 및 크기 정보, ROI 추출, 모양 분석 등을 할 수 있습니다. 객체 단위 분석 방법은 레이블링과 외곽선 검출이 있습니다. → 레이블링 - Labeling 레이블링은 객체 구역을 영역 단위로 분석하는 것입니다. 서로 연결되어 있는 객체 픽셀에 고유한 번호를 지정하는 작업입니다.(레이블맵) 일반적으로 이진 영상에서 수행합니다. 레이블링 속도가 외곽선 검출보다 빨라서 더 효율적입니다. 레이블링..

Python Opencv - #27, 영상의 모폴리지

▶ 이진 영상의 열기(opening) 연산 이진 연산의 열기 연산은 이진 영상에 침식을 적용하고 팽창을 적용하는 기법입니다. 이진 영상 열기 적용 열기 연산을 적용함으로써 작은 돌기, 작은 객체가 사라지고 얇은 연결선이 끊어집니다. 열기는 모양이 단순해지긴 하지만 한 두 픽셀 노이즈에 해당하는 객체가 사라지기 때문에 사람들이 많이 사용합니다. 열기 연산은 노이즈를 제거하는 용도로 많이 이용합니다. ▶ 이진 영상의 닫기(closing) 연산 닫기 연산은 팽창을 적용하고 침식을 적용하는 기법입니다. 작은 홈, 작은 홀들이 사라지고, 얇은 연결선이 두꺼워 집니다. 이진 영상 닫기 적용 → 범용 모폴로지 연산 함수 - cv2.morphologyEx 범용 모폴로지 연산 함수는 침식과 팽창, 열기와 닫기 그 외에도..