相机外参及利用PnP求解外参数矩阵

相机外参数矩阵

外参数矩阵:描述世界坐标系下的点,经过平移和旋转变换,转化为相机坐标系下的点。
1
(1)式中,下标c:表示相机坐标系下的坐标;
下标w表示世界坐标系下的坐标;
R表示旋转矩阵;
t表示平移矩阵。

外参数矩阵实际上是某点P的世界坐标系和相机坐标系的对齐,即经过平移和旋转运动,两坐标系能完全重合。
就我个人经历而言,外参数矩阵很容易被误解,容易被误解为只是相机的运动和平移矩阵。之所以是误解,因为当且仅当某点P的相机坐标就是它的世界坐标时,相机的旋转和平移才就是他的外参数矩阵,当相机坐标不是它的世界坐标时,则外参数还应该补充世界坐标系到相机坐标系的对齐矩阵。

公式表示相机坐标与世界坐标对齐的过程

相机坐标系与世界坐标系对齐的过程
2
和(1)式的区别是,此刻的R、t就分别表示着相机坐标系和世界坐标系的旋转与平移的关系(当然,为了矩阵维数的统一,将矩阵利用0、1增广为4x4的矩阵)。当相机之后发生R1、t1的运动呢?外参数矩阵将如何变化呢?将变化为(3)式。
在这里插入图片描述
就是在原有矩阵的基础上左乘该次运动的矩阵,同样的继续安装后,外参还会变化,外参矩阵的具体表达式为(4)式:
在这里插入图片描述
式中:n表示第n次运动,外参数矩阵的关键就是要确定初始的相机坐标系与世界坐标系是否统一,这对相机外参数的确性很重要。

初始相机坐标系与世界坐标系间的参数关系

以下图二维空间中的旋转变换为例为例,分析相机坐标系与世界坐标系间的变换矩阵的参数的实际意义。

5
某点P在不同坐标系下,都可以用不同坐标系下的基向量进行表示:
(其中,xc、yc、xw、yw都是坐标系下的单位正交基向量)
6
将上(5)式用矩阵进行表示,可简化为(6)式和(7)式:
6式
7式
(7)式明确了P点在两个坐标系间变换时的参数关系,即操作旋转变换的矩阵可以通过旋转角度具体表示出。
对矩阵参数更进一步的理解是:
旋转矩阵第一列表示世界坐标系下的Xw轴在相机坐标系下的方向向量;
旋转矩阵第二列表示世界坐标系下的Yw轴在相机坐标系下的方向向量;

将此类推道三维空间中的变换矩阵,变换矩阵可以表示为下式:
8式
此时,使两坐标系对齐的矩阵M的具体参数就有了现实的意义和具体的值。tx、ty、tz表式两坐标系间的平移关系,结果也很容易推出来,就不赘述了。

PnP求解相机外参数矩阵

相机运动时,如果相机的运动状况时时已知,则可以直接将运动参数代入(4)式,即可求得外参数矩阵。如果相机的运动情况未知,已知空间中n个点的世界坐标系的坐标和相机图像中的像素坐标,利用点与点之间的对应关系,来求解相机的外参数矩阵。

线性求解共面P4P问题

假设四个点的空间坐标已知,四点在同一平面上,我们在四点所在平面上建立一个参考坐标系,使得点Pi在参考坐标系下的坐标为Pri=(Xri,Yri,Zri=0)。将点坐标带入外参数公式(8)得:
![公式9](https://img-blog.csdnimg.cn/20200217164709277.png
在归一化平面中,有内参数方程(10),式中(x1ci,y1ci)为归一化平面下的坐标,且归一化平面坐标值可以由内参数及空间中点在像平面坐标(ui,vi)求出:
![10式方程](https://img-blog.csdnimg.cn/20200217212749614.png
整理(9)式带入(10)式,得(11)式
11式
为方便计算,将(11)式以矩阵的形式重新表示为(12)式:
12式
由H1、H2得知,上式中共有9个未知数,每一个空间中的已知点可以依据(11)式,列出两个方程式,四个点即可列出八个方程,而H1为参考坐标中单位的X轴在相机坐标系中的投影,所以,H1的二范数为1,由此可以列出方程||H1||=1。
从而利用上述九个方程式,即可求解出外参数中的九个未知数。

p4p参数求解的优化

当已知的坐标点的数目为n,n大于4时,则可以利用构建有约束的最小二乘的误差模型的方式,来求H1与H2。
首先构建误差函数 δ,并将n点的位姿信息都带入到矩阵中:13式
利用 δ函数将求解问题转化为了带约束的优化问题,利用拉格朗日因子λ处理约束条件,可以得到如下(14)式方程:
14式方程
注:拉格朗日条件是必要而非充分条件,即满足上述方程的点不一定是极值点。
优化方程F利用偏导数进行求解,即(15)式:
15式方程
求导这些矩阵时,要遵循矩阵求导的运算规则,我这里将用到的矩阵求导运算的公式列出来,仅供大家再自行推导使用。
16式公式
利用上述(15)式求解(14)式的F函数,求解得到结果(17)式:
17式
通过(17)式求解得出相机外参数矩阵的第一列x和第二列y轴在相机坐标系的投影的值,第三列的值由第一列和第二列叉乘得到。因此,摄像机相对于建立的参考坐标系的外参即可全部求出。

线性共面P4P求解的一些问题

  1. 无法保证外参数中旋转的矩阵为单位正交矩阵;
  2. 解的精度较低,可以利用带有遗忘因子的最小二乘法进一步提高精度。

带有遗忘因子的递推最小二乘法优化外参数

首先,具体的遗忘因子的递推最小二乘法公式如(18)式所述:

在这里插入图片描述
(18)式的方程形式上, 类似于卡尔曼滤波方程,从原理上也是,都是利用增益、预测并修正下一时刻的状态。不同的是,操作上具有了优化,引入了遗忘因子,即人为增大修正的增益和方差,防止其陷入局部极值,从而对数据的修正失去敏感性(对误差大的数据,修正效果减弱)。程序编程也可以参考卡尔曼滤波。

openCV中pnp的求解函数

openCV中继承了求解PnP的常用函数,只需要按照格式要求输入相应的参数,即可自动求得外参数的值。

void solvePnP(objectPoints,imagePoints,cameraMatrix,distCoeffs,rvec,tvec,useExtrinsicGuess,flags);
objectPoints:世界坐标系中的3D点坐标,单位mm;
imagePoints: 图像坐标系中的坐标,单位像素;
cameraMatrix:相机的内参数矩阵;
distCoeffs:畸变系数;
rvec:旋转矩阵;
tvec:平移矩阵;
useExtrinsicGuess:迭代初始值是否提供初始的rvec与tvec,没有提供则为false;
flags:SOLVEPNP_ITERATIVE(迭代法、点在同一平面上)、SOLVEPNP_P3P(3点法)、
SOLVEPNP_EPNP(引入齐次重心坐标,点可以不在同一平面上)、
SOLVEPNP_DLS(直接最小二乘,四点不在同一平面)、
SOLVEPNP_UPNP(尝试估计相机的内在参数)

EpPnP在ORB_SLAM中主要用于Tracking线程中的重定位Relocalization模块,需要通过当前关键帧与候选匹配上的3D地图点,迅速建立当前相机的初始姿态。

外参数小结

本文首先明晰了外参数矩阵的由来,外参数矩阵是用来对齐世界坐标系和相机图像坐标系的;之后讨论了外参数矩阵中各参数的实际意义,表示着世界坐标系的坐标轴在相机坐标系的投影;再之后共同学习了,在已知世界坐标系和相机图像系的具体坐标值时,PNP中的P4P法求解外参数的具体计算过程;之后一同学习了P4P中的外参数值利用带有遗忘因子的递推最小二乘法进一步优化取值,可以借鉴卡尔曼滤波进行编程实现;之后,介绍了实际编程中,更普遍的是直接调用openCV函数库中的函数,进行求解。

参考文献

  1. 《机器人视觉测量与控制》国防工业出版社 徐德等编著;
  2. 《视觉SLAM十四讲》
  3. 基于OpenCV和Dlib的头部姿态估计
<think>嗯,用户问的是相机系统的内矩阵怎么确定。首先,我需要回忆一下相机标定的基本知识。用户之前已经询问过双目相机的使用,现在转向了更具体的标定步骤,可能是他们在实际应用中遇到了标定问题,或者想要深入了解如何实际操作。 首先,内矩阵的定义。内矩阵涉及相机本身的属性,比如焦距、主点坐标、畸变系数等。矩阵则涉及相机在空间中的位置和方向,也就是旋转和平移矩阵。确定这些参数通常需要相机标定,而标定方法一般使用已知的校准板,比如棋盘格。 接下来,我需要分步骤解释标定过程。用户可能需要一个清晰的步骤指南,包括准备标定板、采集图像、角点检测、优化参数等。同时,要提到常用的工具,比如OpenCV或MATLAB,这样用户知道有哪些工具可以使用。 还要注意用户可能的疑问点,比如为什么需要多个角度的图像,畸变校正的作用,以及如何评估标定结果的准确性。此,可能需要简要说明内的具体应用,比如内用于图像矫正,用于三维重建。 另,用户之前的问题涉及双目相机,这里可能需要稍微关联一下,比如在双目系统中,内标定也包括两个相机之间的相对位置,但这个问题可能集中在单相机的情况,或者需要明确说明如果是双目,则需要额的步骤,比如标定两个相机之间的。 需要确保回答结构清晰,步骤明确,语言通俗易懂,避免过于专业的术语,但又要准确。可能还需要提到标定结果的评估,比如重投影误差,让用户知道如何验证标定的效果。 最后,检查是否有遗漏的关键点,比如张正友标定法,作为常用的方法,是否需要简要介绍。确保覆盖了标定的主要流程,工具推荐,以及内的应用场景,帮助用户全面理解如何确定内矩阵。</think>相机系统的**内矩阵**和**矩阵**是描述相机成像几何特性的核心参数,需通过**相机标定**确定。以下是具体方法及步骤: --- ### **1. 内矩阵(Intrinsic Matrix)** **定义**:描述相机内部属性,如焦距、主点坐标、畸变系数等。 **公式**: $$ K = \begin{bmatrix} f_x & 0 & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{bmatrix} $$ 其中,$f_x, f_y$为焦距(像素单位),$(u_0, v_0)$为主点(图像中心偏移)。 #### **标定方法**: 1. **准备标定板**: 使用已知尺寸的棋盘格(如 8×6 黑白方格),其角点坐标在三维世界坐标系中已知。 2. **采集多角度图像**: 用相机从不同角度拍摄标定板(通常需要 10~20 张),确保标定板覆盖图像的不同区域。 3. **角点检测与匹配**: 利用算法(如OpenCV的`findChessboardCorners`)检测图像中的棋盘格角点,并与标定板的实际角点坐标对应。 4. **优化求解**: 通过**张正友标定法**(Zhang’s Method),建立投影方程: $$ s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K \begin{bmatrix} R & t \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} $$ 结合最小二乘法或非线性优化(如Levenberg-Marquardt算法),求解 $K$ 和畸变参数(径向畸变 $k_1, k_2$,切向畸变 $p_1, p_2$)。 --- ### **2. 矩阵(Extrinsic Matrix)** **定义**:描述相机在世界坐标系中的位置和姿态(旋转矩阵 $R$ 和平移向量 $t$)。 **公式**: $$ \begin{bmatrix} R & t \end{bmatrix} = \begin{bmatrix} r_{11} & r_{12} & r_{13} & t_x \\ r_{21} & r_{22} & r_{23} & t_y \\ r_{31} & r_{32} & r_{33} & t_z \\ \end{bmatrix} $$ #### **标定方法**: 1. **基于标定板坐标系**: 在标定过程中,标定板的角点被定义在世界坐标系(例如 $Z_w=0$ 的平面),通过内和图像坐标反推。 2. **求解旋转和平移**: 每张标定板图像对应一组。通过**PnP算法**(Perspective-n-Point),利用已知的 3D-2D 点对应关系,求解 $R$ 和 $t$。 --- ### **3. 标定工具与流程** - **常用工具**: - OpenCV(`cv2.calibrateCamera`函数) - MATLAB相机标定工具箱 - ROS的`camera_calibration`包 - **步骤总结**: 1. 准备标定板并采集多角度图像; 2. 检测图像角点并建立与3D点的对应关系; 3. 调用标定函数优化求解及畸变参数4. 验证标定结果(重投影误差通常需小于0.5像素)。 --- ### **4. 关键注意事项** - **光照均匀**:避免反光或阴影干扰角点检测; - **标定板覆盖范围**:图像边缘区域需包含角点以提高精度; - **畸变校正**:标定后需应用畸变参数(如`cv2.undistort`)矫正图像。 --- ### **应用示例** - **内用途**:图像去畸变、像素坐标转相机坐标; - **用途**:多相机联合标定(如双目系统)、物体位姿估计。 通过上述方法,可准确标定相机参数,为后续三维重建、SLAM等任务提供基础。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值