高翔Slambook第七讲代码解读(2d-2d位姿估计)

本文主要介绍了2d-2d位姿估计在SLAM中的应用,通过分析代码讲解了特征匹配、位姿计算和对极约束验证的过程。文章首先阐述了特征点的2d和3d信息区别,然后详细解读了`pose_estimation_2d2d`函数的实现,包括特征点坐标提取、基础矩阵和本质矩阵的计算,以及R和t的恢复。最后,验证了计算结果满足对极约束。
摘要由CSDN通过智能技术生成

前言:小白创建了一个微信公众号,主要面向学习视觉的小伙伴,分享一些学习过程中的感受和一些技术文章。公众号里文章也会更新在CSDN中,不过由于工作量较大,会出现一段时间的延时,感兴趣的小伙伴可以关注公众号第一时间接受消息。


作者:小白

公众号:小白学视觉


SLAM前端,或者说视觉里程计VO,做的最主要的一件事就是计算或者估计两帧图像之间的位姿变换,也即旋转矩阵R和平移向量t。根据所应用于计算的特征点信息的不同,可分为三类:2d-2d类、3d-2d类、3d-3d类,这取决于我们手头所现有的能拿来做位姿计算的数据形式。倘若我们只知道某个特征点在相机成像平面的位置,也即像素坐标或归一化平面坐标,却不知其深度,那么这将是一个只具备2d信息的特征点;如果我们通过三角化计算,或者通过RGB-D相机直接测得了某点的深度信息,结合其2d信息,我们能够推算其在该帧图像的相机坐标系下的位置,即相机坐标,此时便形成了一个具备3d信息的特征点。

我们不妨首先来看一下2d-2d位姿估计的过程。关于其中所使用的对极几何、对极约束等数学推算,小绿在此不做赘述,而是将重点放在代码上。

先把子函数声明与主函数放在这里:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/calib3d/calib3d.hpp>

using namespace std;
using namespace cv;

void find_feature_matches (
   const Mat& img_1, const Mat& img_2,
   std::vector<KeyPoint>& keypoints_1,
   std::vector<KeyPoint>& keypoints_2,
   std::vector< DMatch >& matches );

void pose_estimation_2d2d (
  const  std::vector<KeyPoint> & keypoints_1,
   const std::vector<KeyPoint> & keypoints_2,
   const std::vector< DMatch > & matches,
   Mat& R, Mat& t );

void verify_polar_constraint(
 const  std::vector<KeyPoint> & keypoints_1,
 const std::vector<KeyPoint> & keypoints_2,
 const Mat& R, const Mat& t,
 const std::vector<DMatch> & matches );


// 像素坐标转相机归一化坐标
Point2d pixel2cam ( const Point2d& p, const Mat& K );

int main ( int argc, char** argv )
{
   if ( argc != 3 )
   {
       cout<<"usage: pose_estimation_2d2d img1 img2"<<endl;
       return 1;
   }
   //-- 读取图像
   Mat img_1 = imread ( argv[1], CV_LOAD_IMAGE_COLOR );
   Mat img_2 = imread ( argv[2], CV_LOAD_IMAGE_COLOR );

   vector<KeyPoint> keypoints_1, keypoints_2;
   vector<DMatch> matches;
   find_feature_matches ( img_1, img_2, keyp
高翔SLAM14》是一本关于SLAM(Simultaneous Localization and Mapping)的经典教材。SLAM是一种在未知环境中实现机器人同时定位和地图构建的技术。这本书是作者高翔根据自己多年的研究和实践经验总结而成,对SLAM算法和应用进行了系统性的介绍和解。 《高翔SLAM14》总共有14,每一都涵盖了不同的主题和领域。从基础概念到算法实现,从视觉SLAM到激光SLAM,从前端感知到后端优化,全方位地介绍了SLAM领域的重要内容。每一都有相应的理论解、实例分析和代码实现,非常适合从事SLAM研究和开发的人员学习和参考。 《高翔SLAM14》着重强调了实际应用和工程实现。通过对现有算法的详细解和示例演示,读者可以更好地理解SLAM的原理和实践方法,并通过代码实现来加深对其应用的理解。无论是学术界的研究人员,还是工业界的工程师,都可以从中获得宝贵的经验和知识。 此外,这本书的语言通俗易懂,图文并茂,对于初学者来说也很友好。通过阅读《高翔SLAM14》,读者能够快速入门SLAM,并从中获得对于SLAM技术的深入了解。该书已经成为SLAM领域的经典教材,广泛被各高校和研究机构采用,并在业界赢得了良好的口碑。 综上所述,《高翔SLAM14》是一本值得阅读的SLAM相关教材。无论是对于SLAM感兴趣的初学者,还是SLAM领域的专业人士,都可以从中获取到丰富的知识和实践经验。阅读这本书,可以帮助读者掌握SLAM的核心概念、算法原理和实现方法,提升在SLAM领域的能力和水平。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学视觉

您的赞赏是我们坚持下去的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值