计算 solvepnp 和 solvepnpRansac 求解 空间某一三维坐标系 到 摄像机三维坐标系的 三维旋转R 和 三维平移 T

参考:

pnp问题 与 solvepnp函数:https://www.jianshu.com/p/b97406d8833c

对图片进行二维仿射变换cv2.warpAffine() or 对图片进行二维射影变换cv2.warpPerspective :https://www.jianshu.com/p/1c6512d475cc

关键:今天裁图过程中发现裁出来的一些图较正常图发生了奇怪的仿射变换,最后发现是solvepnp求解出的头部坐标系到摄像机坐标系的RT有错误,改用solvepnpRansac之后得到解决。

//cv::solvePnP(p_3d17, p_2d17, camInstris, camDistort, cam_r, cam_t);
cv::solvePnPRansac(p_3d17, p_2d17, camInstris, camDistort, cam_r, cam_t, true, 1000, 1, 0.99);

solvepnpRansac比solvepnp多出了三个参数,1000为算法迭代次数。

pnp问题介绍

如果场景的三维结构已知,利用多个控制点在三维场景中的坐标及其在图像中的透视投影坐标即可求解出摄像机坐标系与表示三维场景结构的世界坐标系之间的绝对位姿关系,包括绝对平移向量t以及旋转矩阵R,该类求解方法统称为N点透视位姿求解(Perspective-N-Point,PNP问题)。这里的控制点是指准确知道三维空间坐标位置,同时也知道对应图像平面坐标的点。对于透视投影来说,要使得PNP问题有确定解,需要至少三组控制点。

image.png

image.png

经典的P3P问题可以转化为一个四面体形状的确定问题,如图所示。即已知条件为知道控制点 A,B,C的位置以及在摄像机中的投影坐标求棱长边a,b,c的问题。通过余弦定理,再利用点云配准方法可以得到摄像机坐标系相对于世界坐标系的平移以及旋转。图中的P点相当于相机的光心,A,B,C相当于世界坐标系下已知相对位置关系的三个控制点,A‘,B‘,C‘为图像坐标系中对应的三个点。PNP解决的是纯数学问题,数学证明在此处省略。

Opencv中PNP的求解函数

solvepnp

void solvePnP(InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, bool useExtrinsicGuess=false, int flags = CV_ITERATIVE)
Parameters:

objectPoints - 世界坐标系下的控制点的坐标,vector<Point3f>的数据类型在这里可以使用

imagePoints - 在图像坐标系下对应的控制点的坐标。vector<Point2f>在这里可以使用

cameraMatrix - 相机的内参矩阵

distCoeffs - 相机的畸变系数

以上两个参数通过相机标定可以得到。相机的内参数的标定参见:http://www.cnblogs.com/star91/p/6012425.html

rvec - 输出的旋转向量。使坐标点从世界坐标系旋转到相机坐标系

tvec - 输出的平移向量。使坐标点从世界坐标系平移到相机坐标系

flags - 默认使用CV_ITERATIV迭代法

solvepnpRansac

应用了pnp算法,提高了精度。

原文地址:https://www.cnblogs.com/zealousness/p/9975199.html

时间: 2024-08-07 21:19:27

计算 solvepnp 和 solvepnpRansac 求解 空间某一三维坐标系 到 摄像机三维坐标系的 三维旋转R 和 三维平移 T的相关文章

QuantLib 金融计算——数学工具之求解器

目录 QuantLib 金融计算--数学工具之求解器 概述 调用方式 非 Newton 算法(不需要导数) Newton 算法(需要导数) 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--数学工具之求解器 载入模块 import QuantLib as ql import scipy from scipy.stats import norm print(ql.__version__) 1.12 概述 QuantLib 提供了多种类型的一维求解器,用以求解单

数据库计算每个表所占空间和记录数

sql server 1 USE database_20160215 2 GO 3 4 SELECT 5 TableName = obj.name, 6 TotalRows = prt.rows, 7 [SpaceUsed(KB)] = SUM(alloc.used_pages)*8 8 FROM sys.objects obj 9 JOIN sys.indexes idx on obj.object_id = idx.object_id 10 JOIN sys.partitions prt o

单目相机标定-原理及实现

一. 标定原理      相机标定的目的就是要获得相机的内参数,得到二维平面像素坐标和三维世界坐标的关系,从而进行三维重建. 1.几个坐标系及其变换 (1)图像坐标系:是一个以像素为单位的坐标系,它的原点在左上方,每个像素点的位置是以像素为单位来表示的,所以这样的坐标系叫图像像素坐标系(u,v),u和v分别表示像素在数字图像中的列数和行数,但是并没有用物理单位表示像素的位置,因此还需建立以物理单位表示的图像坐标系,叫图像物理坐标系(x,y),该坐标系是以光轴与图像平面的交点为原点,该点一般位于图

使用ivx的3D世界实现跑马灯效果的经验总结

之前的案例涉及的动画效果都是平面展示,但是ivx中也可以通过3D世界组件展示3D的效果.今天我们就以跑马灯为例来讲一下ivx中的3D世界是如何使用的.一.3D世界3D世界最基础的组成部分就是坐标系和摄像机.坐标系是一个空间直角坐标系,3D世界下的所有组件都会有一个XYZ坐标来决定它在3D世界中的位置,而摄像机负责控制我们的视角,下图中红圈处就是摄像机的位置,黄线框起来的区域就是我们的视角范围.另外我们还可以在3D世界中添加各种光源,字体,图片,图片序列和物体模型这些具有展示效果的组件,除此之外还

张志华教授:机器学习——统计与计算之恋

张志华教授:机器学习——统计与计算之恋 编辑部按:本文是从张志华老师在第九届中国R语言会议和上海交通大学的两次讲座中整理出来的.张志华老师是上海交通大学计算机科学与工程系教授,上海交通大学数据科学研究中心兼职教授,计算机科学与技术和统计学双学科的博士生指导导师.在加入上海交通大学之前,是浙江大学计算机学院教授和浙江大学统计科学中心兼职教授.张老师主要从事人工智能.机器学习与应用统计学领域的教学与研究,迄今在国际重要学术期刊和重要的计算机学科会议上发表70余篇论文,是美国“数学评论”的特邀评论员,

机器学习——统计与计算之恋

机器学习--统计与计算之恋 编辑部按:本文是从张志华老师在第九届中国R语言会议和上海交通大学的两次讲座中整理出来的.张志华老师是上海交通大学计算机科学与工程系教授,上海交通大学数据科学研究中心兼职教授,计算机科学与技术和统计学双学科的博士生指导导师.在加入上海交通大学之前,是浙江大学计算机学院教授和浙江大学统计科学中心兼职教授.张老师主要从事人工智能.机器学习与应用统计学领域的教学与研究,迄今在国际重要学术期刊和重要的计算机学科会议上发表70余篇论文,是美国"数学评论"的特邀评论员,国

第七节、双目视觉之空间坐标计算

在上一节我们已经介绍了如何对相机进行标定.然后获取相机的内部参数,外部参数. 内参包括焦距.主点.倾斜系数.畸变系数 其中γ为坐标轴倾斜参数,理想情况下为0. 外参包括旋转矩阵R.平移向量T,它们共同描述了如何把点从世界坐标系转换到摄像机坐标系,旋转矩阵描述了世界坐标系的坐标轴相对于摄像机坐标轴的方向,平移向量描述了在摄像机坐标系下空间原点的位置. 人类可以看到3维立体的世界,是因为人的两只眼睛,从不同的方向看世界,两只眼睛中的图像的视差,让我们可以看到三维立体的世界.类似的,要想让计算机"看到

双目标定与三维计算:从理论到OpenCV实践

双目标定与三维计算:从理论到OpenCV实践 一.双目立体成像主要步骤    2 二.三角测量    3 2.1 主光线在无穷远处相交    3 2.2 主光线在有限距离内相交    3 2.3 深度与视差    4 2.4 双目立体坐标系    5 2.5 实际情况的双目    5 三.对级几何    6 3.1 对极几何的定义    6 3.2 极点极线极面的定义    6 3.3 对极几何的一些结论    7 四.本征矩阵E和基础矩阵F    8 4.1 基本信息    8 4.2 两者区

JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)

1.背景 2.为什么废弃永久代(PermGen) 3.深入理解元空间(Metaspace) 4.总结 ========正文分割线===== 一.背景 1.1 永久代(PermGen)在哪里? 根据,hotspot jvm结构如下(虚拟机栈和本地方法栈合一起了): 上图引自网络,但有个问题:方法区和heap堆都是线程共享的内存区域. 关于方法区和永久代: 在HotSpot JVM中,这次讨论的永久代,就是上图的方法区(JVM规范中称为方法区).<Java虚拟机规范>只是规定了有方法区这么个概念和