45 bool valid_descriptor_type =
true;
48 if (descriptor_type.compare(
"SIFT") == 0) {
49 extractor_ = cv::DescriptorExtractor::create(
"SIFT");
51 extractor_ = cv::DescriptorExtractor::create(
"SURF");
53 extractor_ = cv::DescriptorExtractor::create(
"BRIEF");
55 extractor_ = cv::DescriptorExtractor::create(
"BRISK");
57 extractor_ = cv::DescriptorExtractor::create(
"FREAK");
59 extractor_ = cv::DescriptorExtractor::create(
"ORB");
61 VLOG(1) <<
"Descriptor type \"" << descriptor_type
62 <<
"\"is not available. Defaulting to SIFT.";
63 extractor_ = cv::DescriptorExtractor::create(
"SIFT");
64 valid_descriptor_type =
false;
68 return valid_descriptor_type;
73 std::vector<Feature>& features_out,
74 std::vector<Descriptor>& descriptors_out) {
78 <<
"Descriptor has not been specified via SetDescriptor(). Failed to "
79 "extract descriptors.";
83 CHECK(
extractor_) <<
"The descriptor extractor is null.";
90 cv_image.convertTo(cv_image, CV_8U, 255);
93 cv::Mat cv_descriptors;
95 extractor_->compute(cv_image, keypoints, cv_descriptors);
96 }
catch (
const std::exception& e) {
97 VLOG(1) <<
"Failed to extract descriptors: " << e.what();
103 for (
size_t ii = 0; ii < keypoints.size(); ++ii) {
105 feature.
u_ = keypoints[ii].pt.x;
106 feature.
v_ = keypoints[ii].pt.y;
107 features_out.push_back(feature);
109 MatrixXd descriptor_mat;
110 OpenCVToEigenMat<double>(cv_descriptors.row(ii), descriptor_mat);
113 Descriptor descriptor = descriptor_mat.row(0).transpose();
114 descriptors_out.push_back(descriptor);
::std::vector< Keypoint > KeypointList
void ToCV(cv::Mat &out) const
::Eigen::Matrix< double, Eigen::Dynamic, 1 > Descriptor