더북(TheBook)

그림 14-8에서 Feature2D 클래스를 상속받아 만들어진 SIFT, SURF, FastFeatureDetector, BriefDescriptorExtractor, KAZE, ORB 등의 클래스는 실제 특징점 검출 및 기술 알고리즘을 구현한 클래스입니다. 가장 유명한 특징점 검출 알고리즘인 SIFT와 SURF는 각각 알고리즘과 동일한 이름의 클래스로 구현되어 있습니다. SIFT와 SURF는 소스 코드는 공개되어 있지만 알고리즘 자체에 특허가 걸려 있어서 상업적인 사용 시에는 제약이 있을 수 있습니다. BriefDescriptorExtractor 클래스는 BRIEF 기술자 계산 방법이 구현된 클래스입니다. SIFT, SURF, BriefDescriptorExtractor 클래스는 xfeatures2d 추가 모듈에 포함되어 있으며 cv::xfeatures2d 네임스페이스를 사용합니다. 그러므로 이들 클래스는 OpenCV 소스 코드를 직접 빌드해야 사용할 수 있습니다. 반면에 cv 네임스페이스를 사용하고 있는 FastFeatureDetector, KAZE, ORB 등의 클래스는 OpenCV 기본 소스에 포함되어 있어서 쉽게 사용할 수 있습니다.

그림 14-8에 나열된 특징점 알고리즘 구현 클래스 중에는 특징점 검출만 지원하거나 기술자 생성만 지원하는 클래스도 있습니다. 예를 들어 FastFeatureDetector 클래스는 FAST 코너 검출 방법을 클래스로 구현한 것이며, 이 클래스는 특징점을 검출하는 기능만 있습니다. 그러므로 FastFeatureDetector 객체에서 compute() 또는 detectAndCompute() 함수를 호출하면 에러가 발생합니다. 반면에 BriefDescriptorExtractor 클래스는 다른 방법으로 구한 특징점 위치에서 BRIEF 이진 기술자를 구하는 기능만 제공합니다. 그러므로 BriefDescriptorExtractor 객체에서 detect() 또는 detectAndCompute() 함수를 호출하면 안됩니다. SIFT, SURF, KAZE, ORB처럼 특징점 검출과 기술을 함께 지원하는 알고리즘 클래스는 detect(), compute(), detectAndCompute() 함수를 모두 사용할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.