PCL庫學習(5)_點雲庫PCL VFH特徵識別官網代碼調試(2 build_kdtree)

在(1)環境搭建成功,編譯無錯誤後,調試運行但是提示我至少需要提供兩個參數。對此不理解,然後對主函數參數進行了理解,隨後啓動DOS命令行啓動程序。

通過上述命令行運行,在下列目錄下生成以下文件:

以上便是文件路徑的訪問方法,接下來將利用上述生成文件做近鄰搜索的代碼測試。

附代碼:

//#include <pcl/point_types.h>
//#include <pcl/point_cloud.h>
//#include <pcl/console/parse.h>
//#include <pcl/console/print.h>
//#include <pcl/io/pcd_io.h>
//#include <boost/filesystem.hpp>
//#include <flann/flann.h>
//#include <flann/io/hdf5.h>
//#include <fstream>
//
//typedef std::pair<std::string, std::vector<float> > vfh_model;//模型特徵數據存儲變量,該變量用一個字符串存儲文件名,一個向量存儲文件對應的VFH特徵
//
//bool loadHist(const boost::filesystem::path &path, vfh_model &vfh)
//{//打開遍歷路徑得到每個PCD文件,並讀取文件頭,檢測是否含有VFH標誌位
// int vfh_idx;//vfh標誌位
// try
// {
// pcl::PCLPointCloud2 cloud;
// int version;
// Eigen::Vector4f origin;
// Eigen::Quaternionf orientation;
// pcl::PCDReader r;
// int type; unsigned int idx;
// r.readHeader(path.string(), cloud, origin, orientation, version, type, idx);
//
// vfh_idx = pcl::getFieldIndex(cloud, "vfh");
// if (vfh_idx == -1)
// return (false);
// if ((int)cloud.width * cloud.height != 1)
// return (false);
// }
// catch (const pcl::InvalidConversionException&)
// {
// return (false);
// }
//
// // Treat the VFH signature as a single Point Cloud
// pcl::PointCloud <pcl::VFHSignature308> point;
// pcl::io::loadPCDFile(path.string(), point);
// vfh.second.resize(308);
//
// std::vector <pcl::PCLPointField> fields;
// pcl::getFieldIndex(point, "vfh", fields);
//
// for (size_t i = 0; i < fields[vfh_idx].count; ++i)
// {
// vfh.second[i] = point.points[0].histogram[i];
// }
// vfh.first = path.string();
// return (true);
//}
//
///** \brief Load a set of VFH features that will act as the model (training data)
//* \param argc the number of arguments (pass from main ())
//* \param argv the actual command line arguments (pass from main ())
//* \param extension the file extension containing the VFH features
//* \param models the resultant vector of histogram models
//*/
//void
//loadFeatureModels(const boost::filesystem::path &base_dir, const std::string &extension,std::vector<vfh_model> &models)
//{
// if (!boost::filesystem::exists(base_dir) && !boost::filesystem::is_directory(base_dir))
// return;
//
// for (boost::filesystem::directory_iterator it(base_dir); it != boost::filesystem::directory_iterator(); ++it)
// {
// if (boost::filesystem::is_directory(it->status()))
// {
// std::stringstream ss;
// ss << it->path();
// pcl::console::print_highlight("Loading %s (%lu models loaded so far).\n", ss.str().c_str(), (unsigned long)models.size());
// loadFeatureModels(it->path(), extension, models);
// }
// if (boost::filesystem::is_regular_file(it->status()) && boost::filesystem::extension(it->path()) == extension)
// {
// vfh_model m;
// if (loadHist(base_dir / it->path().filename(), m))
// models.push_back(m);
// }
// }
//}
//
//int
//main(int argc, char** argv)
//{
// if (argc < 2)
// {
// PCL_ERROR("Need at least two parameters! Syntax is: %s [model_directory] [options]\n", argv[0]);
// return (-1);
// }
//
// std::string extension(".pcd");
// transform(extension.begin(), extension.end(), extension.begin(), (int(*)(int))tolower);
//
// std::string kdtree_idx_file_name = "kdtree.idx";
// std::string training_data_h5_file_name = "training_data.h5";
// std::string training_data_list_file_name = "training_data.list";
//
// std::vector<vfh_model> models;
//
// //加載模型直方圖
// loadFeatureModels(argv[1], extension, models);
// pcl::console::print_highlight("Loaded %d VFH models. Creating training data %s/%s.\n",(int)models.size(), training_data_h5_file_name.c_str(), training_data_list_file_name.c_str());
//
// // 數據轉換爲FLANN格式
// flann::Matrix<float> data(new float[models.size() * models[0].second.size()], models.size(), models[0].second.size());
//
// for (size_t i = 0; i < data.rows; ++i)
// for (size_t j = 0; j < data.cols; ++j)
// data[i][j] = models[i].second[j];
//
// // 保存數據到磁盤
// flann::save_to_file(data, training_data_h5_file_name, "training_data");
// std::ofstream fs;
// fs.open(training_data_list_file_name.c_str());
// for (size_t i = 0; i < models.size(); ++i)
// fs << models[i].first << "\n";
// fs.close();
//
// // 利用FLANN數據創建kd-tree,並將其結構保存到磁盤中
// pcl::console::print_error("Building the kdtree index (%s) for %d elements...\n", kdtree_idx_file_name.c_str(), (int)data.rows);
// flann::Index<flann::ChiSquareDistance<float> > index(data, flann::LinearIndexParams());
// //flann::Index<flann::ChiSquareDistance<float> > index (data, flann::KDTreeIndexParams (4));
// index.buildIndex();
// index.save(kdtree_idx_file_name);
// delete[] data.ptr();
// /*system("pause");*/
// return (0);
//}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章