Computer Vision/opencv(python) 70

[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..

[57] 3) 특징점 기술자

기술자(Descriptor, feature vector) 특징점 근방의 부분 영상을 표현하는 실수 또는 이진 벡터 OpenCV에서는 2차원 행렬(numpy.ndarray)로 표현 행 개수: 특징점 개수 열 개수: 특징점 기술자 알고리즘에 의해 정의됨 실수 기술자: numpy.float32 이진 기술자: numpy.uint8 실수 기술자 주로 특징점 부근 부분 영상의 방향 히스토그램을 사용 이진 기술자(Binary descriptor) 이진 테스트(Binary test)를 이용하여 부분 영상의 특징을 기술 특징점 기술자 계산 함수 cv2.Feature2D.compute(image,keypoints,descriptor=None) -> keypoints,descriptors • image: 입력 영상 • ke..

[56] 2) 특징점 검출

Harris, GFTT, FAST 코너의 문제점 이동, 회전 변환에 강인 크기 변환에 취약 크기 불변 특징점 검출 방법 SIFT,KAZE,AKAZE,ORB등 다양한 특징점 검출 방법에서 스케일 스페이스(scale-space),이미지 피라미드를 구성하여 크기 불변 특징점을 검출 OpenCV 특징점 검출 클래스: Feature 2D 클래스와 파생 클래스 특징점 검출 알고리즘 객체 생성 cv2.KAZE_create(...) -> retval cv2.AKAZE_create(...) -> retval cv2.ORB_create(...) -> retval cv2.xfeatures2d.SIFT_create(...) -> retval • retval: 각 특징점 검출 알고리즘 객체 • 참고사항 1. 각각의 알고리즘은 ..

[55] 9.특징점 검출과 매칭 1) 코너 검출

코너의 특징 평탄한 영역(flat) & 에지(edge) 영역은 고유한 위치를 찾기 어려움 코너(corner)는 변별력이 높은 편이며, 영상의 이동, 회전 변환에 강인함 다양한 코너 검출 방법 해리스 코너 응답 함수 계산 cv2.cornerHarris(src,blockSize,ksize,k,dst=None,borderType=None) -> dst • src: 입력 단일채널 8 비트 또는 실수형 영상 • blockSize : 코너 응답 함수 계산에서 고려할 이웃 픽셀 크기 . 보통 2~5. • ksize : ( 미분을 위한 ) 소벨 연산자를 위한 커널 크기 . 보통 3. • k: 해리스 코너 검출 상수 보통 0.04~0.06) • dst : 해리스 코너 응답 계수 . src 와 같은 크기의 행렬 (nump..

[54] 7) 간단 스노우앱

구현할 기능 카메라 입력 영상에서 얼굴 & 눈 검출하기 눈 위치와 맞게 투명한 PNG파일 합성하기 합성된 결과를 동영상으로 저장하기 얼굴 & 눈 검출 눈 위치와 맞게 투명한 PNG파일 합성하기 import sys import numpy as np import cv2 # 3채널 img 영상에 4채널 item 영상을 pos 위치에 합성 def overlay(img,glasses,pos): # 실제 합성을 수행할 부분 영상 좌표 계산 sx=pos[0] ex=pos[0] + glasses.shape[1] sy=pos[1] ey=pos[1] + glasses.shape[0] # 합성할 영역이 입력 영상 크기를 벗어나면 무시 얼굴을 너무 가까이 가져가면 안됨 if syimg.shape[0]: return # 부분 ..

[53] 6) HOG 보행자 검출

HOG(Histogram of Oriented Gradients) 란? 영상의 지역적 그래디언트 방향 정보를 특징 벡터로 사용 2005년 CVPR학회에서 보행자 검출 방법으로 소개되어 널리 사용되기 시작함 이후 다양한 객체 인식에서 활용됨 HOG 멀티스케일 객체 검출 함수 cv2.HOGDescriptor.detectMultiScale(img , hitThreshold=None , winStride=None, padding=None, scale=None, finalThreshold=None,useMeanshiftGrouping=None)--> foundLocations , foundWeights • img : 입력 영상 . cv2.CV_8UC1 또는 cv2.CV_8UC3. • hitThreshold: 특징..

[52] 5)캐스케이드 분류기: 얼굴 검출

Viola - Jones 얼굴 검출기 Positive영상 (얼굴 영상)과 negative 영상(얼굴 아닌 영상)을 훈련하여 빠르고 정확하게 얼굴 영역을 검 기존 방법과의 차별점 유사 하르(Haar-like) 특징을 사용 AdaBoost에 기반한 강한 분류 성능 캐스케이드(cascade) 방식을 통한 빠른 동작 속도 기존 얼굴 검출 방법보다 약 15배 빠르게 동작 유사 하르 특징 (Haar-like features) 사각형 형태의 필터 집합을 사용 흰색 사각형 영역 픽셀 갑스이 합에서 검정색 사각형 영역 픽셀 값을 뺀 결과 값을 추출 캐스케이드 분류기(Cascade classfier) 일반적인 영상에는 얼굴이 한 두개 있을 뿐, 나머지 영역은 대부분 non-face영역 Non-face 영역을 빠르게 ski..

[51] 4) 템플릿 매칭 (2): 인쇄체 숫자 인식

인식(Recognition) 이란? classifying a detected object into differernt categories 여러 개의 클래스 중에서 가장 유사한 클래스를 선택 숫자 템플릿 영상 생성 인쇄체 숫자 인식 방법 인쇄체 숫자 인식 예제 실행 결과 import sys import cv2 import numpy as np def load_digits(): img_digits=[] for i in range(10): filename='./digits/digit{}.bmp'.format(i) img_digits.append(cv2.imread(filename,cv2.IMREAD_GRAYSCALE)) if img_digits[i] is None: return None return img_d..