본문 바로가기

OpenCV

(14)
객체 추적(Object Tracking) - 광학 흐름(Optical Flow) 1. 배경 제거(Background Subtraction)■ 배경 제거는 영상에서 움직이는 객체(전경)를 파악하기 위해 객체를 포함하는 영상에서 객체가 없는 배경 영상을 빼는 방법이다. 그 결과로 다음 그림과 같이 전경 마스크를 생성할 수 있다.■ OpenCV에서는 배경 제거를 구현하는 객체 생성 함수 fgbg = cv2.bgsegm.createBackgroundSubtractorMOG(history, nmixtures, backgroundRatio, noiseSigma)를 제공한다. - history는 배경 이미지를 학습하기 위해 사용하는 프레임의 개수- nmixtures는 가우시안 믹스처의 개수, 디폴트는 5이다.- backgroundRatio는 배경이라고 간주할 비율- noiseSigma는 노이즈 ..
매칭(Matching) (2) 1. 키 포인트와 특징점 검출기■ 특징점을 검출하는 알고리즘은 다음 그림과 같이 OpenCV에서 Feature2D 클래스를 상속받아 만들어지며, 다양한 종류가 있다. ■ 해리스 코너 검출과 시-토마시 검출 함수는 특징점의 좌표만 반환한다. GFTTDetector, FAST 등의 특징점 검출기 함수는 특징점의 좌표뿐만 아니라 특징점 방향, 특징점 반응 강도 등 다양한 특징점 정보를 함께 반환한다.■ 특징점 정보를 함께 반환하는 방법은 특징점 검출기 함수로 detector 인스턴스를 생성한 다음, detect 메서드로 이미지의 특징점을 검출하면 된다. keypoints = detector.detect(img, mask) - img는 입력 이미지- mask는 검출 제외 마스크, 마스크 행렬 원소가 0이 아닌 ..
매칭(Matching) (1) 1. 이미지 매칭1.1 평균 해시 매칭(Average Hash Matching) ■ 영상/이미지 매칭은 서로 다른 두 영상/이미지를 비교해서 같은 형태의 객체가 있는지 찾는 것을 말한다.■ 매칭 방법은 먼저, 이미지에서 객체를 찾기 위해 이미지의 의미 있는 특징들을 숫자로 변환한다. 이 숫자를 특징 벡터 혹은 특징 디스크립터라고 한다. ■ 그리고 이 특징 벡터를 이용해 두 영상/이미지의 유사도를 측정해서 얼마나 비슷한지 판단하다.■ 평균 해시 매칭은 가장 원시적인 매칭 방법으로, 여기서 해시는 이미지의 특징을 모은 데이터(특징 벡터)를 의미한다.■ 이 방법은 객체의 윤곽을 해시 테이블로 나타낸 다음, 이 해시 테이블을 이용해서 다른 이미지와 매칭을 하는 것이다.■ 그러므로 평균 해시 매칭을 수행하기 위해..
분할(segmentation) (2) 1. 허프 변환(hough transform)■ 허프 변환은 영상/이미지에서 모양을 찾는 방법으로 이미지의 형태를 찾거나 깨진 영역을 복원하는 데 사용된다. 특히. 컴퓨터 비전에서 직선 검출은 주로 허프 변환 기법을 사용한다.참고) https://opencv-python.readthedocs.io/en/latest/doc/25.imageHoughLineTransform/imageHoughLineTransform.html■ x, y 좌표 공간(2차원)에서 극좌표계 형식으로 직선의 방정식을 변환하는 이유는 y축과 평행한 수직선의 기울기는 무한대가 되어야 하는데, 직선의 방정식으로는 y축과 평행한 수직선을 표현할 수 없기 때문이다. ■ 극좌표계로 변환했을 때 로우는 원점에서 직선까지의 수직 거리, 세타는 원점..
분할(segmentation) (1) 1. 컨투어(contour) ■ 컨투어는 일반적으로 등고선을 의미하며, 등고선은 지형의 높이를 하나의 선으로 표시하여 지형의 형태를 쉽게 인식할 수 있도록 해준다.■ 이와 유사하게, 영상 처리에서는 객체의 외곽선(contour)을 정의하는데, 이는 객체 영역의 픽셀 중 배경과 인접한 일련의 최외곽 픽셀을 따라 그려진 선을 의미한다.■ 보통 배경은 검은색, 전경(객체 영역)은 흰색으로 구성된 바이너리 이미지에서 가장 외곽에 있는 픽셀들을 찾아 컨투어를 그리면 객체의 모양을 정확하게 인식할 수 있다.■ OpenCV에서는 컨투어 함수 cv2.findContours(src, mode, method, contours, hierarchy, offset)를 제공한다.- src는 입력, 바이너리 이미지- mode는 외..
모폴로지(Morphology) 연산, 이미지 피라미드(Image Pyramid) 1. 모폴로지 연산■ 모폴로지 연산은 노이즈 제거, 구멍 채우기, 끊어진 선 이어 붙이기 등에 사용되며 그레이스케일 영상과 바이너리(binary) 영상에 모두 적용 가능하다. ■ 주로 검은색과 흰색으로만 구성되어 있는 이진화된 영상에서 객체 모양을 변형하는 용도로 사용된다. ■ 모폴로지 연산으로 침식, 팽창, 열림, 닫힘 연산이 있다. 해당 연산들을 알기 위해서는 먼저 구조화 요소(structuring element)에 대해 알아야 한다.■ 구조화 요소는 마치 필터링에 사용되는 마스크처럼 사용되는 0과 1로 구성된 작은 크기의 행렬이다. ■ 구조화 요소는 1이 채워진 모양에 따라 다양한 모양(사각형, 타원형, 십자형 등)으로 정의할 수 있다.■ 구조화 요소 행렬에서 노란색으로 표시한 원소는 모폴로지 ..
필터와 블러링 1. 컨볼루션(Convolution) 과 필터(Filter)■ 영상 처리에서 인접 픽셀 값들을 참조하여 새로운 픽셀 값을 얻는 것을 공간 필터링(spacial filtering)이라 한다.  ■ 이 필터링은 컨볼루션 연산을 이용해 커널(필터)을 영상 전체에 적용함으로써 이루어진다. ■ 다음 그림은 3 x 3 필터를 사용한 컨볼루션 연산 예시이다. ■ OpenCV에서 cv2.filter2D(src, ddepth, kernel, dst, anchor, delta, borderType) 함수로 컨볼루션 연산을 수행할 수 있다. - src는 입력 영상/이미지 (배열) - ddepth는 결과 이미지의 깊이(비트 단위: 8, 16, 32 등), -1로 지정하면 입력과 동일한 깊이 사용 - kernel은 커널(필터)..
기하학적 변환 (2) https://hyeon-jae.tistory.com/119 기하학적 변환 (1)1. 이동(Translation)■ 기존 좌표를 \( x_{\text{old}}, y_{\text{old}} \)라고 했을 때, 이미지를 이동하는 방법은 기존 좌표에 이동시키려는 거리 \( d_1, d_2 \)를 더해주면 된다. \[ \begin{cases} x_{\text{new}} = x_{\hyeon-jae.tistory.com■ 이미지 이동, 확대/축소, 회전, 어핀 변환, 원근 변환은 모두 변환 행렬을 이용해서 이미지 변환을 수행할 수 있었다. ■ 하지만, 변환 행렬로 구할 수 없는 모양의 변환이 있는데, 바로 렌즈 왜곡 변환이다. ■ 렌즈 왜곡 변환에는 리매핑, 오목 렌즈/볼록 렌즈 왜곡, 방사 왜곡이 있다. 1...