OpenCV 특징점 검출과 기술

강형우·2022년 12월 12일
0

OpenCV

목록 보기
17/17

OpenCV 특징점 클래스

OpenCV 특징점 클래스

  • Feature2D 클래스와 파생 클래스
  • 특징점 표현을 위한 KeyPoint클래스
  • 특징점 클래스 객체 생성 함수
    • Feature2D 상속 클래스들은 모두 create()라는 이름의 정적 멤버 함수를 제공
    • 각각의 create() 함수는 다수의 인자를 가지지만, 디폴트 인자가 정의되어있음
    • Ptr은 OpenCV에서 구현한 스마트 포인터 클래스

특징점 검출 방법

특징점 검출 방법

  • 영상에서 특징점 검출 함수
    virtual void Feature2D::detect(InputArray image, std::vector<KeyPoint>& keypoints, InputArray mask = noArray());
    • image: 입력 영상
    • keypoints: (출력) 검출된 특징점 정보. vector<KeyPoint>자료형
    • mask: 마스크 영상
  • 검출된 특징점 그리기 함수

특징점 기술자 구하기

특징점 기술자 구하기

  • 기술자(descriptor, feature vector)

    • 각각의 특징점 근방의 부분 영상을 표현하는 실수 또는 이진 벡터
    • OpenCV에서는 Mat 객체로 표현
      • 행 개수: 특징점 개수
      • 열 개수: 특징점 기술자 알고리즘에 의해 정의됨
  • 실수 기술자

    • 주로 특징점 부근 부분 영상의 방향 히스토그램을 사용
    • 보통 float 자료형을 사용하여 실수 정보를 저장하는 방식
    • 실수 기술자를 사용하는 알고리즘:SIFT, SURF, KAZE 등
    • 실수 기술자는 보통 L2노름(L2 norm)을 사용하여 유사도를 판단
  • 이진 기술자(binary descriptor)

    • 이진 테스트(binary test)를 이용하여 부분 영상의 특징을 기술

    • 보통 uchar 자료형을 사용하여 비트 단위로 영상 특징 정보를 저장

    • 이진 기술자를 사용하는 알고리즘: AKAZE, ORB, BRIEF

    • 이진 기술자는 해밍 거리(Hamming distance)를 사용하여 유사도를 판단

      • e.g) d1 = 1011101, d2 = 1001001 인 경우 해밍거리는 2
  • 특징점에서 기술자(특징 벡터) 계산

    virtual void Feature2D::compute(InputArray image, std::vector<KeyPoint>& keypoints, OutputArrays descriptors);
    • image:(입력) 입력 영상
    • keypoints:(입력) 검출된 특징점 정보. vector<KeyPoint>자료형
    • descriptors:(출력) 특징점 기술자 행렬. Mat자료형
  • 특징점 검출 및 기술자(특징 벡터) 계산

특징점 기술자 구하기

  • OpenCV 주요 특징점 알고리즘과 기술자 특성
    • 속도가 중요하다: ORB
    • 속도와 성능이 다 중요하다: AKAZE
    • 성능이 중요하다: SIFT

특징점 알고리즘 성능 비교

특징점 알고리즘 성능 비교

  • 특징점 검출 알고리즘 성능 비교
    • 연산 시간 비교
    • SIFT, AKZAE, ORB만 사용
  • 특징점 검출 알고리즘 성능 비교

0개의 댓글