高翔博士SLAM十四讲(第二篇)

ch7 视觉里程计1

库的基本使用见上一篇,本篇侧重于:1.利用库实现算法;2.或库自带的算法的使用
高博写的简介明了(建议读),这里仅做一下总结。
【这部分内容的本质就是去求解 位姿 R, t (各种情况下的)】

第一部分 对极几何,2D-2D图像之间的摄像机三维运动

步骤(特征匹配的)实现
读取图像cv::Mat img_1 = cv:: imread ( argv[1], CV_LOAD_IMAGE_COLOR );
初始化
存放关键点的变量std::vector<cv::KeyPoint> keypoints_1, keypoints_2; 类型 KeyPoint
存放描述子的变量cv::Mat descriptors_1, descriptors_2; 类型 Mat
存放匹配关系的变量std::vector<cv::DMatch> matches; 类型 DMatch
关键点检测器cv::Ptr<cv::FeatureDetector> detector = cv::ORB::create(); ORB
描述子计算器cv::Ptr<cv::DescriptorExtractor> descriptor = cv::ORB::create(); ORB
匹配器cv::Ptr<cv::DescriptorMatcher> matcher = cv::DescriptorMatcher::create ( "BruteForce-Hamming" ); 暴力匹配+汉明距离度量
步骤
1.检测给定图片关键点detector->detect ( img_1,keypoints_1 );
2.计算关键点的描述子descriptor->compute ( img_1, keypoints_1, descriptors_1 );
3.匹配matcher->match ( descriptors_1, descriptors_2, matches );
4.筛选if ( matches[i].distance <= max ( 2*min_dist, 30.0 ) ) good_matches.push_back ( matches[i] );
绘图+imshow+waitKey(0)
cv::drawMatches ( img_1, keypoints_1, img_2, keypoints_2, good_matches, img_goodmatch );
步骤(利用前面的特征匹配,求得位姿的)实现
1.前面的内容,特征提取与匹配find_feature_matches ( img_1, img_2, keypoints_1, keypoints_2, matches ); 高博将前面的内容封装成了函数
2.根据特征匹配,求出位姿,即R和tpose_estimation_2d2d ( keypoints_1, keypoints_2, matches, R, t ); 此亦为高博封装的函数,是本节的总结的重点
pose_estimation_2d2d的流程
2.1计算本质矩阵essential_matrix = cv::findEssentialMat ( points1, points2, focal_length, principal_point );
2.2从本质矩阵解出R,tcv::recoverPose ( essential_matrix, points1, points2, R, t, focal_length, principal_point );
参数解释focal_lengthprincipal_point是相机的内参,points1points2是两幅图的匹配的特征点(注意元素顺序并放在vector里),这两个函数均为opencv自带(本质上只需为它提供所需参数)
*步骤(根据前面特征点对,两幅图各自的位姿,求解特征点对应的世界坐标的)实现
*3.即,三角测量cv::triangulatePoints( T1, T2, pts_1, pts_2, pts_4d );
高博将其封装为triangulation(),核心即上面一句,其余部分为参数准备及结果处理

第二部分 PNP 已知世界坐标(3D)和像素坐标(2D)求解相机运动

步骤实现
核心一句cv::solvePnP ( pts_3d, pts_2d, K, Mat(), r, t, false,cv::SOLVEPNP_EPNP );
输入参数解释3D-2D对:pts_3dpts_2d;相机内参及畸变矩阵:KMat()
输出参数解释旋转矢量:r;位移矢量:t;是否优化:false;PnP的解法:SOLVEPNP_EPNP

g2o优化部分先略过

第三部分 ICP 已知3D-3D信息

如,两幅RGB-D图像,求解位姿

步骤实现(高博根据SVD法自己编写的函数)
1求质心两幅图质心分别为: p , p ′ p,p&#x27; p,p
2.各点去质心 q i = p i − p q_i = p_i-p qi=pip
3.求W矩阵 W = Σ i = 1 n q i q i T W=\Sigma^n_{i=1}q_iq^T_i W=Σi=1nqiqiT
4.SVD分解,求R W = U Σ V T , R = U V T W=U\Sigma V^T,R=UV^T W=UΣVT,R=UVT
5.求t t = p − R p ′ t=p-Rp&#x27; t=pRp

g2o优化部分下一步继续

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值