VR技术:在VTK中构建一个与真实世界一样的虚拟相机,具有对应的运动映射。

一、解析

当我们使用SLAM技术获得相机的位姿Tcw时(即从世界坐标到相机坐标的映射矩阵),我们需要在VTK中建立一个一模一样的相机,并建立相同的运动映射。相机的位姿总共有六个自由度,在VTK中也应该有六个自由度。我们可以利用vtk的三个函数来进行设定:

aCamera->setFocalPoint(); //f=2
aCamera->setPosition();   //f=3
aCamera->setViewUp();     //f=1

前两个函数决定了5个自由度,最后一个决定了1个自由度

常用相机的坐标系如图所示:

在VTK中相机位姿的表达:

从图中我们可以确定的是,相机的位置(Position)表达是一样的,focalPoint是在相机的Z方向的,viewup是在常用坐标系y轴的负方向,这样我们就可以确定映射关系。

对于外参矩阵Tcw,可以拆成旋转矩阵Rcw 和平移矩阵 tcw,相机的位置可以表示为:
Pw=−RcwT⋅tcwP_w = -R_{cw}^T\cdot t_{cw} Pw​=−RcwT​⋅tcw​
对于focalPoint,由相机的位置postionfocalPoint可以确定相机的朝向,这里就是常用坐标系的Z坐标轴方向。旋转矩阵的行、列分别代表了不同的意义:
行:Oxwc,Oywc,Ozwc列:Nxcw,Nycw,Nzcw行:Ox_{wc},Oy_{wc},Oz_{wc}\\ 列:Nx_{cw},Ny_{cw},Nz_{cw} 行:Oxwc​,Oywc​,Ozwc​列:Nxcw​,Nycw​,Nzcw​
行代表相机坐标的x,y,z轴在世界坐标系下的方向,列代表世界坐标系x,y,z轴在相机坐标系下的方向。这里只取旋转矩阵的第三行:Rcw.row(2)R_{cw}.row(2)Rcw​.row(2)就能得到positionfocalPoint也就是相机坐标Z轴的方向向量,同时第二行的负值:−Rcw.row(1)-R_{cw}.row(1)−Rcw​.row(1)就能代表viewUp.

二、方法

R = Tcw.rotation()
t = Tcw.translation()eye = - R.transpose() * t          //位置
focus = eye + R.row(2).transpose() //focalPoint 的位置(相机Z轴)
up = - R.row(1)                    //up方向(相机y轴负方向)aCamera->setPosition(eye);
aCamera->setFocalPoint(focus);
aCamera->setViewUp(up);

最后重置视平面法向量:

aCamera->ComputeViewPlaneNormal()

显示:

ren->SetActiveCamera(aCamera)
ren->ResetCameraClippingRange();
renwin->Render();

VTK(二)---相机外参矩阵Tcw转VTK相机,构建VR虚拟相机相关推荐

  1. 【自动驾驶】31.【相机外参标定】、【相机障碍物后处理】【地面的2D点反投影到3D】的过程对比

    相机的平移向量一般标定到imu坐标系或者车身坐标系,欧拉角 yaw.pitch.roll\color{red}yaw.pitch.rollyaw.pitch.roll是相对于前向相机坐标系的位姿: 前 ...

  2. 基于先验时间一致性车道线的IPM相机外参标定

    文章:Online Extrinsic Camera Calibration for Temporally Consistent IPM Using Lane Boundary Observation ...

  3. mlcc激光雷达与相机外参标定初体验

    论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章.公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信diany ...

  4. cam_lidar_calibration标定速腾激光雷达和单目相机外参

    目录 一.资源链接 二.代码测试 2.1安装依赖 2.2代码下载和修改 2.2.1 optimiser.h文件 2.2.2 feature_extractor.h文件 2.3编译代码 2.4测试数据集 ...

  5. 【学习总结】激光雷达与相机外参标定:原理与代码1

    2023年2月重要补充 这个代码我个人觉得不好用且坑太多,所以后来换了一个.推荐大家用新的代码. 详见更新的一篇博客总结:[学习总结]激光雷达与相机外参标定:代码(cam_lidar_calibrat ...

  6. Halcon 4点单标相机外参

    1. 单标外参使用背景 如果摄像机系统没有变化,只是测量面发生了移动或旋转,此时重标相机外参可以解决问题,这种方法可以解决斜测的问题. 2. 主要函数: vector_to_pose( : : Wor ...

  7. 小觅相机的相机标定全家桶(相机IMU,相机内参,相机外参)

    性感帅哥博主在线标定小觅双目相机!!!(亲测有效系列!) 刚刚入手新小觅相机,结果飘出天际,很让人头疼!所以- 话不多说,开始骚操作! mkdir mynt_ws #创建文件夹 cd ~/mynt_w ...

  8. 根据相机外参实现单应矩阵计算的理论与实践

    论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章.公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信diany ...

  9. 激光雷达与相机外参标定(附open3d python代码)

    现在的激光雷达与相机的标定程序基本都是Ubuntu框架下面的,并且都是C++代码,需要安装的依赖也比较复杂,于是自己写了一个python版本的标定程序,依赖非常简单,Windows系统也可以运行.并且 ...

  10. 使用球面目标自动标定雷达-相机外参

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 泡泡点云时空,带你精读点云领域顶级会议文章 标题:Automatic LiDAR-Camera Cal ...

最新文章

  1. 一页纸项目管理方法(OOPM)背后的思想
  2. python 类-Python的类
  3. ASP.NET 网站管理工具中的“安全”制表页
  4. elasticsearch in查询_Python Elasticsearch DSL 查询、过滤、聚合操作实例
  5. linux socket 面试题,面试题
  6. python 全局变量使用报错没有定义_Python变量作用域代码解析
  7. 使用PostgREST的RestAPI操作之相关软件生态系统
  8. C语言函数一章教学,C语言-第1章教学案.doc
  9. NPOI导出Excel示例
  10. 线性表_栈_逆波兰计算式(Reverse Polish Notation)
  11. STM32固件库官方下载地址
  12. 红月3.8登入器重新设计并且支持窗口化兼容win10
  13. vf计算机教程,VF教程,打印版.pdf
  14. 利用shell删除labelme打错的标签
  15. windows下如何创建bat文件
  16. 华为手机如何连接到电脑
  17. win 访问linux加密硬盘分区,手把手教你使用BitLocker给win10硬盘分区加密的方法
  18. oracle已经创建表空间不存在,oracle表空间的创建、删除、查看、表空间不存在、及修改默认表空间详解...
  19. 使用spool导出数据
  20. 通过CAN总线控制VESC驱动直流无刷电机

热门文章

  1. python爬虫需要学哪些知识_Python爬虫需要学习那些东西?
  2. mysql编译安装原理_Mysql源码编译安装主从复制
  3. 服务器网站出现service,网站出现service unavailable的解决方法
  4. Slowquery图形化显示MySQL慢日志工具
  5. Android 学习思维导图
  6. vim个性化设置---给脚本文件加注释头信息
  7. APICloud连接夜神模拟器--博客园老牛大讲堂
  8. UESTC 574 High-level ancients
  9. LeetCode - Duplicate Emails
  10. Android 虚拟机快捷键