saving.h

来源:互联网 发布:定义结构体数组 编辑:程序博客网 时间:2024/06/01 19:45

大家知道FLANN库提供关于ANN问题的多种算法,包括KDTREE,KMEANS,HIERARCHICAL_CLUSTERING,等多种算法,我们要将我们训练好的模型存储,就需要一个文件头来存储我们模型的基本信息,saving.h这个头文件就定义了这样一个结构体:

struct IndexHeader;

成员变量:

char signature[16];char version[16];flann_datatype_t data_type;flann_algorithm_t index_type;flann_distance_t distance_type;size_t rows;size_t cols;

version存储的是本FLANN版本信息,我使用的是1.8.4
data_type 存储的是模型使用的数据类型。
index_type 指明的是模型使用的算法。
distance_type 指明该算法所用的距离类型(比如L1,L2等)。
rows 指明模型points的数量。
cols 指明points的大小。

成员方法:

IndexHeader();serialize(Archive & ar);

IndexHeader()为构造函数,主要初始化version,和signature。
serialize是序列化本检索头,当Archive类型是LoadArchive时,将LoadArchive中stream对应的文件中的检索头,加载到本检索头中。当Archive类型是SaveArchive是,将本检索头存储到SaveArchive对应的文件中。LOAD或SAVE的顺序为,signature,version,data_type ,index_type,rows,cols。
不熟悉ARCHIVE类的,可参考Archive

方法

void save_header(FILE * stream, const Index & index);

该方法是根据index(我们也可以称作模型)来创建相应的检索头,并将检索头存储带stream对应的文件中。

方法

inline IndexHeader load_header(FILE * stream);

该方法是从文件流stream中,创建返回一个检索头。

namespace serialization{ENUM_SERIALIZER(flann_algorithm_t);ENUM_SERIALIZER(flann_centers_init_t);ENUM_SERIALIZER(flann_log_level_t);ENUM_SERIALIZER(flann_datatype_t);}

这四个define,是定义对flann_algorithm_t,flann_centers_init_t,flann_log_level_t,flann_datatype_t这四种类型的序列化。

0 0
原创粉丝点击