/*
p_p : position_pexil  ;  p_c:position_camera  ; p_w : position_world ; T_c_w : 欧式矩阵(包含R,t信息) from camera to world cpp功能:实现关于pexil,camera,world的任意两者间的坐标转换。pixel2world的实现是能过两步实现的: pixel -> camera ,进而 camera -> world ,反之, world2pixel 也一样。
*/
#include "myslam/camera.h"namespace myslam
{Camera::Camera()
{}Vector3d Camera::world2camera ( const Vector3d& p_w, const SE3& T_c_w )
{return T_c_w*p_w; // T_c_w即欧式矩阵,包含R,t的信息,公式为 T * P_world
}Vector3d Camera::camera2world ( const Vector3d& p_c, const SE3& T_c_w )
{return T_c_w.inverse() *p_c;
}//为什么p_c用两个值来索引,它不是一维向量吗?
//the convenience Vector3f is a (column) vector of 3 floats. It is defined as follows by Eigen:   Matrix<float, 3, 1> Vector3f;
//We also offer convenience typedefs for row-vectors, for example: Matrix<int, 1, 2> RowVector2i;
//so Vector3d is a  column vector ,they have 3 rows;
Vector2d Camera::camera2pixel ( const Vector3d& p_c )
{return Vector2d (//参照书本5.5的公式fx_ * p_c ( 0,0 ) / p_c ( 2,0 ) + cx_,fy_ * p_c ( 1,0 ) / p_c ( 2,0 ) + cy_);
}Vector3d Camera::pixel2camera ( const Vector2d& p_p, double depth )
{return Vector3d (//参照书本5.5的公式,depth 即为公式的Z。( p_p ( 0,0 )-cx_ ) *depth/fx_,( p_p ( 1,0 )-cy_ ) *depth/fy_,depth);
}Vector2d Camera::world2pixel ( const Vector3d& p_w, const SE3& T_c_w )
{return camera2pixel ( world2camera ( p_w, T_c_w ) );
}Vector3d Camera::pixel2world ( const Vector2d& p_p, const SE3& T_c_w, double depth )
{return camera2world ( pixel2camera ( p_p, depth ), T_c_w );
}}

SLAM中“camera类中坐标转换方法解读相关推荐

  1. idea中查看类中所有方法列表(Alt+7)(亲测)

    idea中查看类中所有方法列表 当我们在开发中,或者在读别人代码时,如何能快速定位到想看的方法: 我们以activiti中的RepositoryService为例,如下图,RepositoryServ ...

  2. C++中若类中没有默认构造函数,如何使用对象数组

    前言: 如果定义一个类,有其默认的构造函数,则使用new动态实例化一个对象数组,不是件难事,如下代码: 1 #include <memory> 2 #include <iostrea ...

  3. python中同一个类中方法之间的变量怎么调用

    class A:A = "你好"def test_a(self):self.m = "hello" #实例变量def test_b(self):self.tes ...

  4. C++中模板类中的成员函数以及模板函数在类外定义

    在C++中,类中的成员函数可以在类外完成定义,从而显得类中的成员函数看起来简洁明了.但是模板类里的成员函数和模板函数与普通的成员函数在类外定义不同. 先定义一个模板类以及成员函数和模板函数: 接下我们 ...

  5. C#中File类中文件的读取写入

    C#中File类中文件的读取写入 注意:使用File读取写入文件非常简单,但FIle的操作方式决定只能读取小文件,读写时全部加载进行读取.读写大文件时建议使用文件流. 常用方法 //获取所有编码方式 ...

  6. PHP中的类与对象详细解读

    1. 类与对象 类是面向对象程序设计的基本概念,是一类东西的结构描述 , 是一种抽象的概念 . 对象是一类东西的一个具体的实例 , 是具体事物 . 对象通过new关键字进行实例化: 比如汽车可以抽象为 ...

  7. java中File类中list()和listFiles()方法区别

    list()和listFiles()方法区别: 1.返回值类型不同:前者为String数组,后者为File对象数组 2.数组中元素内容不同:前者为string类型的[文件名](包含后缀名),后者为Fi ...

  8. java程序中出现两个class,Java中Class类中两个值得注意的进行类型动态转换的方法...

    Java中的Class类有两个重要的方法:cast()和asSubclass().这两个方法都是用于Class类进行运行时(run-time)阶段的类型转换的.下面来看看他们的定义和使用: 第一个方法 ...

  9. java中string的方法_java中String类中的常用方法

    @Test public void testToString2() {  /**   * 他会调用toString方法 他调用的其实是Object类中的toString方法 引用会隐式调用toStri ...

最新文章

  1. java 类定义_JAVA类与对象(二)----类定义基础
  2. java bean销毁,销毁Spring Bean的三种方法
  3. AJP认证信息爆破ajp_brute
  4. goland 设置project gopath
  5. 柴油发电机并机母线之间母联的设置分析
  6. javascript:闭包的总结
  7. Inception-v4,Inception-ResNet论文笔记
  8. matplotlib绘制平滑曲线
  9. rea t插件 vscode_VSCode构建汇编语言环境(配置VSCode自动调用dosbox编译运行MASM/TASM程序)...
  10. [2019南京网络赛D题]Robots
  11. lightblue使用教程_使用LightBlue Bean和IFTTT自动化LIFX灯
  12. 【STM32H7的DSP教程】第48章 STM32H7的中值滤波器实现,适合噪声和脉冲过滤(支持逐个数据的实时滤波)
  13. 二级域名使用https证书注意事项
  14. java截取文件名后缀
  15. jle汇编_汇编学习之路
  16. 流程配置中,什么是会签/或签(竞签)
  17. 传输层——计算机网络
  18. The JAVA_HOME environment variable is not defined correctly的解决方法
  19. Android触摸事件派发(一) ViewGroup的dispatchTouchEvent()
  20. 概率统计Python计算:用样本均值和方差计算总体参数的点估计

热门文章

  1. ArcGIS教程:面积制表
  2. Logstash:Grok filter 入门
  3. 按键精灵---插件之后台发送字符串
  4. linux 串口 设置rts,linux内核关于uart2配置为RTS引脚时,串口无法使用的问题
  5. JAVA的异常处理机制有什么好处,你造吗?
  6. 素描的正方体怎么绘制面
  7. Microsoft Excel 2010表最多容纳的行数
  8. pets vs cattle
  9. 【吴恩达深度学习编程作业】4.4特殊应用——人脸识别和神经风格转换(问题未解决)
  10. 支付宝无障碍体验提升之路