Matcher::Matcher(string code_file) # { N = 200; time.resize(10); nrof_matching = 0; codewords = NULL; description.push_back("minutiae similarity"); description.push_back("obtaining corr"); description.push_back("second order fast"); description.push_back("second order original"); dist_N = 50; table_dist.resize(dist_N*dist_N); max_nrof_templates = 0; int n = 0; for(int i=0;i<dist_N; ++i) { for(int j=i;j<dist_N;++j) { table_dist[i*dist_N+j] = sqrt((i*16.0)*(i*16.0) + (j*16.0)*(j*16.0)); table_dist[j*dist_N+i] = table_dist[i*dist_N+j]; } } // load code book ifstream is; is.open(code_file, ifstream::binary); // get length of file: is.seekg(0, ios::end); int length = is.tellg(); if( length<=0 ) { cout<<"codebook is empty!"<<endl; } is.seekg(0, ios::beg); nrof_subs = 0; nrof_clusters=0; sub_dim = 0; is.read(reinterpret_cast<char*>(&nrof_subs),sizeof(short)); is.read(reinterpret_cast<char*>(&nrof_clusters),sizeof(short)); is.read(reinterpret_cast<char*>(&sub_dim),sizeof(short)); int len = nrof_subs*nrof_clusters*sub_dim; if(len<=0) { cout<<"codebook is empty!"<<endl; } codewords = new float[len]; float *pword = codewords; for(int i=0;i<nrof_subs; ++i) { for(int j=0; j<nrof_clusters; ++j) { is.read(reinterpret_cast<char*>(pword),sizeof(float)*sub_dim); pword += sub_dim; } } }
时间: 2024-04-19 19:30:15 浏览: 211
这段代码是 `Matcher` 类的构造函数的实现。构造函数的作用是初始化类的成员变量,并加载一个二进制文件作为代码本。
构造函数的参数是一个字符串 `code_file`,表示要加载的二进制文件的路径。
以下是构造函数的具体实现:
- `N = 200;`:将变量 `N` 的值设置为 200。
- `time.resize(10);`:将向量 `time` 的大小调整为 10。
- `nrof_matching = 0;`:将变量 `nrof_matching` 的值设置为 0。
- `codewords = NULL;`:将指针 `codewords` 的值设置为 `NULL`。
- `description.push_back("minutiae similarity");`:向向量 `description` 中添加字符串 "minutiae similarity"。
- `description.push_back("obtaining corr");`:向向量 `description` 中添加字符串 "obtaining corr"。
- `description.push_back("second order fast");`:向向量 `description` 中添加字符串 "second order fast"。
- `description.push_back("second order original");`:向向量 `description` 中添加字符串 "second order original"。
- `dist_N = 50;`:将变量 `dist_N` 的值设置为 50。
- `table_dist.resize(dist_N*dist_N);`:调整向量 `table_dist` 的大小为 `dist_N*dist_N`。
- `max_nrof_templates = 0;`:将变量 `max_nrof_templates` 的值设置为 0。
- 使用两个嵌套的循环来计算并填充 `table_dist` 向量中的值。
- 打开指定的二进制文件 `code_file`。
- 获取文件的长度。
- 如果文件长度小于等于0,则输出 "codebook is empty!"。
- 将文件指针设置回文件起始位置。
- 读取二进制文件中的数据,并将其存储到相应的变量中。
- 创建一个大小为 `len` 的浮点数数组 `codewords`,并将二进制文件中的数据存储到该数组中。
这段代码主要用于初始化 `Matcher` 类的成员变量,并从二进制文件中加载代码本。具体的数据加载和处理逻辑可能需要查看其他相关代码来理解。
阅读全文