資源簡介
PCL1.8.0+VS2013編寫,利用ICP進行粗略配準,利用NDT進行精確配準,當兩個點云重疊率較大時有較好的效果,點云數據是用bun000和bun045,今后可能會上傳NDT+ICP進行配的代碼。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
//配準
#include??//ICP方法
#include?
#include?
#include?
#include?
#include?
#include?
//命名空間
using?pcl::visualization::PointCloudColorHandlerGenericField;
using?pcl::visualization::PointCloudColorHandlerCustom;
//定義類型的別名
typedef?pcl::PointXYZ?PointT;
typedef?pcl::PointCloud?PointCloud;
typedef?pcl::PointNormal?PointNormalT;
typedef?pcl::PointCloud?PointCloudWithNormals;
//void?pairAlign(const?PointCloud::Ptr?cloud_src?const?PointCloud::Ptr?cloud_tgt?PointCloud::Ptr?output?Eigen::Matrix4f?&final_transform?bool?downsample?=?false)
//void?loadData(int?argc?char?**argv?std::vector?>?&models)
//全局變量
//可視化對象
pcl::visualization::PCLVisualizer?*p;
//左視區和右視區,可視化窗口分成左右兩部分
int?vp_1?vp_2;
//定義結構體,用于處理點云
struct?PCD
{
PointCloud::Ptr?cloud;?//點云指針
std::string?f_name;?//文件名
//構造函數
PCD()?:?cloud(new?PointCloud)?{};?//初始化
};
//?定義新的點表達方式?坐標+曲率
class?MyPointRepresentation?:?public?pcl::PointRepresentation??//繼承關系
{
using?pcl::PointRepresentation::nr_dimensions_;
public:
MyPointRepresentation()
{
//指定維數
nr_dimensions_?=?4;
}
//重載函數copyToFloatArray,以定義自己的特征向量
virtual?void?copyToFloatArray(const?PointNormalT?&p?float?*?out)?const
{
//?坐標xyz和曲率
out[0]?=?p.x;
out[1]?=?p.y;
out[2]?=?p.z;
out[3]?=?p.curvature;
}
};
//?讀取一系列的PCD文件(希望配準的點云文件)
//?參數argc?參數的數量(來自main())
//?參數argv?參數的列表(來自main())
//?參數models?點云數據集的結果向量
void?loadData(int?argc?char?**argv?std::vector?>?&models)
{
std::string?extension(“.pcd“);?//聲明并初始化string類型變量extension,表示文件后綴名
//?通過遍歷文件名,讀取pcd文件
for?(int?i?=?1;?i? {
std::string?fname?=?std::string(argv[i]);
if?(fname.size()?<=?extension.size())?//文件名的長度是否符合要求
continue;
std::transform(fname.begin()?fname.end()?fname.begin()?(int(*)(int))tolower);?//將某操作(小寫字母化)應用于指定范圍的每個元素
//檢查文件是否是pcd文件
if?(fname.compare(fname.size()?-?extension.size()?extension.size()?extension)?==?0)
{
//?讀取點云,并保存到models
PCD?m;
m.f_name?=?argv[i];
pcl::io::loadPCDFile(argv[i]?*m.cloud);?//讀取點云數據
//去除點云中的NaN點(xyz都是NaN)
std::vector?indices;?//保存去除的點的索引
pcl::removeNaNFromPointCloud(*m.cloud?*m.cloud?indices);?//去除點云中的NaN點
models.push_back(m);
}
}
}
//簡單地配準一對點云數據,并返回結果
//參數cloud_src??源點云
//參數cloud_tgt??目標點云
//參數output?????輸出點云
//參數final_transform?成對變換矩陣
//參數
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-05-28?20:37??ICP+NDT\
?????目錄???????????0??2018-05-28?20:38??ICP+NDT\Debug\
?????文件?????3512293??2018-04-13?17:55??ICP+NDT\Debug\bun000.pcd
?????文件?????3493771??2018-04-16?09:33??ICP+NDT\Debug\bun045.pcd
?????文件??????437760??2018-05-06?10:37??ICP+NDT\Debug\pclStart.exe
?????文件?????????406??2018-05-03?15:03??ICP+NDT\Debug\pclStart.exe.manifest
?????文件?????1924320??2018-05-06?10:37??ICP+NDT\Debug\pclStart.ilk
?????目錄???????????0??2018-05-28?20:39??ICP+NDT\pclStart\
?????目錄???????????0??2018-05-28?20:35??ICP+NDT\pclStart\Debug\
?????文件???????43440??2012-05-13?17:15??ICP+NDT\pclStart\Debug\bun0.pcd
?????文件?????3511384??2018-05-06?10:37??ICP+NDT\pclStart\Debug\main.obj
?????文件????????1830??2018-05-03?15:02??ICP+NDT\pclStart\Debug\pclStart.Build.CppClean.log
?????文件?????????381??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.exe.intermediate.manifest
?????文件???????11084??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.log
?????目錄???????????0??2018-05-28?20:35??ICP+NDT\pclStart\Debug\pclStart.tlog\
?????文件??????405378??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.tlog\CL.read.1.tlog
?????文件?????????756??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.tlog\CL.write.1.tlog
?????文件?????????844??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.tlog\cl.command.1.tlog
?????文件???????15582??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.tlog\li
?????文件???????37332??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.tlog\li
?????文件?????????976??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.tlog\li
?????文件?????????594??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.tlog\mt.command.1.tlog
?????文件?????????444??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.tlog\mt.read.1.tlog
?????文件?????????444??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.tlog\mt.write.1.tlog
?????文件?????????203??2018-05-06?10:37??ICP+NDT\pclStart\Debug\pclStart.tlog\pclStart.lastbuildstate
?????文件????17492958??2012-05-03?17:21??ICP+NDT\pclStart\Debug\table_scene_lms400.pcd
?????文件????10275840??2018-05-06?10:37??ICP+NDT\pclStart\Debug\vc120.idb
?????文件????14782464??2018-05-06?10:37??ICP+NDT\pclStart\Debug\vc120.pdb
?????文件???????15407??2018-04-26?10:21??ICP+NDT\pclStart\IcpPlusNdt000Plus045.cpp
?????文件????????6214??2018-04-09?11:04??ICP+NDT\pclStart\PCL1.8.0Debug.props
?????文件?????3512293??2018-04-13?17:55??ICP+NDT\pclStart\bun000.pcd
............此處省略6個文件信息
評論
共有 條評論