PCL交互迭代最近点方法

**代码出处:**http://pointclouds.org/documentation/tutorials/interactive_icp.php#interactive-icp

交互迭代最近法允许用户每次按下“空格”键,一次ICP迭代算法执行,并更新视图。
此程序主要步骤:

1、导入点云数据

PCL提供IO模块直接读入点云文件。

pcl::io::loadPCDFile("dragon_source.pcd", *cloud_in)

注:控制台参数输入时,cd到exe路径,执行 "XX arg1 arg2 …"

2、旋转平移获取待配准点云数据

pcl中矩阵的定义及赋值:

//定义旋转矩阵和平移矩阵
	Eigen::Matrix4d transformation_matrix = Eigen::Matrix4d::Identity();

	double theta = M_PI / 8;//旋转角度
	transformation_matrix(0,0) = cos(theta);
	transformation_matrix(0,1) = -sin(theta);
	transformation_matrix(1,0) = sin(theta);
	transformation_matrix(1,1) = cos(theta);
	
	transformation_matrix(0, 3) = 0;//沿x轴移动0.m
	transformation_matrix(1, 3) = 0;//沿y轴移动0.m
	transformation_matrix(2, 3) = 0.04;//沿z轴移动0.04m

	pcl::transformPointCloud(*cloud_in, *cloud_icp, transformation_matrix);//执行变换

3、icp配准

	pcl::IterativeClosestPoint<pcl::PointXYZ,pcl::PointXYZ> icp;//配准对象
	icp.setInputSource(cloud_icp);
	icp.setInputTarget(cloud_in);
	/*icp.setEuclideanFitnessEpsilon(0.1);
	icp.setRANSACIterations(10);
	icp.setTransformationEpsilon(1e-6);*/
	icp.align(*cloud_icp);

	icp.setMaximumIterations(1);//迭代一次

4、点云可视化

//可视化
	pcl::visualization::PCLVisualizer viewer("ICP demo");
	//创建两个视口
	int v1(0);
	int v2(1);
	viewer.createViewPort(0, 0, 0.5, 1, v1);
	viewer.createViewPort(0.5, 0, 1, 1, v2);
	//颜色
	float bckgr_gray_level = 0.0;//黑色
	float txt_gray_lvl = 1.0 - bckgr_gray_level;

	//原始点云 白色
	pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> cloud_in_color_h
		(cloud_in, (int)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值