반응형

Python/파이썬 OpenCV 공부 88

[파이썬 OpenCV] 특징점 매칭에서 좋은 매칭을 선별하는 두 가지 방법 - 정렬, 임계값 이용 - KAZE, AKAZE, ORB

이전 포스팅에서 특징점을 매칭하는 방법에 대해 공부해보았습니다. 하지만 결과값이 너무 복잡하여 매칭이 잘 되었는지 확인하는 것에 어려움이 있었습니다. 이번에는 좋은 매칭을 선별하는 두 가지 방법에 대해 공부해보겠습니다. [파이썬 OpenCV] 두 영상의 특징점 매칭과 매칭 결과 그리기 - cv2.BFMatcher_create, cv2.DescriptorMatcher, cv2. 두 영상에서 검출한 특징점을 서로 매칭하는 방법을 공부해보겠습니다. 특징점 매칭 - Feature point matching 특징점 매칭은 두 영상에서 추출한 특징점 기술자를 비교하여 서로 유사한 기술자를 � deep-learning-study.tistory.com 좋은 매칭 선별 좋은 매칭 선별 방법 두 가지를 알아보겠습니다. 1..

[파이썬 OpenCV] 두 영상의 특징점 매칭과 매칭 결과 그리기 - cv2.BFMatcher_create, cv2.DescriptorMatcher, cv2.drawMatches

두 영상에서 검출한 특징점을 서로 매칭하는 방법을 공부해보겠습니다. 특징점 매칭 - Feature point matching 특징점 매칭은 두 영상에서 추출한 특징점 기술자를 비교하여 서로 유사한 기술자를 찾는 작업입니다. 왼쪽은 4개의 기술자, 오른쪽은 3개의 기술자를 계산했습니다. 가장 비슷한 것을 찾으므로 4개의 점은 다 매칭이 될 것입니다. 위 그림에서 #3이 잘못 매칭된 것을 확인할 수 있는데 알고리즘은 가장 거리가 짧은 곳을 찾아서 매칭을 하기 때문에 매칭이 되었습니다. 이처럼 잘못 연결된 매칭을 걸러내는 작업을 해야합니다. [특징 벡터 유사도 측정 방법] (1) 실수 특징 벡터 : L2 노름(L2 norm) 사용 (2) 이진 특징 벡터 : 해밍 거리(hamming distance) 사용 1...

[파이썬 OpenCV] 영상의 특징점 기술과 KAZE, AKAZE, ORB 알고리즘 성능 비교 - cv2.Feature2D.compute

특징점 기술 OpenCV로 영상의 특징점을 기술하는 방법을 공부하기 전에 기술자 or 특징벡터에 대하여 먼저 공부하겠습니다. 1. 기술자 - Descriptor, Feature vector 기술자는 특징벡터라는 용어로 같이 이용되고 있습니다. 기술자는 검출된 특징점 근방의 부분 영상을 표현하는 실수 또는 이진 벡터를 의미합니다. 실수값으로 표현한 영상의 모양 혹은 색상 분포로 이해하면 됩니다. OpenCV에서는 2차원 행렬(numpy.ndarray)로 표현합니다. 행 개수는 특징점 개수, 열 개수는 특징점 기술자 알고리즘에 의해 다르게 정의됩니다. KAZE 특징점 검출 방법으로 3159개의 특징점을 검출했습니다. 이런 경우에 행은 3159개 열은 64개입니다. float32 이므로 하나 당 4바이트이고 ..

[파이썬 OpenCV] 영상의 특징점 검출과 특징점 그리기 - KAZE, AKAZE, ORB - cv2.Feature2D.detect, cv2.drawKeypoints

1. Harris, GFTT, FAST 코너 검출 방법의 문제점 이전 포스팅에서 공부했던 Harris, GFTT, FAST 코너 검출 방법은 이동, 회전 변화에 강인하지만 크기 변환에 취약하다는 단점이 있습니다. 확대된 영상에서 작은 사각형으로 코너를 찾으려하면 기존의 코너가 에지처럼 보이게 됩니다. 이 경우에 다양한 크기 관점에서 특징점을 검출하는 것이 필요합니다. 입력 영상을 줄이거나 박스를 키우거나 해야 합니다. 즉, 코너를 찾을 때 오리지널 사이즈만 보는것이 아니라 다양항 크기도 고려를 해서 코너 형태를 찾는 것이 고유한 특징을 찾는데에 적합합니다. 2. 특징점 검출 고유한 특징을 나타내는 점들을 집합한 것을 특징점(feature point) or 키포인트(keypoint) or 관심점(inter..

[파이썬 OpenCV] 영상의 코너 검출 - Harris, GFTT, FAST - cv2.FastFeatureDetector_create, cv2.goodFeaturesToTrack

1. 코너 검출 코너는 영상안에서 그림이 나타날 때 객체가 뾰족하게 튀어나온 부분입니다. 코너를 검출하는 이유는 코너점들이 영상에서 고유한 특징을 갖고 있어서 변별력 있게 잘 검출할 수 있는 특징입니다. 이와 반대로 평탄한 영역(flat)과 에지(edge) 영역은 고유한 위치를 찾기 어렵습니다. 평탄한 영역은 하늘에서 추출한 부분 영상입니다. 이 부분 영상이 원본 영상에서 어느 부분인지 명확하지 않습니다. 모호한 부분이 많아 변별력이 떨어지게 됩니다. 영상의 특징을 설명하는 데 적합하지 않습니다. 에지는 바다와 하늘이 만나는 부분입니다. 원본 영상에서 x좌표가 명확하게 어느 부분인지 정확하게 찾기가 어렵습니다. 따라서 고유성과 변별성이 떨어집니다. 코너는 원본 영상에서 코너 영상과 동일한 부분을 딱 한군..

[파이썬 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 인자를 어떻게 주냐에 따라 단순하게 ..

반응형