-
특징점 검출컴퓨터 비젼(Computer Vision)/특징점 검출과 매칭 2022. 2. 21. 18:09
코너 검출 방법의 문제점
- 이동, 회전 변환에 강인
- 크기 변화에 취약
용어
특징점(feature point) = 키포인트(keypoint) = 관심점(interest point)
기술자(descriptor) = 특징 벡터(feature vector)
크기 불변 특징점 검출 방법
SIFT, KAZE, AKAZE, ORB 등 다양한 특징점 검출 방법에서 스케일 스페이스 (scale-space), 이미지 피라미드 (image pyramid)를 구성하여 크기 불변 특징점을 검출
OpenCV 특징점 검출 클래스
특징점 검출 알고리즘 객체 생성
cv2.SIFT_create(, ...) -> retval cv2.KAZE_create(, ...) -> retval cv2.AKAZE_create(, ...) -> retval cv2.ORB_create(, ...) -> retval ...
- retval: 각 특징점 검출 알고리즘 객체
- 각각의 알고리즘은 고유한 파라미터를 인자로 받을 수 있음
- 대부분 인자는 기본값을 가지고 있으므로 함수 인자 없이 호출 가능
특징점 검출 알고리즘
cv2.Feature2D.detect(image, mask=None) -> keypoints
- image: 입력 영상
- mask: 마스크 영상
- keypoints: 검출된 특징점 정보. cv2.KeyPoint 객체 리스트
검출된 특징점 그리기 함수
cv2.drawKeypoints(image, keypoints, outImage, color=None, flags=None) -> outImage
- image: 입력 영상
- keypoints: 검출된 특징점 정보. cv2.KeyPoint 객체의 리스트
- outImage: 출력 영상
- color: 특징점 표현 색상. 기본값은 (-1, -1, -1, -1)이며, 랜덤 색상을 표현
- flags: 특징점 표현 방법
- cv2.DRAW_MATCHES_FLAGS_DEFAULT: 특징점 위치만을 표현하는 작은 크기의 원
- cv2.DRAW_MATCHES_FLAGS_DRAW_RIGH_KEYPOINTS: 특징점의 크기와 방향을 반영한 원
예시
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() feature1 = cv2.KAZE_create() feature2 = cv2.AKAZE_create() feature3 = cv2.ORB_create() kp1_1 = feature1.detect(src1) kp1_2 = feature1.detect(src2) kp2_1 = feature2.detect(src1) kp2_2 = feature2.detect(src2) kp3_1 = feature3.detect(src1) kp3_2 = feature3.detect(src2) print('# of kp1_1:', len(kp1_1)) print('# of kp1_2:', len(kp1_2)) print('# of kp2_1:', len(kp2_1)) print('# of kp2_2:', len(kp2_2)) print('# of kp3_1:', len(kp3_1)) print('# of kp3_2:', len(kp3_2)) dst1_1 = cv2.drawKeypoints(src1, kp1_1, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) dst1_2 = cv2.drawKeypoints(src1, kp1_2, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) dst2_1 = cv2.drawKeypoints(src1, kp2_1, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) dst2_2 = cv2.drawKeypoints(src1, kp2_2, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) dst3_1 = cv2.drawKeypoints(src1, kp3_1, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) dst3_2 = cv2.drawKeypoints(src1, kp3_2, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow('dst1_1', dst1_1) cv2.imshow('dst1_2', dst1_2) cv2.imshow('dst2_1', dst2_1) cv2.imshow('dst2_2', dst2_2) cv2.imshow('dst3_1', dst3_1) cv2.imshow('dst3_2', dst3_2) cv2.waitKey() cv2.destroyAllWindows()
# of kp1_1: 3159 # of kp1_2: 3625 # of kp2_1: 2418 # of kp2_2: 2884 # of kp3_1: 500 # of kp3_2: 500
KAZE
AKAZE
ORB
이미지 출처
https://docs.opencv.org/4.x/db/d70/tutorial_akaze_matching.html
'컴퓨터 비젼(Computer Vision) > 특징점 검출과 매칭' 카테고리의 다른 글
좋은 매칭 선별 (0) 2022.02.22 특징점 매칭 (0) 2022.02.22 특징점 기술 (0) 2022.02.22 코너 검출 (0) 2022.02.21