1.之前仍然是需要创建find_feature_matches,和pixel2cam,一个是用来匹配描述子的,一个是把像素坐标转成归一化平面坐标的。里面的变量都要带上&。
2.因为是3d-3d.所以这里读取了两个深度图。depth1,depth2.跟之前一样。不同的是第二张图片的像素坐标也要转成空间点坐标。转成空间点坐标不需要旋转和平移。
ushort d1=depth.ptr<unsigned short>(int(keypoints_1[m.queryIdx].pt.y)[int(keypoints_1[m.queryIdx].pt.x]
这里就把.pt看成是坐标块。
float dd1=float(d1)/1000.0;
Point2d p1,p2;
p1=pixel2cam(keypoints_1[m.queryIdx].pt,K]也不是坐标块。
pts1.pushback(Point3f(p1.x*dd1,p1.y*dd1,dd1))
3.定义了一个函数pose_estimation_3d3d,里面变量就是pts1,pts2,R,t.R,t是求的结过。所以知道pts1,pts2就可以了。
先计算质心Point3f p1,p2.计算完质心,计算pts1,pts2的去质心坐标,并赋值给q1,q2.然后算W
W为qi*qi.transpose.要保证形式是Eigen::Vector3d.
接下来只需要把w放进Eigen::JacobiSVD函数里面就可以了
Eigen::JacobiSVD svd(w,Eigen::MatrixComputeFullU|Eigen::MatrixComputerFullV)
然后定义U,V
Eigen::Matrix3d U,V.
U=svd.matrixU();
V=svd.matrixV();
R_=U*(V.transpose())
t_=Eigen::Vector3d(p1)-R*Eigen::Vector3d(p2);
然后把R_和t_转成R,t就可以了。就是R=Mat_double(3,3)<<R_(0,0)这种。
这里求出的R,t是第二帧到第一帧的变换。而实际上要求的是第一帧到第二帧的变换。所以对R,t求逆。
R 的逆就是它的转置。R.t().t的逆是-R.t()*t.
这样位姿就求出来了。

ICP 求解相机思路的更多相关文章

  1. 相机位姿求解——P3P问题

    1.位姿求解是计算机视觉中经常遇到的,Perspective-n-Points, PnP(P3P)提供了一种解决方案,它是一种由3D-2D的位姿求解方式,即需要已知匹配的3D点和图像2D点.目前遇到的 ...

  2. 相机位姿估计0:基本原理之如何解PNP问题

    关键词:相机位姿估计 PNP问题求解 用途:各种位姿估计 文章类型:原理 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-18 @Lab: CvLa ...

  3. leetcode 315. Count of Smaller Numbers After Self 两种思路(欢迎探讨更优解法)

    说来惭愧,已经四个月没有切 leetcode 上的题目了. 虽然工作中很少(几乎)没有用到什么高级算法,数据结构,但是我一直坚信 "任何语言都会过时,只有数据结构和算法才能永恒". ...

  4. SLAM入门之视觉里程计(2):相机模型(内参数,外参数)

    相机成像的过程实际是将真实的三维空间中的三维点映射到成像平面(二维空间)过程,可以简单的使用小孔成像模型来描述该过程,以了解成像过程中三维空间到二位图像空间的变换过程. 本文包含两部分内容,首先介绍小 ...

  5. 使用三种方法求解前N个正整数的排列

    本篇博文给大家介绍前N个正整数的排列求解的三种方式.第一种是暴力求解法:第二种则另外声明了一个长度为N的数组,并且将已经排列过的数字保存其中:第三种方式则采用了另外一种思路,即首先获取N个整数的升序排 ...

  6. python+opencv2相机位姿估计

    最近在做基于图像的室内定位方面的研究,于是使用到了百度最新的室内数据库Image-based Localization (IBL) .由于该数据库给出的数据是每幅图像和其对应相机的内外参数和光心投影方 ...

  7. OpenCV相机标定

    标签(空格分隔): Opencv 相机标定是图像处理的基础,虽然相机使用的是小孔成像模型,但是由于小孔的透光非常有限,所以需要使用透镜聚焦足够多的光线.在使用的过程中,需要知道相机的焦距.成像中心以及 ...

  8. leetcode 315. Count of Smaller Numbers After Self 两种思路

    说来惭愧,已经四个月没有切 leetcode 上的题目了. 虽然工作中很少(几乎)没有用到什么高级算法,数据结构,但是我一直坚信 "任何语言都会过时,只有数据结构和算法才能永恒". ...

  9. LeetCode 37 Sudoku Solver(求解数独)

    题目链接: https://leetcode.com/problems/sudoku-solver/?tab=Description   Problem : 解决数独问题,给出一个二维数组,将这个数独 ...

随机推荐

  1. CSRF介绍与应对以及Java代码示例

    详细信息看这里:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/ 简介 CSRF(Cross Site Request Forg ...

  2. TI_DSP_SRIO - package type(包格式)

    1.The type of SRIO packageis determined by the combination of Ftype(format type) and Ttype(transacti ...

  3. JAVA问题之泛型数组

      java中类似下面的代码编译器是会报错的: LinkedList<LinkedList<String>>[] li=new LinkedList<LinkedList ...

  4. oracle查看表占用磁盘空间

    SELECT T.OWNER, T.SEGMENT_NAME, SUM(T.BYTES) / 1024 / 1024 M  FROM DBA_SEGMENTS T WHERE T.OWNER = 'u ...

  5. 怎样取消不能改动(仅仅读打开)的word文件的password

    作者:iamlaosong 朋友给我一个文档,是加了防改动password的,希望我能帮其取消.由于须要原文档的格式,取消方法例如以下(office2007环境): 1.打开文件.文件打开时,提演示样 ...

  6. udp广播和多播

    使用UDP协议进行信息的传输之前不需要建立链接, 客户端向服务器发送信息时,客户端只需要给出服务器的ip地址和端口号,可以发送信息.至于服务器端是否存在,是否能够收到该报文,客户端根本不用管. 广播( ...

  7. oracle 累加功能,累加百分比

    最近做数据分析,需要用到累加功能,发现强大的oracle还真有,用over(order by field) 例子: 数据表中最后一列就是累加的效果 累加sql: select t.acc_pedal_ ...

  8. X264学习1:简介

    H.264是视频编码标准. X264是它的开源实现,是视频编码器. 目录 [隐藏]  1 编码器特性 2 输入输出文件类型 2.1 输入 2.2 输出 3 preset和tune系统 3.1 --pr ...

  9. YUM安装(卸载)KDE和GNOME

    YUM安装(卸载)KDE和GNOME显示系统已经安装的组件,和可以安装的组件:#yum grouplist 如果系统安装之初采用最小化安装,没有安装xwindow,那么先安装:#yum groupin ...

  10. Windows下搭建React Native Android开发环境

    准备工作 安装JDK 安装Android SDK 安装C++环境 安装node.js 安装react-native命令行工具 创建项目 运行packager 运行模拟器 安卓运行 安卓调试 安装JDK ...