- 기술자(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: 입력 영상
• keypoints: 검출된 특징점 정보 . cv2.KeyPoint 객체의 리스트
• descriptors: 특징점 기술자 행렬
- 특징점 검출 및 기술자 계산 함수
cv2.Feature2D.detectAndCompute(image,mask=None,descriptors=None) -> keypoints,descriptors
• image: 입력 영상
• mask: 마스크 영상
• keypoints: 검출된 특징점 정보 . cv2.KeyPoint 객체의 리스트
• descriptors: 특징점 기술자 행렬
- 특정점 기술자 계산 예제
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()
#feature = cv2.AKAZE_create()
#feature = cv2.ORB_create()
# 특징점 검출 및 기술자 계산
kp1=feature.detect(src1)
_,desc1=feature.compute(src1,kp1)
kp2,desc2=feature.detectAndCompute(src2,None)
print('decs1.shape:',desc1.shape)
print('decs1.dtype:',desc1.dtype)
print('decs2.shape:',desc2.shape)
print('decs2.dtype:',desc2.dtype)
# 검출된 특징점 출력 영상 생성
dst1=cv2.drawKeypoints(src1,kp1,None,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
dst2=cv2.drawKeypoints(src2,kp2,None,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('dst1',dst1)
cv2.imshow('dst2',dst2)
cv2.waitKey()
cv2.destroyAllWindows()
- OpenCV 주요 특징점 알고리즘과 기술자 특성
- 특징점 검출 알고리즘 성능 비교
- 연산시간 비교
'Computer Vision > opencv(python)' 카테고리의 다른 글
[59] 5) 좋은 매칭 선별 (0) | 2021.03.25 |
---|---|
[58] 4) 특징점 매칭 (0) | 2021.03.25 |
[56] 2) 특징점 검출 (0) | 2021.03.25 |
[55] 9.특징점 검출과 매칭 1) 코너 검출 (0) | 2021.03.25 |
[54] 7) 간단 스노우앱 (0) | 2021.03.24 |