【视觉SLAM】4b-特征点法估计相机运动之PnP 3D-2D
文章目录
- 0. 前言
- 1. PnP求解
- 1.1 直接线性变换DLT
- 1.2 P3P
- 1.3 光束平差法BA
- 2. 实现
0. 前言
透视n点(Perspective-n-Point,PnP)问题是计算机视觉领域的经典问题,用于求解3D-2D的点运动。换句话说,当知道 N N N个世界坐标系中3D空间点的坐标以及它们在图像上的投影点像素坐标时,可以使用PnP算法来估计相机在世界坐标系的姿态。P3P是最简化的PnP形式,即最少只需3个点即可估计当前的相机姿态(解不唯一)。
总体来说,PnP的求解方法有P3P、直接线性变换(Direct Linear Transformation,DLT)、EPnP(Efficient PnP)和UPnP等。此外,还有非线性优化解法,通过构建最小二乘问题并迭代求解,即万金油式的光束平差法(Bundle Adjustment,BA) 。
1. PnP求解
1.1 直接线性变换DLT
假设有世界坐标系中的3D点 P = [ X , Y , Z , 1 ] T P=[X, Y, Z, 1]^T P=[X,Y,Z,1]T,在图像 I 1 I_1 I1中对应的投影像素点为 x 1 = [ u 1 , v 1 , 1 ] T x_1=[u_1, v_1, 1]^T x1=[u1,v1,1]T,根据相机小孔成像模型有:
s [ u 1 v 1 1 ] = [ R ∣ t ] P = [ t 1 t 2 t 3 t 4 t 5 t 6 t 7 t 8 t 9 t 10 t 11 t 12 ] [ X Y Z 1 ] s \begin{bmatrix} u_1 \\ v_1 \\ 1 \end{bmatrix}= \begin{bmatrix} R | t \end{bmatrix} P= \begin{bmatrix} t_1 & t_2 & t_3 & t_4 \\ t_5 & t_6 & t_7 & t_8 \\ t_9 & t_{10} & t_{11} & t_{12} \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \\ 1 \end{bmatrix} s u1v11 =[R∣t]P= t1t5t9t2t6t10t3t7t11t4t8t12 XYZ1
其中 s = Z s=Z s=Z,利用最后一行将其消去有:
{ s u 1 = t 1 X + t 2 Y + t 3 Z + t 4 s v 1 = t 5 X + t 6 Y + t 7 Z + t 8 s = t 9 X + t 10 Y + t 11 Z + t 12 ⇒ { u 1 = t 1 X + t 2 Y + t 3 Z + t 4 t 9 X + t 10 Y + t 11 Z + t 12 v 1 = t 5 X + t 6 Y + t 7 Z + t 8 t 9 X + t 10 Y + t 11 Z + t 12 \begin{cases} s u_1 = t_1 X + t_2 Y + t_3 Z + t_4\\ s v_1 = t_5 X + t_6 Y + t_7 Z + t_8\\ s = t_9 X + t_{10} Y + t_{11} Z + t_{12} \end{cases} \Rightarrow \begin{cases} u_1 = \frac{t_1 X + t_2 Y + t_3 Z + t_4}{t_9 X + t_{10} Y + t_{11} Z + t_{12}} \\ v_1 = \frac{t_5 X + t_6 Y + t_7 Z + t_8}{t_9 X + t_{10} Y + t_{11} Z + t_{12}} \\ \end{cases} \\ ⎩ ⎨ ⎧su1=t1X+t2Y+t3Z+t4sv1=t5X+t6
相关文章:
【视觉SLAM】4b-特征点法估计相机运动之PnP 3D-2D
文章目录 0. 前言1. PnP求解1.1 直接线性变换DLT1.2 P3P1.3 光束平差法BA2. 实现0. 前言 透视n点(Perspective-n-Point,PnP)问题是计算机视觉领域的经典问题,用于求解3D-2D的点运动。换句话说,当知道 N N N个世界坐标系中3D空间点的坐标以及它们在图像上的投影点像素坐标…...
android 性能分析工具(04)Asan 内存检测工具
1 Asan工具简介 1.1 Asan工具历史背景 AddressSanitizer(ASan)最初由Google开发,并作为LLVM项目的一部分。ASan的设计目的是帮助开发者检测并修复内存错误,如堆栈和全局缓冲区溢出、使用已释放的内存等,这些问题可能…...
html中select标签的选项携带多个值
搜索参考资料:SELECT标签中的选项可以携带多个值吗? 【摘抄】: 它可能有一个select选项中的多个值,如下所示。 <select id"ddlEmployee" class"form-control"> <option value"">-- S…...
Lambda表达式如何进行调试
一、概述 Java8提供了lambda表达式,方便我们对数据集合进行操作,我们使用lambda表达式的时候,是不是有这样的疑问,如何对执行过程中的中间数据进行调试呢? 二、例子 在下面的例子中,我们实现随机最多生成…...
C++ —— 剑斩旧我 破茧成蝶—C++11
江河入海,知识涌动,这是我参与江海计划的第2篇。 目录 1. C11的发展历史 2. 列表初始化 2.1 C98传统的{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3. 右值引用和移动语义 3.1 左值和右值 3.2 左值引用和右值引用 3.3 引用延长生命周期…...
HTML5好看的音乐播放器多种风格(附源码)
文章目录 1.设计来源1.1 音乐播放器风格1效果1.2 音乐播放器风格2效果1.3 音乐播放器风格3效果1.4 音乐播放器风格4效果1.5 音乐播放器风格5效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者&…...
C++设计模式行为模式———迭代器模式中介者模式
文章目录 一、引言二、中介者模式三、总结 一、引言 中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。 中介者模式可以减少对象之间混乱无序的依赖关系&…...
FFmpeg 4.3 音视频-多路H265监控录放C++开发十五,解码相关,将h264文件进行帧分隔变成avpacket
前提 前面我们学习了 将YUV数据读取到AVFrame,然后将AVFrame通过 h264编码器变成 AVPacket后,然后将avpacket直接存储到了本地就变成了h264文件。 这一节课,学习解码的一部分。我们需要将 本地存储的h264文件进行帧分隔,也就是变…...
力扣 LeetCode 104. 二叉树的最大深度(Day7:二叉树)
解题思路: 采用后序遍历 首先要区别好什么是高度,什么是深度 最大深度实际上就是根节点的高度 高度的求法是从下往上传,从下往上传实际上就是左右中(后序遍历) 深度的求法是从上往下去寻找 所以采用从下往上 本…...
如何高效实现汤臣倍健营销云数据集成到SQLServer
新版订单同步-(Life-Space)江油泰熙:汤臣倍健营销云数据集成到SQL Server 在企业信息化建设中,数据的高效集成和管理是提升业务运营效率的关键。本文将分享一个实际案例——如何通过新版订单同步方案,将汤臣倍健营销云…...
Vue3中使用:deep修改element-plus的样式无效怎么办?
前言:当我们用 vue3 :deep() 处理 elementui 中 el-dialog_body和el-dislog__header 的时候样式一直无法生效,遇到这种情况怎么办? 解决办法: 1.直接在 dialog 上面增加class 我试过,也不起作用,最后用这种…...
具身智能之Isaac Gym使用
0. 简介 Isaac Gym 是由 NVIDIA 提供的一个高性能仿真平台,专门用于大规模的机器人学习和强化学习(RL)任务。它结合了物理仿真、GPU加速、深度学习框架互操作性等特点,使得研究人员和开发者可以快速进行复杂的机器人仿真和训练。…...
【大数据学习 | Spark】spark-shell开发
spark的代码分为两种 本地代码在driver端直接解析执行没有后续 集群代码,会在driver端进行解析,然后让多个机器进行集群形式的执行计算 spark-shell --master spark://nn1:7077 --executor-cores 2 --executor-memory 2G sc.textFile("/home/ha…...
《Python制作动态爱心粒子特效》
一、实现思路 粒子效果: – 使用Pygame模拟粒子运动,粒子会以爱心的轨迹分布并运动。爱心公式: 爱心的数学公式: x16sin 3 (t),y13cos(t)−5cos(2t)−2cos(3t)−cos(4t) 参数 t t 的范围决定爱心形状。 动态效果: 粒子…...
Jmeter 如何导入证书并调用https请求
Jmeter 如何导入证书并调用https请求 通过SSL管理器添加证书文件 支持添加的文件为.p12,.pfx,.jks 如何将pem文件转换为pfx文件? 在公司内部通常会提供3个pem文件。 ca.pem:可以理解为是根证书,用于验证颁发的证…...
Python程序15个提速优化方法
目录 Python程序15个提速优化方法1. 引言2. 方法一:使用内建函数代码示例:解释: 3. 方法二:避免使用全局变量代码示例:解释: 4. 方法三:使用局部变量代码示例:解释: 5. 方…...
足球虚拟越位线技术FIFA OT(二)
足球虚拟越位线技术FIFA OT(二) 在FIFA认证测试过程中,留给VAR系统绘制越位线的时间只有90秒(在比赛中时间可能更短),那么90秒内要做什么事呢,首先场地上球员做出踢球动作,然后VAR要…...
centos7.9单机版安装K8s
1.安装docker [rootlocalhost ~]# hostnamectl set-hostname master [rootlocalhost ~]# bash [rootmaster ~]# mv /etc/yum.repos.d/* /home [rootmaster ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [rootmaster ~]# cu…...
图像编辑一些概念:Image Reconstruction与Image Re-generation
图像编辑本质上是在“图像重建”(image reconstruction)和“图像再生成”(image re-generation)之间寻找平衡。 1. Image Reconstruction(图像重建) 定义:图像重建通常是指从已有的图像中提取信…...
【STM32】在 STM32 USB 设备库添加新的设备类
说实话,我非常想吐槽 STM32 的 USB device library,总感觉很混乱。 USB Device library architecture 根据架构图: Adding a custom class 如果你想添加新的设备类,必须修改的文件有 usbd_desc.cusbd_conf.cusb_device.c 需要…...
数字边境守卫:拦截偷渡的非法算法
一、数字边境的隐喻:软件测试的守卫使命在数字化浪潮中,软件系统如同虚拟国境线,非法算法则似试图偷渡的入侵者。软件测试工程师正是这条边境的守卫者——通过精准的测试策略构建防御工事,拦截逻辑漏洞、数据泄露、恶意代码等&quo…...
论文AI率怎么稳过知网维普?2026最新基准测试:5款实测工具教你一次定稿
知网AIGC检测2026最新攻略!亲测有效,AI率从70%压到9% 自从2026年知网AIGC检测系统全面迭代升级,全国高校几乎统一把AI写作率合格线卡死在15%以内,身边同学因为AI率超标被打回重改、延迟答辩的比比皆是。 这段时间我试遍了全网所…...
分布式能力不是功能,而是一种架构约束
网罗开发(小红书、快手、视频号同名)大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方…...
Bypass Paywalls Clean完全使用指南:突破网络内容访问限制的开源方案
Bypass Paywalls Clean完全使用指南:突破网络内容访问限制的开源方案 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 当你急需查阅重要新闻却遭遇付费墙阻挡时,…...
Step3-VL-10B-Base与卷积神经网络结合:图像理解性能提升
Step3-VL-10B-Base与卷积神经网络结合:图像理解性能提升 在图像识别任务中,传统卷积神经网络(CNN)虽然擅长提取局部特征,但在处理复杂语义理解、多模态上下文推理等任务时往往表现有限。而视觉-语言大模型(…...
SkyWalking 9.7.0与Elasticsearch 8.17.4集成避坑指南:证书转换那些事儿
SkyWalking 9.7.0与Elasticsearch 8.17.4深度集成实战:证书转换与安全通信全解析 当分布式系统的可观测性需求遇上Elasticsearch 8.x强化的安全机制,SkyWalking集成过程中的证书问题往往成为技术人员的"拦路虎"。本文将带您穿透PEM与PKCS12的格…...
前端工程化实战:用changeset的预发布模式管理Beta版本(含Monorepo示例)
前端工程化实战:用Changeset的预发布模式管理Beta版本(含Monorepo示例) 在Monorepo架构下管理多个npm包的版本发布,一直是前端开发者面临的挑战之一。特别是当项目进入频繁迭代阶段,如何在保证稳定性的同时,…...
开源社区运营:Qwen1.5-1.8B GPTQ自动回复GitHub Issues与生成Release Note
开源社区运营:用Qwen1.5-1.8B GPTQ自动回复GitHub Issues与生成Release Note 如果你在维护一个开源项目,下面这些场景你一定不陌生:每天打开GitHub,通知栏里又多了几十条未读Issues,有报Bug的,有提新功能想…...
vLLM-v0.17.1赋能Vue.js前端项目:打造实时AI聊天界面
vLLM-v0.17.1赋能Vue.js前端项目:打造实时AI聊天界面 1. 项目背景与核心价值 在当今AI应用爆发式增长的背景下,如何将大模型能力无缝集成到前端界面成为开发者面临的实际挑战。vLLM作为高性能推理框架的最新版本(v0.17.1)&#…...
RexUniNLU在新闻推荐系统中的个性化匹配技术
RexUniNLU在新闻推荐系统中的个性化匹配技术 每天面对海量新闻资讯,你是否也曾感到信息过载?推荐系统如何从千万篇文章中精准找到你最感兴趣的内容?今天我们一起看看RexUniNLU如何通过深度理解实现更智能的新闻匹配。 1. 新闻推荐的挑战与机遇…...
