2022.06.21 금일은 특징점 검출과 매칭 특징점기술에 관한 강의였다.
기술자
- 특징점 근방의 부분 영상을 표현하는 실수 또는 이진 벡터
- OpenCV에서는 2차원 행렬 ( numpy.ndarray ) 로 표현
행 개수 : 특징점 개수 / 열 개수 : 특징점 기술사 알고리즘에 의해 정의됨
실수 기술자 : numpy.float32 / 이진 기술자 : numpy.int8
- 한열당 float32고 따라서 4byte 짜리 실수값이라고 볼 수 있다.
그러면 총 64열이기 때문에 특징점 하나에 256 Byte 가 사용됨
실수 기술자
- 주로 특징점 부근 부분 영상의 방향 히스토그램을 사용
- SIFT 방법을 그림으로 표현한 것인데 , 노란색의 주된 방향성분을 고려해서 사각형을 기술하고
사각형을 4개씩 분할하여 16개의 부분영상에 대해서 각각의 작은 부분영상에서 방향성분을 기술한다.
여기서 45도 방향씩 끊어서 총 8개의 방향으로 방향성분을 기술하는데 기술할때 화살표 길이등을 float 로 표현한다.
그럼 8개의 방향성분이 나오게되고 16개의 부분영상이 있기때문에 총 128개로 기술된다.
그래서 SIFT는 점 하나에 대해서 128개의 float 타입으로 기술한다.
그럼 float 가 4byte 이기 때문에 128 * 4 를 하면 512byte 를 점 하나가 사용하는 격이다.
* 물론 위 내용은 알고리즘마다 차이가 있다.
KAZE 는 64차원 , 256Bytes 사용
SIFT는 128차원 , 512Bytes 사용
- 보통 numpy.float32 자료형을 사용하여 실수 정보를 저장하는 방식
- 실수 기술자를 사용하는 알고리즘 : SIFT, SURF, KAZE 등
- 실수 기술자는 보통 L2 노름 ( L2 norm ) ( 거리계산 공식 ) 을 사용하여 유사도를 판단
이진 기술자 ( Binary descriptor )
- 이진 테스트 ( Binary test ) 를 이용하여 부분 영상의 특징을 기술
특징 점이 중간 별 위치라고 생각할 경우에 특징점 주변을 잘라 부분영상을 추출한다.그럼 부분영상안에서 미리 정의해놓은 부분 몇군데를 골라 놓고 예를들어
1번점과 2번점 비교해서 1번점이 더 밝으면 1이라고 보고
2번점과 3번점 비교해서 2번점이 더 어두우면 0이라고 보고
3번점과 1번점 비교해서 3번점이 더 어두우면 0이라고 봐서1,0,0 의 값을 가지는 결과를 얻는다.
예를들어 설명하긴했지만 다시 대략 설명하자면 밝기차를 이진수로 표현하기 때문에 이진 기술자라고 하고있다.
- 보통 numpy.uint8 자료형을 사용하여 비트 단위로 영상 특징 정보를 저장하는 방식
- 이진 기술자를 사용하는 알고리즘 : AKAZE, ORB, BRIEF 등
- 이진 기술자는 해밍 거리 ( Hamming distance ) 를 사용하여 유사도를 판단
* 해밍 거리 : 두개의 이진수 ( 특징벡터 ) 를 나열해서 이진수 중에서 비트가 서로 다른것들이
몇개 있는지 카운팅
특징점 기술자 계산 함수
cv2.Feature2D.compute ( image, keypoints, descriptors = None ) -> keypoints, descripotrs
image : 입력 영상
keypoints : 검출된 특징점 정보. cv2.KeyPoint 객체의 리스트
descriptors : 특징점 기술자 행렬
특징점 검출 및 기술자 계산 함수
cv2.Feature2D.detectAndCompute ( image, mask=None, descripors = None )
image : 입력 영상
mask : 마스크 영상
keypoints : 검출된 특징점 정보. cv2.KeyPoint 객체의 리스트
descriptors : 특징점 기술자 행렬
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'Program > OPEN_CV' 카테고리의 다른 글
[Open CV] 특징점 검출과 매칭 _ 좋은 매칭 선별 (0) | 2022.06.22 |
---|---|
[Open CV] 특징점 검출과 매칭 _ 특징점 매칭 (0) | 2022.06.22 |
[Open CV] 특징점 검출과 매칭 _ 특징점 검출 (0) | 2022.06.20 |
[Open CV] 특징점 검출과 매칭 _ 코너 검출 (0) | 2022.06.19 |
[Open CV] 영상 분할과 객체 검출 _ 실전코딩 ( 스노우앱 ) (0) | 2022.06.18 |