MCPcopy Create free account
hub / github.com/colmap/colmap / ComputeSiftDistanceMatrix

Function ComputeSiftDistanceMatrix

src/colmap/feature/sift.cc:959–1008  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

957};
958
959Eigen::RowMajorMatrixXf ComputeSiftDistanceMatrix(
960 const DistanceType distance_type,
961 const FeatureKeypoints* keypoints1,
962 const FeatureKeypoints* keypoints2,
963 const FeatureDescriptorsData& descriptors1,
964 const FeatureDescriptorsData& descriptors2,
965 const std::function<bool(float, float, float, float)>& guided_filter) {
966 if (guided_filter != nullptr) {
967 THROW_CHECK_NOTNULL(keypoints1);
968 THROW_CHECK_NOTNULL(keypoints2);
969 THROW_CHECK_EQ(keypoints1->size(), descriptors1.rows());
970 THROW_CHECK_EQ(keypoints2->size(), descriptors2.rows());
971 }
972
973 const Eigen::Matrix<int, Eigen::Dynamic, kSiftDescriptorDim>
974 descriptors1_int = descriptors1.cast<int>();
975 const Eigen::Matrix<int, Eigen::Dynamic, kSiftDescriptorDim>
976 descriptors2_int = descriptors2.cast<int>();
977
978 Eigen::RowMajorMatrixXf distances(descriptors1.rows(), descriptors2.rows());
979 for (Eigen::Index i1 = 0; i1 < descriptors1.rows(); ++i1) {
980 for (Eigen::Index i2 = 0; i2 < descriptors2.rows(); ++i2) {
981 if (guided_filter != nullptr && guided_filter((*keypoints1)[i1].x,
982 (*keypoints1)[i1].y,
983 (*keypoints2)[i2].x,
984 (*keypoints2)[i2].y)) {
985 if (distance_type == DistanceType::L2) {
986 distances(i1, i2) = kSqSiftDescriptorNorm;
987 } else if (distance_type == DistanceType::DOT_PRODUCT) {
988 distances(i1, i2) = 0;
989 } else {
990 LOG(FATAL_THROW) << "Distance type not supported";
991 }
992 } else {
993 if (distance_type == DistanceType::L2) {
994 distances(i1, i2) =
995 (descriptors1_int.row(i1) - descriptors2_int.row(i2))
996 .squaredNorm();
997 } else if (distance_type == DistanceType::DOT_PRODUCT) {
998 distances(i1, i2) =
999 descriptors1_int.row(i1).dot(descriptors2_int.row(i2));
1000 } else {
1001 LOG(FATAL_THROW) << "Distance type not supported";
1002 }
1003 }
1004 }
1005 }
1006
1007 return distances;
1008}
1009
1010FeatureKeypoints NormalizeFeatureKeypoints(const Camera& camera,
1011 const FeatureKeypoints& keypoints) {

Callers 2

MatchMethod · 0.85
MatchGuidedMethod · 0.85

Calls 1

sizeMethod · 0.80

Tested by

no test coverage detected