|
|
|
@ -60,13 +60,13 @@ struct LshIndexParams : public IndexParams |
|
|
|
|
{ |
|
|
|
|
LshIndexParams(unsigned int table_number = 12, unsigned int key_size = 20, unsigned int multi_probe_level = 2) |
|
|
|
|
{ |
|
|
|
|
(* this)["algorithm"] = FLANN_INDEX_LSH; |
|
|
|
|
(*this)["algorithm"] = FLANN_INDEX_LSH; |
|
|
|
|
// The number of hash tables to use
|
|
|
|
|
(*this)["table_number"] = table_number; |
|
|
|
|
(*this)["table_number"] = static_cast<int>(table_number); |
|
|
|
|
// The length of the key in the hash tables
|
|
|
|
|
(*this)["key_size"] = key_size; |
|
|
|
|
(*this)["key_size"] = static_cast<int>(key_size); |
|
|
|
|
// Number of levels to use in multi-probe (0 for standard LSH)
|
|
|
|
|
(*this)["multi_probe_level"] = multi_probe_level; |
|
|
|
|
(*this)["multi_probe_level"] = static_cast<int>(multi_probe_level); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -94,9 +94,9 @@ public: |
|
|
|
|
{ |
|
|
|
|
// cv::flann::IndexParams sets integer params as 'int', so it is used with get_param
|
|
|
|
|
// in place of 'unsigned int'
|
|
|
|
|
table_number_ = (unsigned int)get_param<int>(index_params_,"table_number",12); |
|
|
|
|
key_size_ = (unsigned int)get_param<int>(index_params_,"key_size",20); |
|
|
|
|
multi_probe_level_ = (unsigned int)get_param<int>(index_params_,"multi_probe_level",2); |
|
|
|
|
table_number_ = get_param(index_params_,"table_number",12); |
|
|
|
|
key_size_ = get_param(index_params_,"key_size",20); |
|
|
|
|
multi_probe_level_ = get_param(index_params_,"multi_probe_level",2); |
|
|
|
|
|
|
|
|
|
feature_size_ = (unsigned)dataset_.cols; |
|
|
|
|
fill_xor_mask(0, key_size_, multi_probe_level_, xor_masks_); |
|
|
|
@ -112,7 +112,7 @@ public: |
|
|
|
|
void buildIndex() CV_OVERRIDE |
|
|
|
|
{ |
|
|
|
|
tables_.resize(table_number_); |
|
|
|
|
for (unsigned int i = 0; i < table_number_; ++i) { |
|
|
|
|
for (int i = 0; i < table_number_; ++i) { |
|
|
|
|
lsh::LshTable<ElementType>& table = tables_[i]; |
|
|
|
|
table = lsh::LshTable<ElementType>(feature_size_, key_size_); |
|
|
|
|
|
|
|
|
@ -378,11 +378,11 @@ private: |
|
|
|
|
IndexParams index_params_; |
|
|
|
|
|
|
|
|
|
/** table number */ |
|
|
|
|
unsigned int table_number_; |
|
|
|
|
int table_number_; |
|
|
|
|
/** key size */ |
|
|
|
|
unsigned int key_size_; |
|
|
|
|
int key_size_; |
|
|
|
|
/** How far should we look for neighbors in multi-probe LSH */ |
|
|
|
|
unsigned int multi_probe_level_; |
|
|
|
|
int multi_probe_level_; |
|
|
|
|
|
|
|
|
|
/** The XOR masks to apply to a key to get the neighboring buckets */ |
|
|
|
|
std::vector<lsh::BucketKey> xor_masks_; |
|
|
|
|