CRH直方图和姿态识别代码
生活随笔
收集整理的這篇文章主要介紹了
CRH直方图和姿态识别代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
TCHAR szFilter[] = _T("所有文件(*.*)|*.*|pcd文件(*.pcd)|*.pcd|ply文件(*.ply)|*.ply|xyz文件(*.xyz)|*.xyz|");// 構造打開文件對話框 CFileDialog fileDlg(TRUE, _T("pcd"), NULL, 0, szFilter, this);CString scenefilepath;CString modelfilepath;std::string scenefile;std::string modelfile;// Cloud for storing the object.pcl::PointCloud<pcl::PointXYZ>::Ptr scenecloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ>::Ptr modelcloud(new pcl::PointCloud<pcl::PointXYZ>);// 顯示打開文件對話框 if (IDOK == fileDlg.DoModal()){scenefilepath = fileDlg.GetPathName();// Load the first file//pcl::PCLPointCloud2Ptr cloud;// Command line parsingbool format = true;bool use_camera = true;scenefile = WChar2Ansi(scenefilepath.GetBuffer(scenefilepath.GetLength()));int pos = scenefile.find_last_of('.');std::string extensionName(scenefile.substr(pos + 1));if (extensionName == "ply"){if (pcl::io::loadPLYFile<pcl::PointXYZ>(scenefile.c_str(), *scenecloud) != 0){AfxMessageBox(_T("file is error"));}}if (extensionName == "pcd"){if (pcl::io::loadPCDFile<pcl::PointXYZ>(scenefile.c_str(), *scenecloud) != 0){AfxMessageBox(_T("file is error"));}}}// 顯示打開文件對話框 if (IDOK == fileDlg.DoModal()){modelfilepath = fileDlg.GetPathName();// Load the first file//pcl::PCLPointCloud2Ptr cloud;// Command line parsingbool format = true;bool use_camera = true;modelfile = WChar2Ansi(modelfilepath.GetBuffer(modelfilepath.GetLength()));int pos = modelfile.find_last_of('.');std::string extensionName(modelfile.substr(pos + 1));if (extensionName == "ply"){if (pcl::io::loadPLYFile<pcl::PointXYZ>(modelfile.c_str(), *modelcloud) != 0){AfxMessageBox(_T("file is error"));}}if (extensionName == "pcd"){if (pcl::io::loadPCDFile<pcl::PointXYZ>(modelfile.c_str(), *modelcloud) != 0){AfxMessageBox(_T("file is error"));}}}// Object for storing the normals.pcl::PointCloud<pcl::Normal>::Ptr scene_normals(new pcl::PointCloud<pcl::Normal>);pcl::PointCloud<pcl::Normal>::Ptr model_normals(new pcl::PointCloud<pcl::Normal>);// Estimate the normals.pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> normalEstimation;normalEstimation.setInputCloud(scenecloud);normalEstimation.setRadiusSearch(0.03);pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree(new pcl::search::KdTree<pcl::PointXYZ>);normalEstimation.setSearchMethod(kdtree);normalEstimation.compute(*scene_normals);normalEstimation.setInputCloud(modelcloud);normalEstimation.compute(*model_normals);//estimate centroid Eigen::Vector4f scene_centroid;Eigen::Vector4f model_centroid;pcl::compute3DCentroid<pcl::PointXYZ>(*scenecloud, scene_centroid);pcl::compute3DCentroid<pcl::PointXYZ>(*modelcloud, model_centroid);//estimate camera roll histogram pcl::CRHEstimation<pcl::PointXYZ, pcl::Normal, pcl::Histogram<90> > crh_;pcl::PointCloud<pcl::Histogram<90> >::Ptr scene_crh(new pcl::PointCloud<pcl::Histogram<90> >);pcl::PointCloud<pcl::Histogram<90> >::Ptr model_crh(new pcl::PointCloud<pcl::Histogram<90> >);crh_.setInputCloud(scenecloud);crh_.setInputNormals(scene_normals);crh_.setCentroid(scene_centroid);crh_.compute(*scene_crh);crh_.setInputCloud(modelcloud);crh_.setInputNormals(model_normals);crh_.setCentroid(model_centroid);crh_.compute(*model_crh);pcl::visualization::PCLPlotter crh_visualizer;crh_visualizer.addFeatureHistogram<pcl::Histogram<90>>(*scene_crh, 90, "scenefeature");crh_visualizer.addFeatureHistogram<pcl::Histogram<90>>(*model_crh, 90, "modelfeature");crh_visualizer.spin();// CRH alignment object.pcl::CRHAlignment<pcl::PointXYZ, 90> alignment;alignment.setInputAndTargetView(scenecloud, modelcloud);// CRHAlignment works with Vector3f, not Vector4f.Eigen::Vector3f sceneCentroid3f(scene_centroid[0], scene_centroid[1], scene_centroid[2]);Eigen::Vector3f modelCentroid3f(model_centroid[0], model_centroid[1], model_centroid[2]);alignment.setInputAndTargetCentroids(sceneCentroid3f, modelCentroid3f);// Compute the roll angle(s).std::vector<float> angles;alignment.computeRollAngle(*scene_crh, *model_crh, angles);if (angles.size() > 0){int pos = scenefile.find_last_of('.');//std::string extensionName(scenefile.substr(pos + 1));scenefile = scenefile.substr(0, pos);scenefile += ".txt";std::ofstream fs;fs.open(scenefile.c_str());for (int i = 0; i < angles.size(); i++){//std::cout << "\t" << angles.at(i) << " degrees." << std::endlfs << angles.at(i) << "\n";}fs.close();}
總結
以上是生活随笔為你收集整理的CRH直方图和姿态识别代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ITN网络课程笔记(十七)(完)
- 下一篇: 【2】非线性方程求解函数vpasolve