Feature Matching

FSA·2024년 8월 1일
0

vision

목록 보기
22/25
  • 특징 매칭이란 서로 다른 두 이미지에서 특징점과 특징 디스크립터들을 비교해서 비슷한 객체끼리 짝짓는 것

0. reference

1. 디스크립터를 이용한 특징 매칭

  • 디스크립터를 매칭하는 방법은 두가지가 있다.
  • BFMatcher는 모든 디스크립터를 전수 조사하므로 이미지 사이즈가 클 경우 속도가 굉장히 느립니다.
  • 이를 해결하기 위해 FLANN을 사용할 수 있습니다.
    • FLANN은 모든 디스크립터를 전수 조사하기 보다 이웃하는 디스크립터끼리 비교를 합니다.
    • 이웃하는 디스크립터를 찾기 위해, FLANN 알고리즘 함수에 인덱스 파라미터와 검색 파라미터를 전달해야 합니다.

1.1. cv2.BFMatcher

  • BruteForce방법으로 디스크립터를 하나씩 모두 검사하여 가장 가까운 디스크립터를 찾는다.

1.1.1. BFMatcher 생성

  • BFMatcher를 생성할때는 cv2.DescriptorBFMatcher_create(descriptorMatcherType)
  • descriptorMatcherType에 대한 설명

1.1.2. BFMatcher Match

  • 생성된 Matcher에 의해 Match방법을 선택할 수 있다.
  • 첫 번째 파라미터인 queryDescriptors를 기준으로, 두 번째 파라미터인 trainDescriptors에 맞는 매칭을 찾습니다.
  • cv2.DescriptorMatcher.match(): 가장 좋은 매칭 반환
  • cv2.DescriptorMatcher.knnmatch() : 사용자가 지정한 k개의 가장 좋은 매칭 반환

1.1.3. BFMatcher Match return

  • DMatch.distance: Discriptor간의 거리로써, 작을수록 더 좋은 결과
  • DMatch.trainIdx: 연습 기술자 리스트에 저장된 인덱스(img1에서 추출한 디스크립터)
  • DMatch.queryIdx: 조회 기술자 리스트에 저장된 인덱스(img2에서 추출한 디스크립터)
  • DMatch.imgIdx: 연습 이미지의 인덱스

1.2. cv2.FlannBasedMatcher

  • Flann(Fast library for Approximate Nearest Neighbors)으로 매칭한다.
  • 하나 이상의 매칭점을 찾거나, 매칭 특징점 개수가 많을 때 효율적이다.
  • 생성
    • cv2.FlannBasedMatcher_create(): descripterMatcherType은 FlannBased로서 하나
  • Match
    • cv2.FlannBasedMatcher.match(): 위의 BFMatcher와 같이 match(), knnmatch()가 존재하며
    • Return Type또한 같다.
profile
모든 의사 결정 과정을 지나칠 정도로 모두 기록하고, 나중에 스스로 피드백 하는 것

0개의 댓글