From f908c2b0e313dd01fb8bf033674e70e147eab4da Mon Sep 17 00:00:00 2001 From: Maksim Shabunin Date: Fri, 8 Aug 2014 16:59:24 +0400 Subject: [PATCH] Revert "Avoid obtaining several identical dimensions between two LSH sub-vectors by choosing orthogonal sub-vectors." This reverts commit e85bacff7b676a7789bea6501e694cac299b21be. --- modules/flann/include/opencv2/flann/lsh_table.h | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/modules/flann/include/opencv2/flann/lsh_table.h b/modules/flann/include/opencv2/flann/lsh_table.h index 737a4f5..2c99a3a 100644 --- a/modules/flann/include/opencv2/flann/lsh_table.h +++ b/modules/flann/include/opencv2/flann/lsh_table.h @@ -346,21 +346,13 @@ inline LshTable::LshTable(unsigned int feature_size, unsigned int mask_ = std::vector((size_t)ceil((float)(feature_size * sizeof(char)) / (float)sizeof(size_t)), 0); // A bit brutal but fast to code - static std::vector indices(feature_size * CHAR_BIT); - - //Ensure the Nth bit will be selected only once among the different LshTables - //to avoid having two different tables with signatures sharing many dimensions/many bits - if( (indices.size() == feature_size * CHAR_BIT) || (indices.size() < key_size_) ) - { - indices.resize( feature_size * CHAR_BIT ); - for (size_t i = 0; i < feature_size * CHAR_BIT; ++i) indices[i] = i; - std::random_shuffle(indices.begin(), indices.end()); - } + std::vector indices(feature_size * CHAR_BIT); + for (size_t i = 0; i < feature_size * CHAR_BIT; ++i) indices[i] = i; + std::random_shuffle(indices.begin(), indices.end()); // Generate a random set of order of subsignature_size_ bits for (unsigned int i = 0; i < key_size_; ++i) { - size_t index = indices[0]; - indices.erase( indices.begin() ); + size_t index = indices[i]; // Set that bit in the mask size_t divisor = CHAR_BIT * sizeof(size_t); -- 2.7.4