PnP原理_学之之博未若知之之要知之之要未若行之之实的博客-程序员宅基地_投影方程和pnp的关系

EPnP算法

EPnP算法

相机坐标系用     ,世界坐标系用     表示,任何一点可以用四个控制点      表示

                      

对于相机坐标系同样成立
                      

对于上面的公式,首先需要说明的是     确实存在。因为           构成的方程组是欠定的,所以一定存在解。
理论上来说,控制点可以随便选择,这里选择控制点为参考点的中心,其他的点在PCA得到的主轴上单位长度处,从而提高算法的稳定性。

控制点在相机坐标系的坐标

根据投影方程得到世界坐标系中参考点坐标和相机坐标系中参考点的约束关系:

                       

写成矩阵的形式为:
                                                    

将等式的第三列代入第一二列,得到
                         

                         

因此,可以得到下面的线性方程组:
                    

上面的方程中,四个控制点总共12个未知变量,     的矩阵。因此,   属于   的右零空间,     为矩阵   的右奇异向量,可以通过求解     的零空间特征值得到。
             

[说明]使用     比使用   计算量更少,因为     是求解是常数复杂度,而       的复杂度,但是计算     的复杂度是   的。

选择合适的线性组合

上面求解的   中,需要确定     ,也就是确定合适的线性组合。根据参考点的位置不同,矩阵     的零空间维数可能为   维。求解   的策略是控制点在坐标系         中,两两之间的距离是相同,而     分量表示分别表示不同的控制点在相机坐标系中的坐标,总共有      个约束。
如果   ,则根据约束有

                    

所以
                        

如果  
                                    

由于         只以二次项出现在方程中,记                 的每一项为           ,得到相面的方程
      

其中   是由         构成的   的矩阵。
上面的方程可以通过         得到,然后通过选择合适的符号从             使得所有的      有正的   坐标。

如果   则和   差不多,唯一的区别在于使用的是   的逆,而不是伪逆,此时的     的矩阵。

G-N优化

前面的步骤可以得到目标点在相机坐标系中的闭式解,作为G-N优化的初始值,优化的变量为         ,目标函数为

                        

该优化过程和参考点的数目无关,优化步骤和时间是常数。

计算R,t

前面的两步计算不同维数的零空间的误差,选择误差最小维数对应的   ,从而得到   ,恢复出控制点在相机坐标系中的坐标并根据质心坐标系数得到参考点在相机坐标系的坐标。剩下的工作就是已知一组点云在两个坐标系中的坐标,求两个坐标系的位姿变换。
步骤如下:
(1)求中心点,                      
(2)去中心,                    
(3)计算   矩阵,           
(4)对   进行SVD,    
(5)计算     ,如果   ,则           。否则
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/datase/article/details/78286088

智能推荐

javascript 方法实现千位分隔符(面试题)_webxiaoma的博客-程序员宅基地

面试时遇到过千位分隔符的面试题,下面我总结了一些方法仔细思考:输入:数字(考虑数字是否合法、正负号、小数点)、字符串输出:考虑到使用场景,最好是字符串直接上代码:1.方法一:      function int() {var a=document.getElementById('int').value; var b=a.toStr

稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)_webabcd的博客-程序员宅基地

[索引页][源码下载]稳扎稳打Silverlight(23) - 2.0通信之调用WCF的双向通信(Duplex Service)作者:webabcd介绍Silverlight 2.0 调用 WCF 的双向通信服务(Duplex Service) 。开发一个服务端主动向客服端发送股票信息的程序,首先客户端先向服务端发送需要监控的股票的股票代码,然后服务端

如何将身份数据同步给腾讯企业邮?_竹云IDaaS的博客-程序员宅基地

如何将身份数据同步给腾讯企业邮?竹云IDaaS预置大量的标准化应用模板对商业化应用(例如腾讯企业邮、阿里云邮箱、网易企业邮、携程商旅、AD、SAP、钉钉、企业微信、OA等等)进行连接,只需要通过简单连接参数配置,即可实现从各身份源汇聚的组织机构及用户数据,同步到下游的这些应用中,从而保证上下游数据一致性联动。本文将以竹云IDaaS对腾讯企业邮自动同步组织机构及用户为例,带您一起通过竹云IDaaS来实现这个效果。步骤1 申请租户 开通IDaaS服务租户管理员或应用开发者在https://bccast

随便推点

android poi使用教程,poi的常用方法_沧尽空的博客-程序员宅基地

一、 POI简介Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。二、 HSSF概况HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。HSSF 为读取操作提供了两类API:usermodel和eventuse...

队列(Queue) C 语言实现_song_hui_xiang的博客-程序员宅基地_c语言 队列 size+!

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素成为出队。队列中没有元素时,称为空队列。因为队列只允许在一段插入,在另一端删除,所以只有最早进入队列

Openstack neutron 常见故障分析_hNicholas的博客-程序员宅基地_error: 无法连接到neutron.

1.  节点down了,如图1-12所示  图1-12刚刚部署完了,一看上去全部是down掉了,down掉了怎么办?我要查整个部署。一查没有部署这个没有部署那个,这时日志很关键。所以在部署的时候要统一日志收集,你在上面就可以看到各种日志。看Rabbitmq,文件句柄太少了,或者是硬盘太小了,都会影响到rabbitmq接受agent的连接。还有检查Server,看Neutro

import keras 报错 ImportError: cannot import name ‘urlopen‘_庞加莱的博客-程序员宅基地

详细报错信息Traceback (most recent call last): File "D:/github/automated_icd_coding/source/train.py", line 8, in <module> import keras File "D:\chenlihu\software\python3.5.2\lib\site-packa...

java项目日志处理_java项目中日志处理_郑丰彧的博客-程序员宅基地

[TOC]## 1. 什么是log4j?Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而...

推荐文章

热门文章

相关标签