본문 바로가기
728x90

OpenCV/OpenCV-Chapter31

CH10 OpenCV-Python Optical flow 옵티컬플로우(Optical flow)란?- 광학 흐름 - 연속하는 두 프레임(영상)에서 카메라 or 객체의 움직임에 의해 나타나는 객체의 이동 정보 패턴 == Structure from Motion, Video Compression, Video Stabilization(손떨림 방지), etc 두 가지 사실을 가정 1. 연속된 프레임 사이에서 움직이는 물체의 픽셀 강도(intensity)는 변함이 없다. 2. 이웃하는 픽셀은 비슷한 움직임을 갖는다. 옵티컬플로우(Optical flow) 계산 함수 * 루카스-카나데 알고리즘(Lucas-Kanade algorithm) = 주로 Sparse(희소한) points에 대한 이동 벡터 계산 ==> 특정 픽셀에서 optical flow 벡터 계산 이웃하는 픽셀은 비슷.. 2021. 12. 25.
CH10 OpenCV-Python 추적(Mean Shift, Cam Shift) 추적(Tracking) 평균이동(Mean Shift) 알고리즘이란? - 데이터 분석 기법 중 하나 - 데이터가 밀집되있는 분포를 찾는 것 == 모드검출(mode seeking)이라고 불리기도 함 # 특정 색 추적 # 비디오 파일 열기 cap = cv2.VideoCapture('ch10\\videos\\camshift.avi') if not cap.isOpened(): print('Video open failed!') sys.exit() ret, frame = cap.read() # roi = cv2.selectROI('orange', frame) (x, y, w, h) = cv2.selectROI('orange', frame) # print(roi) x, y, w, h rc = (x, y, w, h) i.. 2021. 12. 25.
CH10 OpenCV-Python 배경차분(MOG) MOG(Mixture of Gauusian)란? - 각 픽셀에 대해 MOG 확률 모델을 설정하여 배경과 전경을 구분 - 하나의 데이터 분석 기법 영상의 각 Pixel 값을 배경영상을 등록시켜놓고 배경영상과 같냐 다르냐를 판단 = 현재 프레임에 그 객체가 새로 나타난거냐 아니냐를 판단 - 미리 정해둔 배경 영상의 Pixel 값은 이 위치에서 Pixel 값은 100이였다 정의하는 것이 아니라 100 금방에 어떤 Gaussian을 따르고 있다고 정의 ==> Gaussian 분포를 하나만 쓰는 것이 아니라 여러개 사용해서 어떤 위치의 특정 Pixel, 배경 Pixel값이 어느 Gaussian분포를 따르고 있다라는 모델 형태를 준다. ex) 흔들리는 나무가 있다할 때 나뭇잎은 배경일수도(하늘색) 나뭇잎일 수도(초.. 2021. 12. 25.
CH10 OpenCV-Python 객체 추적(이동 평균 배경) Mean shift 정적 배경 모델 사용 시 문제점 * 미리 등록된 기준 영상이 실제 배경과 크게 달라질 경우 오동작 - 도로에 차는 잠깐 있다가 없어짐 ==> 평균을 구한 영상과 현재 Frame의 차영상을 계산하면 현재 Frame에 있는 새로운 차들만 검출가능 == 이런 수백장의 영상을 저장한다는게 시스템쪽으로 무리가 생김(= 대용량 메모리가 필요) So, 이동평균 사용 이동 평균(Moving Average) = WeightSum - 수백 장의 영상을 저장하는 대신 매 프레임이 들어올 때마다 평균 영상을 갱신 - 갱신된 배경영상 = int가 아니라 미세하게 업데이트 되야하기 때문에 float 가중치 ∝ = 0 -> 현재프레임=0, 이전 배경영상을 계속 쓰니 의미가 없다(업데이트가 안됨) ∝ = 1 -> 현재프레임을 계속 .. 2021. 12. 25.
CH10 OpenCV-Python 객체 추적(배경차분) 배경차분(Background Subtraction: BS) == 정적배경(Static Background) 등록된 배경 모델과 현재 입력 프레임과의 차영상을 이용하여 전경 객체를 검출 움직이는 전경 객체 검출을 위한 기본적인 방법 Back Image(정적배경)을 등록하고 새로 들어온 Frame과 차영상을 통해서 새로운 객체 검출 Threshold를 사용해서 이진화 => 흰색 객체를 레이블링 기법(connect..stats)을 사용해서 크기와 위치를 판단 그리고 그 위치에서 boundingRect그려주면 간단한 침입자 감지 프로그램 만들 수 있다. But 이와같은 방법은 좋지 않다 why? 영상에서 새로운 객체를 계속 따라가지만 멈추었을 때도 계속 추적 1. 조명의 변화에 민감 2. 차가 새로 들어오고 멈.. 2021. 12. 25.
CH09 OpenCV-Python 스티칭 Stitching(PANORAMA) 이미지 스티칭(Image Stitching)이란? • 동일 장면의 사진을 자연스럽게(seamless) 붙여서 한 장의 사진으로 만드는 기술 • 사진 이어 붙이기, 파노라마 영상(Panorama image) - 기본적으로 SULF or ORB를 사용 But 단순히 이어붙이기만하면 밝기가 급격하게 바뀌는 부자연스러운 부분이 생긴다 ==> 밝기를 smooth하게 변화시키는 blending이 내부에서 적용됨 images = ['img1.jpg', 'img2.jpg', 'img3.jpg'] imgs= [] for name in images: img = cv2.imread(f'ch09\\images\\{name}') if img is None: print('Images load failed') sys.exit() .. 2021. 12. 25.
CH09 OpenCV-Python 호모그래피와 영상 매칭 호모그래피(Homography)란? • 두 평면 사이의 투시 변환(Perspective transform) • 8DOF : 최소 4개의 대응점 좌표가 필요 왜 호모그래피? Perspective Transform(투시 변환): 4개의 쌍(8 DOF)만 있으면 되는데 내가 줄수 있는 수식은 8개(DOF) 보다 더 많을 때 ==> 연결관계가 4개 이상 나오고 그 중에서 잘못된 매칭이 있을 수 있다라는 가정 ==> 이런 조건에서 Perspective 계산 어떻게? == 호모그래피 사용 src1 = cv2.imread('ch09\\images\\box.png', cv2.IMREAD_GRAYSCALE) src2 = cv2.imread('ch09\\images\\box_in_scene.png', cv2.IMREAD_.. 2021. 12. 25.
CH09 OpenCV-Python 특징점 매칭(feature point matching) 특징점 매칭 (feature point matching) • 두 영상에서 추출한 특징점 기술자를 비교하여 서로 유사한 기술자를 찾는 작업 특징 벡터 유사도 측정 방법 • 실수 특징 벡터: L2 노름(L2 norm) 사용 • 이진 특징 벡터: 해밍 거리(hamming distance) 사용 OpenCV 특징점 매칭 클래스 • BF: Brute-force (전수 조사) == 각 특징점 하나씩 다 매칭해보면서 가장 distance가 작은 것을 골라낸다 • Flann: Fast Library for Approximate Nearest Neighbor (K-D Tree 사용) == 너무 특징점이 많을 때 사용 ==> 완전히 최소값 매칭이 어려워(속도는 빠름) but 특징점이 몇천개 정도면 별차이 없음 ==> 영상.. 2021. 12. 25.
728x90