devskim blog
Search
🚉

특징점 검출

sections
Tags
C++
OpenCV
Created
May 1, 2023 07:00 AM
Last Updated
Jul 30, 2023 09:49 AM
 
 

크기 불변 특징

  • 영상의 크기가 바뀌더라도 반복적으로 검출될 수 있는 특징점
  • 용어
    • 특징점(feature point) = 키포인트(keypoint) = 관심점(interest point)
    • 기술자(descriptor) = 특징 벡터(feature vector)
      • 각각의 특징점 근방의 부분 영상을 표현하는 실수 또는 이진 벡터
      • Mat 객체로 표현하는데, 행의 개수는 특징점 개수, 열 개수는 특징점 기술자 알고리즘에 의해 결정됨
      • 종류
        • 실수 기술자
          • 주로 특징점 부근 부분 영상의 방향 히스토그램 사용
          • SIFT, SURF, KAZE 등이 사용하며, L2 norm을 사용하여 유사도 판단
        • 이진 기술자
          • 이진 테스트를 이용하여 부분 영상의 특징을 기술
          • AKAZE, ORB 등이 사용하며, Hamming distance를 사용하여 유사도 판단
  • 알고리즘 SIFT, SURF, KAZE, AKAZE, ORB 등
 
 

SIFT

  • Scale Invariant Feature Transform
  • 계산 단계
    • Detector
        1. Scale-space extreme dectection
            • Gaussian, Subsampling, DOG(Difference of Gaussian)
        1. 키포인트 찾기(Keypoint locallization)
            • DOG 영상의 모든 점에서 local maxima 또는 local minima 선택
            • 동일한 스케일 DOG 영상에서 주변 8개 점과 상/하 스케일 DOG 영상에서 18개 점, 총 26개 점을 비교하여 지역 최솟값 또는 지역 최댓값 선택
    • Descriptor 서브픽셀 정확도, 낮은 대비 극점 제거, 에지 성분 제거
        1. Orientation assignment
            • 방향 불변 특성을 위한 주방향 성분 추출
              • 키포인트 근방의 부분 영상을 추출
              • 부분 영상의 모든 픽셀에서 그레디언트 크기와 방향을 계산 → 히스토그램 생성
              • 히스토램 최댓값 방향과 최댓값의 80% 이상 크기를 갖는 빈 방향을 키포인트 바ㅇ향으로 설정
        1. 키포인트 기술자(Keypoint description)
            • 각 키포인트 위치에서 스케일과 기준 방향을 고려하여 사각형 영역 선택
            • 사각형 영역을 4x4 구역으로 분할하고, 각 구역에서 8방향의 방향 성분 히스토그램을 구함 (4x4x8 = 128)
  • 예시 이미지
    • notion image
 

KAZE

  • 비선형 스케일 스페이스에서 공기의 흐름
  • 가우시안 함수 대신 비선형 확산 필터를 이용하여 특징점 검출
  • 예시 이미지
    • notion image
 

ORB

  • FAST 방법으로 키포인트를 찾고 Harris 코너 방식으로 순위를 매김
  • 키포인트의 방향 성분을 이용하여 BRIEF 방법에서 픽셀 쌍의 좌표를 회전하여 특징 벡터 추출
  • 가장 빠르다
  • 예시 이미지
    • notion image
 

AKAZE

  • KAZE 알고리즘의 속도 향상 버전
  • 비선형 공간에서 피라미드 구축
  • SIFT와 ORB의 중간 정도 성능과 속도를 보임
  • 예시 이미지
    • notion image
 
 

OpenCV의 특징점 클래스

  • Feature2D 클래스
    • SIFT
    • SURF (라이센스 정책)
    • KAZE
    • AKAZE
    • ORB
    • FastFeatureDetector (Descriptor만 제공)
    • 메소드
      • detect 특징점 검출 함수
      • drawKeypoints 검출된 특징점 그리기 함수
        • notion image
          notion image
      • compute 기술자(특징 벡터) 계산
      • detectAndCompute 특징점 검출 및 기술자(특징 벡터) 계산
  • Keypoint 클래스
 
 

특징점 매칭

  • 두 영상에서 추출한 특징점 기술자를 비교하여 유사한 기술자끼리 선택하는 작업
  • 유사도 측정 방법
    • 실수 특징 벡터 → L2 norm
    • 이진 특징 벡터 → hamming distance
  • OpenCV 매칭 클래스
    • DescriptorMatcher
      • 서브 클래스
        • BFMatcher 브루스포스트 전수 조사
        • FlannBasedMatcher K-D Tree 사용
      • 메소드
        • match
        • knnMatch
    • DMatch
      • drawMatches 특징점 매칭 결과 영상 생성 함수
        • notion image
 
 

좋은 매칭 선별 방법

  • DMatch::distance 값이 작은 것 N개 사용
    • notion image
  • knnMatch() 함수를 사용하여 두개의 매칭 결과을 확인하여 distance 값의 비율이 낮은 것 선택
    • notion image
 
 
 

호모그래피

  • 두 평면 사이의 투시 변환
  • 8DOF : 최소 4개의 대응점 좌표 필요
  • findHomegraphy 호모그래피 행렬 구하기
    • method > RANSAC
  • RANSAC
    • 이상치가 많은 원본 데이터로부터 모델 파라미터를 예측하는 방법
    • 방법
        1. 임의의 두 점을 찾아 직선을 그린다
        1. 나머지 점들과 직선 사이의 거리를 계산한다
        1. 에러가 허용 오차 안쪽에 있는 점들의 개수를 구한다
        1. 다른 두 점을 다시 임의로 선택하여 과정을 반복한다
  • 예시 이미지
    • notion image
 
 
 
 
 
 
NEXT템플릿 매칭