Program/OPEN_CV

[Open CV] 특징점 검출과 매칭 _ 특징점 기술

사막여유 2022. 6. 21. 21:00
728x90

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 : 특징점 기술자 행렬


 

 

 

 

 

 

 

 

 

 

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

728x90