40 std::vector<Eigen::Vector2d>
points(keypoints.size());
41 for (
size_t i = 0; i < keypoints.size(); ++i) {
42 points[i] = Eigen::Vector2d(keypoints[i].
x, keypoints[i].
y);
54 Eigen::MatrixXf descriptors_normalized(
descriptors.rows(),
58 descriptors_normalized.row(r) =
descriptors.row(r) / norm;
59 descriptors_normalized.row(r) =
60 descriptors_normalized.row(r).array().sqrt();
62 return descriptors_normalized;
71 const float scaled_value = std::round(512.0f *
descriptors(r, c));
72 descriptors_unsigned_byte(r, c) =
73 TruncateCast<float, uint8_t>(scaled_value);
76 return descriptors_unsigned_byte;
81 const size_t num_features) {
83 CHECK_GT(num_features, 0);
85 if (
static_cast<size_t>(
descriptors->rows()) <= num_features) {
92 std::vector<std::pair<size_t, float>> scales;
93 scales.reserve(
static_cast<size_t>(keypoints->size()));
94 for (
size_t i = 0; i < keypoints->size(); ++i) {
95 scales.emplace_back(i, (*keypoints)[i].ComputeScale());
98 std::partial_sort(scales.begin(), scales.begin() + num_features, scales.end(),
99 [](
const std::pair<size_t, float> scale1,
100 const std::pair<size_t, float> scale2) {
101 return scale1.second > scale2.second;
104 top_scale_keypoints.resize(num_features);
105 top_scale_descriptors.resize(num_features,
descriptors->cols());
106 for (
size_t i = 0; i < num_features; ++i) {
107 top_scale_keypoints[i] = (*keypoints)[scales[i].first];
108 top_scale_descriptors.row(i) =
descriptors->row(scales[i].first);
111 *keypoints = top_scale_keypoints;
Eigen::MatrixXf L1RootNormalizeFeatureDescriptors(const Eigen::MatrixXf &descriptors)
void ExtractTopScaleFeatures(FeatureKeypoints *keypoints, FeatureDescriptors *descriptors, const size_t num_features)
Eigen::Matrix< uint8_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > FeatureDescriptors
FeatureDescriptors FeatureDescriptorsToUnsignedByte(const Eigen::MatrixXf &descriptors)
Eigen::MatrixXf L2NormalizeFeatureDescriptors(const Eigen::MatrixXf &descriptors)
std::vector< Eigen::Vector2d > FeatureKeypointsToPointsVector(const FeatureKeypoints &keypoints)
std::vector< FeatureKeypoint > FeatureKeypoints
Eigen::MatrixXd::Index Index