35 #ifndef VOCAB_TREE_HEADER 
   36 #define VOCAB_TREE_HEADER 
   82             virtual bool RecursiveBuild(
size_t num_keys, 
int dim, 
int depth, 
int depth_curr, 
int bf, 
DTYPE **p , 
double *means, 
int *assign, 
int thread_num = 1) = 0;
 
   84             virtual bool WriteNode(FILE *f, 
int branch_num, 
int dim) 
const = 0;
 
   85             virtual bool ReadNode(FILE *f, 
int branch_num, 
int dim) = 0;
 
   86             virtual size_t CountNodes(
int branch_num) 
const = 0;
 
   87             virtual size_t CountLeaves(
int branch_num) 
const = 0;
 
   91             virtual size_t DescendFeature(
float *q, 
DTYPE *v, 
size_t image_index, 
int branch_num, 
int dim, 
bool add = 
true) = 0;
 
   96             virtual bool NormalizeDatabase(
int bf, 
size_t start_id, std::vector<float> &database_mag) = 0;   
 
   99             virtual bool FillQueryVector(
float *q, 
int branch_num, 
float normalize_factor) = 0;     
 
  114             virtual bool RecursiveBuild(
size_t num_keys, 
int dim, 
int depth, 
int depth_curr, 
int bf, 
DTYPE **p, 
double *means, 
int *assign, 
int thread_num = 1);
 
  116             virtual bool WriteNode(FILE *f, 
int branch_num, 
int dim) 
const;
 
  117             virtual bool ReadNode(FILE *f, 
int branch_num, 
int dim);
 
  118             virtual size_t CountNodes(
int branch_num) 
const ;
 
  123             virtual size_t DescendFeature(
float *q, 
DTYPE *v, 
size_t image_index, 
int branch_num, 
int dim, 
bool add = 
true);
 
  128             virtual bool NormalizeDatabase(
int bf, 
size_t start_id, std::vector<float> &database_mag);   
 
  131             virtual bool FillQueryVector(
float *q, 
int branch_num, 
float normalize_factor);     
 
  145             virtual bool RecursiveBuild(
size_t num_keys, 
int dim, 
int depth, 
int depth_curr, 
int bf, 
DTYPE **p , 
double *means, 
int *assign, 
int thread_num = 1);
 
  147             virtual bool WriteNode(FILE *f, 
int branch_num, 
int dim) 
const;
 
  148             virtual bool ReadNode(FILE *f, 
int branch_num, 
int dim);
 
  149             virtual size_t CountNodes(
int branch_num) 
const;
 
  154             virtual size_t DescendFeature(
float *q, 
DTYPE *v, 
size_t image_index, 
int branch_num, 
int dim, 
bool add = 
true);
 
  159             virtual bool NormalizeDatabase(
int bf, 
size_t start_id, std::vector<float> &database_mag);   
 
  162             virtual bool FillQueryVector(
float *q, 
int branch_num, 
float normalize_factor);     
 
  184             bool WriteTree(
const char *filename) 
const;       
 
  185             bool ReadTree(
const char *filename);            
 
  211 #endif  //VOCAB_TREE_HEADER 
virtual bool ComputeDatabaseMagnitude(int bf, DistanceType dis_type, size_t start_id, std::vector< float > &database_mag)
compute the vector magnitude of all images in the database 
Definition: vocab_tree.cpp:888
ImageCount(size_t index_, float count_)
Definition: vocab_tree.h:60
virtual bool Compare(TreeNode *in, int branch_num, int dim) const  =0
virtual bool NormalizeDatabase(int bf, size_t start_id, std::vector< float > &database_mag)=0
normalize the inverted list score by the magnitude of image vector 
size_t id
the id of the node 
Definition: vocab_tree.h:103
#define DTYPE
Definition: global_params.h:41
DTYPE * des
the descriptor vector 
Definition: vocab_tree.h:102
virtual bool FillQueryVector(float *q, int branch_num, float normalize_factor)
fill the query vector 
Definition: vocab_tree.cpp:1018
std::mutex add_lock
a mutex used for multithreaded AddImage2Tree 
Definition: vocab_tree.h:168
virtual bool ClearScores(int bf)=0
refresh the temporary score for this tree 
double AddImage2Tree(size_t image_index, tw::SiftData &sift, int thread_num)
add an image into the database (support multi-thread) 
Definition: vocab_tree.cpp:671
virtual bool ClearNode(int bf)=0
virtual bool ScoreQuery(float *q, int branch_num, DistanceType dt, float *scores)=0
score each image in the database 
virtual bool RecursiveBuild(size_t num_keys, int dim, int depth, int depth_curr, int bf, DTYPE **p, double *means, int *assign, int thread_num=1)=0
bool Query(tw::SiftData &sift, float *scores)
query database and return the scores 
Definition: vocab_tree.cpp:949
virtual bool WriteNode(FILE *f, int branch_num, int dim) const  =0
virtual bool SetConstantWeight(int bf)
set a constant weight to the leaf nodes 
Definition: vocab_tree.cpp:817
virtual bool Compare(TreeNode *in, int branch_num, int dim) const 
Definition: vocab_tree.cpp:610
virtual bool ClearScores(int bf)
refresh the temporary score for this tree 
Definition: vocab_tree.cpp:119
float count
Definition: vocab_tree.h:63
virtual bool ComputeTFIDFWeight(int bf, size_t n)
compute TF-IDF weight and pre-apply weight adjusting to inverted lists 
Definition: vocab_tree.cpp:840
virtual bool IndexLeaves(int branch_num)
Definition: vocab_tree.cpp:1012
DistanceType dis_type
the distance type 
Definition: vocab_tree.h:205
TreeNode()
Definition: vocab_tree.h:72
TreeNode * root
the root of the tree 
Definition: vocab_tree.h:206
TreeInNode()
Definition: vocab_tree.h:112
bool BuildTree(size_t num_keys, int dim, int depth, int bf, DTYPE **p, int thread_num=1)
build a vocabulary tree from a set of features 
Definition: vocab_tree.cpp:143
The virtual class of tree node. 
Definition: vocab_tree.h:69
virtual bool RecursiveBuild(size_t num_keys, int dim, int depth, int depth_curr, int bf, DTYPE **p, double *means, int *assign, int thread_num=1)
Definition: vocab_tree.cpp:331
The leaf node class of the tree. 
Definition: vocab_tree.h:140
virtual bool ComputeDatabaseMagnitude(int bf, DistanceType dis_type, size_t start_id, std::vector< float > &database_mag)
compute the vector magnitude of all images in the database 
Definition: vocab_tree.cpp:898
TreeLeafNode()
Definition: vocab_tree.h:143
virtual bool WriteNode(FILE *f, int branch_num, int dim) const 
Definition: vocab_tree.cpp:367
virtual size_t DescendFeature(float *q, DTYPE *v, size_t image_index, int branch_num, int dim, bool add=true)
Definition: vocab_tree.cpp:746
~VocabTree()
Definition: vocab_tree.cpp:67
virtual size_t CountNodes(int branch_num) const 
Definition: vocab_tree.cpp:558
float weight
weight for this node 
Definition: vocab_tree.h:166
virtual double ComputeImageVectorMagnitude(int bf, DistanceType dt)
Definition: vocab_tree.cpp:782
bool ReadTree(const char *filename)
read a vocabulary tree from a file 
Definition: vocab_tree.cpp:420
virtual size_t CountLeaves(int branch_num) const 
Definition: vocab_tree.cpp:572
std::vector< ImageCount > inv_list
image inverted list 
Definition: vocab_tree.h:167
void Show() const 
a test function 
Definition: vocab_tree.cpp:551
The vocabulary tree class. The depth of the root is 0. The depth of the leaf nodes is depth+1...
Definition: vocab_tree.h:174
int dim
the dimension of the descriptor 
Definition: vocab_tree.h:201
virtual ~TreeLeafNode()
Definition: vocab_tree.cpp:78
virtual bool WriteNode(FILE *f, int branch_num, int dim) const 
Definition: vocab_tree.cpp:399
bool ComputeTFIDFWeight(size_t image_num)
compute TF-IDF weight and pre-apply weight adjusting to inverted lists 
Definition: vocab_tree.cpp:823
bool SetConstantWeight()
set a constant weight to the leaf nodes 
Definition: vocab_tree.cpp:796
virtual size_t CountNodes(int branch_num) const 
Definition: vocab_tree.cpp:569
DistanceType
Definition: vocab_tree.h:47
size_t IndexLeaves()
index the leaf nodes 
Definition: vocab_tree.cpp:995
VocabTree()
Definition: vocab_tree.cpp:62
virtual bool ClearNode(int bf)
Definition: vocab_tree.cpp:102
virtual bool ComputeTFIDFWeight(int bf, size_t n)=0
compute TF-IDF weight and pre-apply weight adjusting to inverted lists 
bool WriteTree(const char *filename) const 
save the vocabulary tree in a file 
Definition: vocab_tree.cpp:342
ImageCount()
Definition: vocab_tree.h:59
size_t num_leaves
the number of leaf nodes in the tree 
Definition: vocab_tree.h:204
virtual bool FillQueryVector(float *q, int branch_num, float normalize_factor)
fill the query vector 
Definition: vocab_tree.cpp:1030
int branch_num
the branch number of a node 
Definition: vocab_tree.h:199
virtual bool RecursiveBuild(size_t num_keys, int dim, int depth, int depth_curr, int bf, DTYPE **p, double *means, int *assign, int thread_num=1)
Definition: vocab_tree.cpp:195
virtual bool ComputeDatabaseMagnitude(int bf, DistanceType dis_type, size_t start_id, std::vector< float > &database_mag)=0
compute the vector magnitude of all images in the database 
virtual bool SetConstantWeight(int bf)=0
set a constant weight to the leaf nodes 
bool NormalizeDatabase(size_t start_id, size_t image_num)
normalize the inverted list score by the magnitude of image vector 
Definition: vocab_tree.cpp:861
virtual bool FillQueryVector(float *q, int branch_num, float normalize_factor)=0
fill the query vector 
virtual bool SetConstantWeight(int bf)
set a constant weight to the leaf nodes 
Definition: vocab_tree.cpp:805
float score
temporary score, for querying and computing magnitude use 
Definition: vocab_tree.h:165
virtual ~TreeNode()
Definition: vocab_tree.h:73
size_t num_nodes
the number of nodes in the tree 
Definition: vocab_tree.h:203
virtual bool IndexLeaves(int branch_num)
Definition: vocab_tree.cpp:1002
virtual bool ComputeTFIDFWeight(int bf, size_t n)
compute TF-IDF weight and pre-apply weight adjusting to inverted lists 
Definition: vocab_tree.cpp:830
virtual bool ReadNode(FILE *f, int branch_num, int dim)
Definition: vocab_tree.cpp:460
virtual size_t DescendFeature(float *q, DTYPE *v, size_t image_index, int branch_num, int dim, bool add=true)=0
virtual bool ClearScores(int bf)
refresh the temporary score for this tree 
Definition: vocab_tree.cpp:131
size_t database_image_num
the number of the database images 
Definition: vocab_tree.h:202
virtual size_t DescendFeature(float *q, DTYPE *v, size_t image_index, int branch_num, int dim, bool add=true)
Definition: vocab_tree.cpp:724
Sift data structure used in libvot. 
Definition: data_types.h:22
This class contains a index for an image and a count for image. 
Definition: vocab_tree.h:56
virtual bool ClearNode(int bf)
Definition: vocab_tree.cpp:113
global parameters and utility functions 
virtual bool Compare(TreeNode *leaf, int branch_num, int dim) const 
Definition: vocab_tree.cpp:636
Definition: vocab_tree.h:49
virtual bool ScoreQuery(float *q, int branch_num, DistanceType dt, float *scores)
score each image in the database 
Definition: vocab_tree.cpp:1048
size_t index
Definition: vocab_tree.h:62
namespace vot contains libvot functions and classes. 
Definition: image_graph.cpp:49
virtual bool IndexLeaves(int branch_num)=0
TreeNode ** children
Definition: vocab_tree.h:134
int depth
the depth of the tree 
Definition: vocab_tree.h:200
bool Compare(VocabTree &v) const 
compare two vocabulary tree and returns whether they are the same 
Definition: vocab_tree.cpp:586
The interior node class of the tree. 
Definition: vocab_tree.h:109
virtual bool ReadNode(FILE *f, int branch_num, int dim)=0
virtual bool ReadNode(FILE *f, int branch_num, int dim)
Definition: vocab_tree.cpp:510
virtual bool ScoreQuery(float *q, int branch_num, DistanceType dt, float *scores)
score each image in the database 
Definition: vocab_tree.cpp:1036
virtual size_t CountNodes(int branch_num) const  =0
bool ClearTree()
release the memory 
Definition: vocab_tree.cpp:91
virtual size_t CountLeaves(int branch_num) const  =0
virtual bool NormalizeDatabase(int bf, size_t start_id, std::vector< float > &database_mag)
normalize the inverted list score by the magnitude of image vector 
Definition: vocab_tree.cpp:931
virtual ~TreeInNode()
Definition: vocab_tree.cpp:69
virtual double ComputeImageVectorMagnitude(int bf, DistanceType dt)=0
virtual size_t CountLeaves(int branch_num) const 
Definition: vocab_tree.cpp:583
virtual double ComputeImageVectorMagnitude(int bf, DistanceType dt)
Definition: vocab_tree.cpp:771
virtual bool NormalizeDatabase(int bf, size_t start_id, std::vector< float > &database_mag)
normalize the inverted list score by the magnitude of image vector 
Definition: vocab_tree.cpp:921
Definition: vocab_tree.h:50
internal data types (structs and classes) used in libvot