张正友标定数学原理推导

张正友标定数学原理推导

整体概述:

1.先求解单应性矩阵,单应性矩阵是从一个平面 到另一个平面的投影映射

2.通过单应性矩阵求解相机内参参数

3.求解外参参数

4.几何解释

求解单应性矩阵

在这里插入图片描述其实质对应空间坐标系旋转平移变换后通过相机内参矩阵映射到像素坐标。

在这里插入图片描述

A称为相机的内参矩阵,内参矩阵取决于相机的内部参数。其中, f f f 是通过欧拉积分为像距, d X , d Y dX,dY dX,dY分别表示 X , Y X,Y X,Y方向上的一个像素在相机感光板上的物理长度(即一个像素在感光板上是多少毫米), u 0 , v 0 u_0,v_0 u0,v0分别表示相机感光板中心在像素坐标系下的坐标, θ \theta θ表示感光板的横边和纵边之间的角度( 90 ° 90° 90°表示无误差)。

img

preview

我们的关注点不是定义在所有空间的坐标,只是定义在我们所观察的平面的坐标,我们可以选择物体平面为Z=0,

在这里插入图片描述

写为单应性矩阵形式

在这里插入图片描述

在opencv中提到单应性矩阵中只有8个自由参数,我们进行标准化使H33 = 1(通常是可行的,除了非常罕见的奇异情况H33=0)。单应性矩阵的缩放可以应用于第九个单应性矩阵的参数,但通常倾向于将整个单应性矩阵乘以比例因子来缩。

我个人的理解就是把H33归一化为1,因为前面的比例因子不会对映射关系产生影响,可以将其提到比例因子中。

将单应性矩阵拆分方程求解,将第三行乘上ui与第一行消去比例因子s,第二行与第一行操作相同得到

在这里插入图片描述

在这里插入图片描述

对应的一组点有两个方程,所以棋盘格四个角点8个方程即可解的8个未知数。

求解相机内参参数

通过两个约束求解,r1和r2是单位正交向量,用h表示
在这里插入图片描述
令B为

在这里插入图片描述

令b为

在这里插入图片描述

B为对称矩阵,所以b的6维向量可以囊括所有B元素

上面两个约束可以表示为通用形式

在这里插入图片描述

上面的一幅标定板图像取得的约束等式,假如有n幅图像,则
V b = 0 Vb = 0 Vb=0
n幅图即2n×6的矩阵,b有6个未知数用三幅图以上会得到6个以上方程即可求解。

其中,V是一个2n×6的矩阵,bb是一个6维向量,所以

  • 当n≥3,可以得到bb的唯一解;
  • 当n=2,则可以假设扭曲参数γ=0γ=0作为额外的约束条件
  • 当n=1,则值能计算两个相机的内参数

对于方程Vb=0可以使用SVD求得其最小二乘解。对VTV进行SVD分解,其最小特征值对应的特征向量就是Vb=0的最小二乘解,从而求得矩阵B。由于这里得到的B的估计值是在相差一个常量因子下得到的,所以有:
B = λ ( A − ) T A B=λ(A^-)^TA B=λ(A)TA

通过b也就知道了B,通过B可以提取内参参数

在这里插入图片描述

上述公式就是内参的解析解,内参参数获得后,外参矩阵便可以求解。

求解外参矩阵

利用上面H与A的关系,R矩阵的三向量为正交向量可得

在这里插入图片描述

且r1和r2是单位向量,所以
在这里插入图片描述

最大似然估计

上面使用最小二乘法得到估计得到的解,并没有物理上的实际意义,。为了进一步增加标定结果的可靠性,可以使用最大似然估计(Maximum likelihood estimation)来优化上面估计得到的结果。

假设同一相机从n个不同的角度的得到了n幅标定板的图像,每幅图像上有m个像点。Mij表示第ii幅图像上第j个像点对应的标定板上的三维点,则

在这里插入图片描述

一般图像噪声默认为高斯噪声,所以使用最大似然估计进行优化,角点mij的概率密度函数为
f ( m i j ) = 1 2 π e − ( ( ^ m ) ( K , R i , t i , M i j ) ) σ 2 f(m_{ij})=\frac{1}{\sqrt{2\pi}}e^{\frac{-(\hat(m)(K, R_i, t_i, M_{ij}))}{\sigma^2}} f(mij)=2π 1eσ2((^m)(K,Ri,ti,Mij))
构造似然函数

L ( A , R i , t i , M i j ) = ∏ i = 1 , j = 1 n , m f ( m i j ) = 1 2 π e − ∑ i = 1 n ∑ j = 1 m ( m ^ ( K , R i , t i , M i j ) − m i j ) 2 σ 2 L(A,R_i,t_i,M_{ij}) = \prod^{n,m}_{i=1,j=1}f(m_{ij})=\frac{1}{\sqrt{2\pi}}e^{\frac{-\sum^n_{i=1}\sum^m_{j=1}(\hat{m}(K,R_i,t_i,M_{ij})-m_{ij})^2}{\sigma^2}} L(A,Ri,ti,Mij)=i=1,j=1n,mf(mij)=2π 1eσ2i=1nj=1m(m^(K,Ri,ti,Mij)mij)2
为了能够让L取得最大值,需要最小化下面的值

∑ i = 1 n ∑ j = 1 m ∥ m ( K , R i , t i , M i j ) − m i j ∥ 2 ∑i=1n∑j=1m∥m^(K,Ri,ti,Mij)−mij∥2 i=1nj=1mm(K,Ri,ti,Mij)mij2
这是一个非线性优化问题,可以使用Levenberg-Marquardt的方法,利用上面得到的解作为初始值,迭代得到最优解。

几何解释

在张正友标定法原文中作者给出了几何解释,利用绝对圆锥曲线将两个旋转向量的约束关系联系起来。
绝对圆锥曲线内容参考
两个约束关系
r 1 T ⋅ r 2 = 0 r_1^T\centerdot r_2 = 0 r1Tr2=0
r 1 T ⋅ r 1 = r 2 T ⋅ r 2 r_1^T\centerdot r_1 = r_2^T\centerdot r_2 r1Tr1=r2Tr2
绝对圆锥曲线参考博客Absolute Conic
在这里插入图片描述
三维坐标点表示为齐次坐标为四维向量,平面方程表达式写为上式并用来表示相机坐标系
在齐次坐标系中无穷远点收为同一个点,所以该平面与无穷远平面交于一条线,
[ r 1 0 ] 与 [ r 2 0 ] \left[ \begin{matrix} r_1 \\ 0 \end{matrix} \right]与 \left[ \begin{matrix} r_2 \\ 0 \end{matrix} \right] [r10][r20]
是该相交直线上两个特殊的点,所以该直线上任何点可以用这两个点进行表示
x ∞ = a [ r 1 0 ] + b [ r 2 0 ] = [ a r 1 + b r 2 0 ] x_\infty = a\left[ \begin{matrix}r_1\\0 \end{matrix}\right]+b\left[ \begin{matrix}r_2\\0 \end{matrix}\right] = \left[\begin{matrix}ar_1+br_2\\0\end{matrix}\right] x=a[r10]+b[r20]=[ar1+br20]
求该直线与绝对圆锥曲线的交点, x ∞ T x ∞ = 0 x_\infty^Tx_\infty = 0 xTx=0 a 2 + b 2 = 0 a^2+b^2 = 0 a2+b2=0,求解可得
x ∞ = a [ r 1 ± i r 2 0 ] x_\infty = a\left[\begin{matrix}r_1\pm ir_2\\0\end{matrix}\right] x=a[r1±ir20]
这对复共轭点的意义在于它们对欧几里德变换是不变的。 它们在图像平面上的投影(由比例因子决定)为在这里插入图片描述
该点在绝对圆锥曲线图上,描述为 A − T A − 1 A^{-T}A^{-1} ATA1,得到
在这里插入图片描述
这就要求上面的两个约束条件满足,这就是其几何意义。
齐次坐标本来就是为了解决平移矩阵的加法问题,使其能够像旋转矩阵一样对坐标系进行乘法,本来的几何意义就比较抽象,对上文的解释也是自己的部分理解并不透彻,只能从齐次坐标中两平行线无穷远交汇于一点来扩充理解。

### 张正友标定原理及应用 张正友标定法是一种广泛应用于单目相机标定技术,其核心在于通过一系列棋盘格图案来获取相机内部参数和畸变系数。具体来说,在该方法中,用户需拍摄多幅包含标准尺寸棋盘格的图像作为输入数据[^2]。 对于每一张含有棋盘角点的图像,算法能够自动检测这些特征点的位置并记录下来。基于此,可以建立世界坐标系下已知位置的三维点与其对应的二维像平面投影之间的一系列方程组。最终借助最小二乘估计或其他优化手段求得摄像机矩阵以及径向切向失真因子等重要参数[^3]。 #### Python实现示例 ```python import cv2 import numpy as np # 准备对象点, 如(0,0,0), (1,0,0), (2,0,0) ....,(6,5,0) objp = np.zeros((6*7, 3), np.float32) objp[:, :2] = np.mgrid[0:7, 0:6].T.reshape(-1, 2) # 存储所有图像的对象点和图像点 objpoints = [] imgpoints = [] for fname in images: img = cv2.imread(fname) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret,corners=cv2.findChessboardCorners(gray,(7,6)) if ret==True: objpoints.append(objp) corners2=cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),(cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)) imgpoints.append(corners2) ret,matrix,dist,rvecs,tvecs=cv2.calibrateCamera(objpoints,imgpoints,gray.shape[::-1],None,None) ``` ### 手眼标定原理及应用 手眼标定主要解决的是如何确定安装于机械臂末端执行器上的视觉传感器相对于基座坐标系的姿态问题。通常分为两种模式:“Eye-in-Hand” 和 “Eye-to-Hand”。前者指的是摄像头固定在机器人的工具中心点处;后者则是指摄像头位于远离机器人手臂的地方观察工作空间内的物体运动状况[^1]。 无论是哪种配置方式,基本思路都是相同的——即寻找一组共同参照物(例如特定标记),并通过多次移动机器人使这些目标出现在不同视角下的视场范围内。随后依据采集到的数据集构建数学模型,进而推导出手部与眼睛间相对位姿关系表达式 Ax=b 或者 Axb=c 的形式来进行求解。 ### 比较与区别 两者虽然都涉及到坐标变换的概念,但在应用场景上存在明显差异: - **目的不同**:张正友标定侧重于校准单一成像设备本身特性,而手眼标定则关注于连接两个独立的空间参考框架; - **操作流程各异**:前者依赖静态场景中的几何结构完成整个过程,后者往往涉及动态变化的过程以捕捉足够的样本信息用于后续分析处理; - **适用范围有所差别**:张正友方案适用于任何类型的光学仪器,只要能提供清晰可见且易于辨认的目标即可;相比之下,手眼协调任务更多见诸工业自动化领域当中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值