분류 전체보기 428

[66] 4) 평균 이동 알고리즘

Detection vs Recognition vs Tracking 평균 이동 (Mean shift) 알고리즘 이란? A non-parametric feature-space analysis technique for locationg the maxima of a density function 국지적 평균을 탐색하면서 이동 모드 검출(mode seeking) 알고리즘 평균 이동 알고리즘을 이용한 관심 영역 추적 평균 이동 알고리즘을 이용한 트래킹 cv2.meanShift(probImage,window,criteria) -> retval,window • probImage : 관심 객체에 대한 히스토그램 역투영 영상 (확률 영상) • window: 초기 검색 영역 윈도우 & 결과 영역 반환 • criteria: ..

[65] 3) 배경 차분 : MOG 배경 모델

MOG 란? Minture of Gaussian, GMM(Gaussian Mixture Mode) 각 픽셀에 대해 MOG 확률 모델을 설정하여 배경과 전경을 구분 다양한 배경 모델 구성 방법 OpenCV 에서 제공하는 배경 추정 알고리즘 BackgroundSubtractorMOG2 클래스 생성 함수 cv2.createBackgroundSubtractorMOG2(history=None, varThreshold=None, detectShadows=None) -> dst • history: 히스토리 길이 . 기본값은 500. • varThreshold : 픽셀과 모델 사이의 마할라노비스 거리 (Mahalanobis distance) 제곱에 대한 임계값 . 해당 픽셀이 배경 모델에 의해 잘 표현되는 지를 판단 ..

[64] 2) 배경 차분: 이동 평균 배경

정적 배경 모델 사용 시 문제점 미리 등록된 기준 영상이 실제 배경과 크게 달라질 경우 오동작 ex) 그림자 등의 영향으로 인한 조도 변경, 새로운 객체가 화면에 고정될 경우 평균 연산에 의한 배경 영상 생성 움직이는 객체가 존재하는 수백 장의 입력 영상으로부터 평균 영상을 구하면? --> 수백 장의 이전 프레임을 버퍼에 저장하려면 대용량 메모리가 필요하다 이동 평균(Moving average)이란? 수백 장의 영상을 저장하는 대신 매 프렝미이 들어올 때마다 평균 영상을 갱신 대용량 버퍼 메모리가 필요하지 않다 이동 평균 계산을 위한 가중치 누적 함수 cv2.accumulateWeighted(src,dst,alpha,mask=None) -> dst • src: 입력 영상. 1 또는 3채널. 8비트 또는 ..

[63] 10.객체 추적과 모션 벡터 1) 배경 차분: 정적 배경 차분

배경 차분(Background Subtraction:BS) 등록된 배경 모델과 현재 입력 프레임과의 차영상을 이용하여 전경 객체를 검출 움직이는 전경 객체 검출을 위한 기본적인 방법 정적 배경을 이용한 전경 객체 검출 처음 프레임을 배경으로 설정하고 이후 들어오는 영상과의 차이를 비교하는 방법은 그렇게 까지 좋은방식은 아니다. 이 방식은 조명의 변화, 예를 들어서 그림자가 지거나 해의 밝이에 따라 민감하게 반응하고 자동차가 새롭게 들어와서 주차를 했는데도 계속 검출이 되기 때문에 배경모델을 점진적으로 업데이트를 해서 조금 더 적응하는 형태로 동작시키는 방법이 더 좋다 import sys import numpy as np import cv2 # 비디오 파일 열기 cap = cv2.VideoCapture('..

[62] (실습) AR 비디오 플레이어

AR 비디오 플레이어 카메라 프레임이 특정 영상이 나타나면 해당 위치에 동영상을 재생하는 기능 구현할 기능 기준 영상과 카메라 프레임 사이의 특징점 검출 및 매칭 호모그래피 계산 동영상 프레임 투시 변환 & 합성 구현 방법 import sys import numpy as np import cv2 # 기준 영상 불러오기 src = cv2.imread('box.png', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load failed!') sys.exit() # 카메라 장치 열기 cap1 = cv2.VideoCapture(0) if not cap1.isOpened(): print('Camera open failed!') sys.exit() # 필요할 경우 카메..

[61] 7) 이미지 스티칭

이미지 스티칭(Image Stitching) 이란? 동일 장면의 사진을 자연스럽게 붙여서 한 장의 사진으로 만드는 기술 사진 이어 붙이기, 파노라마 영상 이미지 스티칭 객체 생성 cv2.Stitcher_create(mode=None) -> retval • mode: 스티칭 모드 . cv2.PANORAMA 또는 cv2.SCANS 중 하나 선택. 기본값은 cv2.PANORMA • retval: cv2.Stitcher 클래스 객체 이미지 스티칭 함수 cv2.Stitcher.stitch(images,pano=None) -> retval,pano • images: 입력 영상 리스트 • retval: 성공하면 cv2.Stitcher_OK. • pano: 파노라마 영상 이미지 스티칭 예제 import sys impo..

[60] 6) 호모그래피와 영상 매칭

호모그래피(Homography)란? 두 평면 사이의 투시 변환(Perspective transform) 8DOF: 최소 4개의 대응점 좌표가 필요 호모그래피 계산 함수 호모그래피를 이용한 영상 매칭 예제 import sys import numpy as np import cv2 # 영상 불러오기 #src1 = cv2.imread('graf1.png', cv2.IMREAD_GRAYSCALE) #src2 = cv2.imread('graf3.png', cv2.IMREAD_GRAYSCALE) src1 = cv2.imread('box.png',cv2.IMREAD_GRAYSCALE) src2 = cv2.imread('box_in_scene.png',cv2.IMREAD_GRAYSCALE) if src1 is None ..

[59] 5) 좋은 매칭 선별

좋은 매칭 선별 방법 #1 가장 좋은 매칭 결과에서 distance 값이 작은 것 N개를 사용 cv2.DMatch.distance 값을 기준으로 정렬 후 상위 N개를 선택 import sys import numpy as np import cv2 # 영상 불러오기 src1 = cv2.imread('graf1.png', cv2.IMREAD_GRAYSCALE) src2 = cv2.imread('graf3.png', cv2.IMREAD_GRAYSCALE) if src1 is None or src2 is None: print('Image load failed!') sys.exit() # 특징점 알고리즘 객체 생성 (KAZE, AKAZE, ORB 등) #feature = cv2.KAZE_create() #featu..

[58] 4) 특징점 매칭

특징점 매칭 (feature point matching) 두 영상에서 추출한 특징점 기술자를 비교하여 서로 유사한 기술자를 찾는 작업 특징 벡터 유사도 측정 방법 실수 특징 벡터: (L2 norm) 사용 이진 특징 벡터: (hamming distance) 사용 OpenCV 특징점 매칭 클래스 특징점 매칭 알고리즘 객체 생성 cv2.BFMatcher_create(normType=None,crossCheck=None) -> retval 특징점 검출 알고리즘 객체 생성 cv2.DescriptorMatcher.match(queryDescriptors,trainDescriptors,mask=None) -> matches • queryDescriptors (기준 영상 특징점) 질의 기술자 행렬 • trainDesc..