张正友标定数学原理推导

张正友标定数学原理推导

整体概述:

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π <

### 张正友标定法的原理 张正友相机标定法是一种基于单平面棋盘格图案的相机标定技术,由张正友教授在1998年提出。该方法的核心在于利用二维平面上的特征点来估计相机的内外参数,从而简化了传统的三维标定板需求[^1]。 #### 数学模型 假设世界坐标系中的某一点 \(P_w\) 的齐次表示形式为 \([X_w, Y_w, Z_w]^T\),经过透视变换后,在图像上的对应像素位置可以表示为 \(p=[u, v]^T\)。两者之间的映射关系可以用如下方程描述: \[ s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K [R|t] \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \] 其中: - \(K\) 是相机内参矩阵, - \(R\) 表示旋转矩阵, - \(t\) 表示平移向量, - \(s\) 是尺度因子。 如果忽略镜头畸变的影响,则可以通过一系列线性代数运算求得这些参数[^2]。 #### 平面约束条件下的公式推导 对于每一个观察到的角点,存在一个对应的单应矩阵\(H_i\) 将其从世界坐标转换至图像坐标: \[ x' = H x \] 这里,\(H\) 可分解成与外参有关的形式,并进一步引入一些中间变量以便后续处理。具体来说,设 \(h_j (j=1..3)\) 代表第 j 列矢量组成的单应矩阵,则有以下表达式成立: \[ [H_1,H_2,H_3]=[\lambda r_1,\lambda r_2,t] \] 由此可知,任意两列间的关系满足特定比例关系,进而形成若干独立方程式用于估算内在参数阵元值。当采集足够数量的不同视角影像资料之后,便能够构建超定系统并采用最小二乘法解决未知量问题[^3]。 最终目标是从上述过程中提取出反映摄像设备特性的各项数值——焦距f、主点偏移cx/cy等信息构成完整的内部校准数据集;同时获得针对当前场景设定下各个视图所特有的外部姿态描述符集合(即方位角θ及距离d之类)。 ```python import numpy as np from scipy.optimize import least_squares def calibrate_camera(obj_points, img_points): """ Perform camera calibration using Zhang's method. Parameters: obj_points : list of arrays The object points in world coordinates for each image. img_points : list of arrays Corresponding image points detected on the images. Returns: ret : dict Dictionary containing intrinsic and extrinsic parameters. """ n_views = len(img_points) A_list = [] b_list = [] for i in range(n_views): # Compute homography between object plane and image plane... pass result = least_squares(fun=residual_function, x0=initial_guess) return {'intrinsic':result.x[:6].reshape((3,3)), 'extrinsics':[rvec,tvec]} ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值