-
특징점 기술컴퓨터 비젼(Computer Vision)/특징점 검출과 매칭 2022. 2. 22. 11:37
기술자(descriptor, feature vector)
- 특징점 근방의 부분 영상을 표현하는 실수 또는 이진 벡터
- OpenCV에서는 2차원 행렬(np.ndarray)로 표현
- 행 개수: 특징점 개수
- 열 개수: 특징점 기술자 알고리즘에 의해 정의됨
실수 기술자
주로 특징점 부근 부분 영상의 방향 히스토그램을 사용
- 특징점 근방 부분 영상의 주 방향 성분을 계산하여 보정
- 보정된 사각형 영역을 4x4구역으로 분할 -> 각 구역에서 8방향 히스토그램을 구함
- 16x8 = 128 차원의 실수 벡터 생성 (알고리즘 마다 다름)
- SIFT, SURF, KAZE 등이 있음
- L2 Norm을 사용하여 유사도 판단
이진 기술자
- 이진 테스트(binary test)를 이용하여 부분 영상의 특징을 기술
- 특징점주변 부분 영상을 잘라내어 미리 정의한 점을 이용해 밝기 비교를 통해 계산
- 위 예시에서
- 1번과 2번 중 1번이 더 밝으므로 1
- 2번과 3번 중 3번이 더 밝으므로 0
- 1번과 3번 중 1번이 더 밝으므로 1
- 위 비트를 취합하여 101 (3비트) 자료를 생성하여 이진 테스트를 통해 부분 영상의 특징을 기술
- 보통 np.uint8 자료형을 사용하여 비트 단위로 영상 특징 정보를 저장
- 이진 기술자를 사용하는 알고리즘은 AKAZE, ORB, BRIEF 등이 있다.
- Hamming distance를 사용하여 유사도를 판단
특징점 기술자 계산 함수
cv2.Feature2D.Compute(image, keypoints, descriptor=None) -> keypoints, descriptors
- image: 입력 영상
- keypoints: 검출된 특징점 정보. cv2.KeyPoint 객체 리스트
- descriptors: 특징점 기술자 행렬
특징점 검출 및 기술자 계산 함수
cv2.Feature2D.detectAndCompute(image, mask=None, descriptor=None) -> keypoints, descriptors
- image: 입력 영상
- mask: 마스크 영상
- keypoints: 검출된 특징점 정보. cv2.KeyPoint 객체 리스트
- descriptors: 특징점 기술자 행렬
OpenCV 주요 특징점 알고리즘과 기술자 특성
특징점 알고리즘 기술자 차원 데이터 타입 이진 기술자 Extra Moduel 비고 SIFT 128 np.float32 X O 특허 만료 SURF 64 np.float32 X O 특허 KAZE 64 np.float32 X X AKAZE 61 np.uint8 O X ORB 32 np.uint8 O X 가장 빠름 BRISK 64 np.uint8 O X 특징점 검출 알고리즘 성능 비교
연산 시간 비용
위 기술된 알고리즘중 ORB(1000)의 경우가 가장 나은 성능을 보여준다. 내부적으로 FAST 알고리즘을 통해 개발되서 그렇다.
반복 검출율
특징점 검출 알고리즘 성능 비교
참고
https://docs.opencv.org/4.3.0/db/d27/tutorial_py_table_of_contents_feature2d.html
'컴퓨터 비젼(Computer Vision) > 특징점 검출과 매칭' 카테고리의 다른 글
좋은 매칭 선별 (0) 2022.02.22 특징점 매칭 (0) 2022.02.22 특징점 검출 (0) 2022.02.21 코너 검출 (0) 2022.02.21