使用ICP得到的变换矩阵更新相机位置
2017-04-14 22:15
309 查看
大多数关于ICP的介绍都是介绍了ICP算法如何配准两个点云,但是没有介绍如何更新相机位置,本文将对此进行介绍。
根据下图的推导过程,计算出M1=M0*M.inverse()。
注:世界坐标系下坐标=相机姿态矩阵*相机坐标系下坐标,这种情况才适用下图中的推导。
部分代码如下:
已知:
点云X0和X1,点云X0对应的相机外参矩阵M0。待求:
点云M1对应的相机外参矩阵M1。过程:
将点云X0作为目标点云,使用PCL的ICP算法计算出:点云X1配准到点云X0的变换矩阵M。根据下图的推导过程,计算出M1=M0*M.inverse()。
注:世界坐标系下坐标=相机姿态矩阵*相机坐标系下坐标,这种情况才适用下图中的推导。
部分代码如下:
// ICP 参数设置 pcl::IterativeClosestPointWithNormals<pcl::PointNormal, pcl::PointNormal> icp; icp.setInputSource(X1); icp.setInputTarget(X0); icp.setMaxCorrespondenceDistance(500); icp.setTransformationEpsilon(1e-10); icp.setEuclideanFitnessEpsilon(0.0001); icp.setMaximumIterations(600); // ICP 迭代 pcl::PointCloud<pcl::PointNormal>::Ptr out(new pcl::PointCloud<pcl::PointNormal>(DEPTH_IMAGE_WIDTH, DEPTH_IMAGE_HEIGHT)); icp.align(*out); // 取出变换矩阵M Eigen::Matrix4f transformation = icp.getFinalTransformation(); Eigen::Matrix4d trans_d; trans_d(0, 0) = transformation(0, 0); trans_d(0, 1) = transformation(0, 1); trans_d(0, 2) = transformation(0, 2); trans_d(0, 3) = transformation(0, 3); trans_d(1, 0) = transformation(1, 0); trans_d(1, 1) = transformation(1, 1); trans_d(1, 2) = transformation(1, 2); trans_d(1, 3) = transformation(1, 3); trans_d(2, 0) = transformation(2, 0); trans_d(2, 1) = transformation(2, 1); trans_d(2, 2) = transformation(2, 2); trans_d(2, 3) = transformation(2, 3); trans_d(3, 0) = transformation(3, 0); trans_d(3, 1) = transformation(3, 1); trans_d(3, 2) = transformation(3, 2); trans_d(3, 3) = transformation(3, 3); // 更新矩阵M1 m_mLastCameraTransRotate = m_mCurCameraTransRotate; m_mCurCameraTransRotate = m_mCurCameraTransRotate * trans_d.inverse();
相关文章推荐
- java第五周(矩阵中数据的位置变换功能、矩阵的加法功能、矩阵的乘法功能)
- 推导相机变换矩阵
- 编解码标准H264 与 AVS 变换矩阵比较 使用的代码
- 使用clementine得到混淆矩阵
- Opengl_20 _复习变换矩阵+复习光源+两个模型使用不同的shader
- android 使用本机相机照相或用本地相册更新imageview里面的图片
- CoreLocation 的基本使用 以及定位 指南针的实现 (附加: 系统版本适配的方法,和后台更新用户位置的方法及注意)
- java使用傅里叶变换,得到变换之后的傅里叶频谱图像。
- 编解码标准H264 与 AVS 变换矩阵比较 使用的代码
- 使用DLT算法求解相机参数及相机与物体的位置关系(附加C/C++和Matlab代码)
- 推导相机变换矩阵
- 使用__FILE__得到当前文件位置
- 推导相机变换矩阵
- 推导相机变换矩阵
- Java上机 第五周 任务6 矩阵中数据的位置变换功能、矩阵的加法功能、矩阵的乘法功能
- 使用SIFT和RANSAC算法,完成特征点的正确匹配,并求出变换矩阵,通过变换矩阵计算出要识别物体的边界
- Matlab 1.矩阵的切割再把得到的矩阵按顺序拼接排列(1维数据按规律转为2维数据方便深度学习使用)
- samtools得到mapping中各个位置覆盖度情况程序,samtools tview的使用
- 相机变换矩阵
- java第七周封装一类对矩阵操作的对象,该类对象能够对矩阵进行运算,如矩阵中数据的位置变换功能、矩阵的加法功能、矩阵的乘法功能。