From 75781866530505e9ea961e09083cfd92f7ead2c8 Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Sun, 10 May 2020 16:40:10 +0200 Subject: [PATCH 1/7] [voctree] safe subtraction with unsigned fix #194 --- src/aliceVision/voctree/VocabularyTree.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/aliceVision/voctree/VocabularyTree.cpp b/src/aliceVision/voctree/VocabularyTree.cpp index e7a63c4a70..9a1f1373f6 100644 --- a/src/aliceVision/voctree/VocabularyTree.cpp +++ b/src/aliceVision/voctree/VocabularyTree.cpp @@ -34,7 +34,8 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const } else { - distance += fabs(i1->second.size() - i2->second.size()); + const auto val = std::minmax(i1->second.size(), i2->second.size()); + distance += static_cast(val.second - val.first); ++i1; ++i2; } From 48ee61bd57bc48828c1dc90ba30d2165aa78c924 Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Sun, 10 May 2020 16:41:01 +0200 Subject: [PATCH 2/7] [voctree] string comparison == fix #194 --- src/aliceVision/voctree/VocabularyTree.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/aliceVision/voctree/VocabularyTree.cpp b/src/aliceVision/voctree/VocabularyTree.cpp index 9a1f1373f6..3da1dc7a36 100644 --- a/src/aliceVision/voctree/VocabularyTree.cpp +++ b/src/aliceVision/voctree/VocabularyTree.cpp @@ -18,7 +18,7 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const SparseHistogram::const_iterator i1 = v1.begin(), i1e = v1.end(); SparseHistogram::const_iterator i2 = v2.begin(), i2e = v2.end(); - if(distanceMethod.compare("classic") == 0) + if(distanceMethod == "classic") { while(i1 != i1e && i2 != i2e) { @@ -54,7 +54,7 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const } } - else if(distanceMethod.compare("commonPoints") == 0) + else if(distanceMethod == "commonPoints") { double score = 0.0; double N1 = 0.0; @@ -97,7 +97,7 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const distance = - score; } - else if(distanceMethod.compare("strongCommonPoints") == 0) + else if(distanceMethod == "strongCommonPoints") { double score = 0.0; double N1 = 0.0; @@ -143,7 +143,7 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const distance = - score; } - else if(distanceMethod.compare("weightedStrongCommonPoints") == 0) + else if(distanceMethod == "weightedStrongCommonPoints") { double score = 0.0; double N1 = 0.0; @@ -186,7 +186,7 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const distance = - score; } - else if(distanceMethod.compare("inversedWeightedCommonPoints") == 0) + else if(distanceMethod == "inversedWeightedCommonPoints") { double score = 0.0; double N1 = 0.0; From 35db3a8ab3f069c6859db450562802f4a5f772a6 Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Sun, 10 May 2020 16:41:58 +0200 Subject: [PATCH 3/7] [voctree] use float everywhere --- src/aliceVision/voctree/VocabularyTree.cpp | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/aliceVision/voctree/VocabularyTree.cpp b/src/aliceVision/voctree/VocabularyTree.cpp index 3da1dc7a36..bb2ea7953a 100644 --- a/src/aliceVision/voctree/VocabularyTree.cpp +++ b/src/aliceVision/voctree/VocabularyTree.cpp @@ -12,8 +12,8 @@ namespace voctree { float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const std::string &distanceMethod, const std::vector& word_weights) { - float distance = 0.0f; - float epsilon = 0.001; + float distance{0.0f}; + const float epsilon{0.001f}; SparseHistogram::const_iterator i1 = v1.begin(), i1e = v1.end(); SparseHistogram::const_iterator i2 = v2.begin(), i2e = v2.end(); @@ -56,9 +56,9 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const else if(distanceMethod == "commonPoints") { - double score = 0.0; - double N1 = 0.0; - double N2 = 0.0; + float score{0.f}; + float N1{0.f}; + float N2{0.f}; while(i1 != i1e && i2 != i2e) { @@ -99,9 +99,9 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const else if(distanceMethod == "strongCommonPoints") { - double score = 0.0; - double N1 = 0.0; - double N2 = 0.0; + float score{0.f}; + float N1{0.f}; + float N2{0.f}; while(i1 != i1e && i2 != i2e) { @@ -117,7 +117,7 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const } else { - if( ( fabs(i1->second.size() - 1.0) < epsilon ) && ( fabs(i2->second.size() - 1.0) < epsilon) ) + if( ( fabs(i1->second.size() - 1.f) < epsilon ) && ( fabs(i2->second.size() - 1.f) < epsilon) ) { score += 1; N1 += 1; @@ -145,9 +145,9 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const else if(distanceMethod == "weightedStrongCommonPoints") { - double score = 0.0; - double N1 = 0.0; - double N2 = 0.0; + float score{0.f}; + float N1{0.f}; + float N2{0.f}; while(i1 != i1e && i2 != i2e) { @@ -161,7 +161,7 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const N1 += i1->second.size()*word_weights[i1->first]; ++i1; } - if( ( fabs(i1->second.size() - 1.0) < epsilon ) && ( fabs(i2->second.size() - 1.0) < epsilon) ) + if( ( fabs(i1->second.size() - 1.f) < epsilon ) && ( fabs(i2->second.size() - 1.f) < epsilon) ) { score += word_weights[i1->first]; N1 += word_weights[i1->first]; @@ -188,10 +188,10 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const else if(distanceMethod == "inversedWeightedCommonPoints") { - double score = 0.0; - double N1 = 0.0; - double N2 = 0.0; std::map compteur; + float score{0.f}; + float N1{0.f}; + float N2{0.f}; while(i1 != i1e && i2 != i2e) { @@ -223,7 +223,7 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const while(i2 != i2e) { - N2 += i2->second.size() / word_weights[i2->first];; + N2 += i2->second.size() / word_weights[i2->first]; ++i2; } From 15405ab64c20508cc01b238d039731262f4dffde Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Sun, 10 May 2020 16:42:15 +0200 Subject: [PATCH 4/7] [voctree] auto --- src/aliceVision/voctree/VocabularyTree.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/aliceVision/voctree/VocabularyTree.cpp b/src/aliceVision/voctree/VocabularyTree.cpp index bb2ea7953a..15c4ceb365 100644 --- a/src/aliceVision/voctree/VocabularyTree.cpp +++ b/src/aliceVision/voctree/VocabularyTree.cpp @@ -15,8 +15,10 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const float distance{0.0f}; const float epsilon{0.001f}; - SparseHistogram::const_iterator i1 = v1.begin(), i1e = v1.end(); - SparseHistogram::const_iterator i2 = v2.begin(), i2e = v2.end(); + auto i1 = v1.cbegin(); + auto i1e = v1.cend(); + auto i2 = v2.cbegin(); + auto i2e = v2.cend(); if(distanceMethod == "classic") { From d8f228cd61d11e6e557c6f13e13aaed89b4b9f03 Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Sun, 10 May 2020 16:42:57 +0200 Subject: [PATCH 5/7] [voctree] range loop --- src/aliceVision/voctree/VocabularyTree.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/aliceVision/voctree/VocabularyTree.cpp b/src/aliceVision/voctree/VocabularyTree.cpp index 15c4ceb365..d8be85cd42 100644 --- a/src/aliceVision/voctree/VocabularyTree.cpp +++ b/src/aliceVision/voctree/VocabularyTree.cpp @@ -190,10 +190,10 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const else if(distanceMethod == "inversedWeightedCommonPoints") { - std::map compteur; float score{0.f}; float N1{0.f}; float N2{0.f}; + std::map counter; while(i1 != i1e && i2 != i2e) { @@ -209,7 +209,7 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const } else { - compteur[i1->first] += std::min(i1->second.size(), i2->second.size()); + counter[i1->first] += std::min(i1->second.size(), i2->second.size()); N1 += i1->second.size() / word_weights[i1->first]; N2 += i2->second.size() / word_weights[i2->first]; ++i1; @@ -229,8 +229,8 @@ float sparseDistance(const SparseHistogram& v1, const SparseHistogram& v2, const ++i2; } - for(auto iCompteur = compteur.begin(); iCompteur != compteur.end(); iCompteur++) - score += (1.0/iCompteur->second) * word_weights[iCompteur->first]; + for(const auto elem : counter) + score += (1.f/ elem.second) * word_weights[elem.first]; distance = - score; } From 75820246abf4b6316ceb88b408e74bd7fb91c789 Mon Sep 17 00:00:00 2001 From: Simone Gasparini Date: Sun, 10 May 2020 16:43:12 +0200 Subject: [PATCH 6/7] [voctree] const --- src/aliceVision/voctree/Database.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/aliceVision/voctree/Database.cpp b/src/aliceVision/voctree/Database.cpp index dd064210e4..9154213399 100644 --- a/src/aliceVision/voctree/Database.cpp +++ b/src/aliceVision/voctree/Database.cpp @@ -119,7 +119,7 @@ void Database::find( const SparseHistogram& query, std::size_t N, std::vector Date: Sun, 10 May 2020 16:55:49 +0200 Subject: [PATCH 7/7] [voctree] missing include --- src/aliceVision/voctree/VocabularyTree.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/aliceVision/voctree/VocabularyTree.cpp b/src/aliceVision/voctree/VocabularyTree.cpp index d8be85cd42..7d761bad02 100644 --- a/src/aliceVision/voctree/VocabularyTree.cpp +++ b/src/aliceVision/voctree/VocabularyTree.cpp @@ -6,6 +6,8 @@ #include "VocabularyTree.hpp" +#include + namespace aliceVision { namespace voctree {