张正友平面标定原理

本文详细介绍了摄像机标定的成像原理,包括靶标平面与图像平面的映射关系以及摄像机参数矩阵的求解。通过解析单应性矩阵H的计算,至少需要4个点来确定,而求解内参数矩阵A至少需要3幅图片。实验注意事项涉及图像质量、靶标图像分布和角度变化等,理解单应性矩阵H在相机标定、视角变换、图像拼接等多个领域的应用,以及内参数与外参数的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原创文章,欢迎转载,转载请注明出处。
ps:http://robots.stanford.edu/cs223b04/JeanYvesCalib/ 推荐一个很有用的标定网站,大家可自行下载运行程序。

一、摄像机标定成像原理

(1)靶标平面与其图像平面之间的映射关系

在相机针孔成像模型下,假设点p 为靶标平面上的一点,点p在世界坐标系下的坐标为 M=(Xwi,Ywi,Zwi) ,其齐次坐标为 M(Xwi,Ywi,Zwi,1) ,像点 p′在图像坐标系下的坐标为 m=(ui,vi) ,齐次坐标表示为 m=(ui,vi,1) 。根据直接线性变换,将像点和物点的成像几何关系在齐次坐标下写成透视投影矩阵的形式如公式(1)所示: 在这里插入图片描述
上式中, s为任意非零未知尺度因子。矩阵A为相机的内参数矩阵,R为3×3单位正交旋转矩阵。t为3×1的平移矢量,矩阵AR的具体形式为:
在这里插入图片描述
式中:fxfy分别为u轴和v轴的尺度因子,γ为倾斜因子,且当u轴和v轴垂直时γ=0。u0v0为光轴中心的图像坐标即主点坐标(或者表示CCD相机的光轴中心在图像平面的坐标)。旋转矩阵R的第i列元素由 ri 表示。将(2)、(3)式代入(1)式,可得:在这里插入图片描述
假设靶标平面位于世界坐标系的OwXwYw平面上,即Zwi=0.由上式可得:
在这里插入图片描述
这里,仍采用M来表示靶标平面上的点,则齐次坐标形式为M一横=[Xwi,Ywi,1]T,则靶标平面上的点M与对应图像点m之间的对应关系可表示为一个单应性矩阵 H,即:
在这里插入图片描述

(2)求解摄像机参数矩阵

上式中 HA[r1 r2 t

### 张正友相机标定算法原理 张正友相机标定法是一种基于平面模板的相机标定技术,其核心思想是通过拍摄已知几何结构的标定板图像来估计相机的内参数和外参数。这种方法利用了绝对二次曲线及其像的概念,并结合实际标定过程中的约束条件完成标定。 #### 1. 标定流程概述 张正友标定法通常需要对标定板进行多角度拍摄(至少三个不同的视角),并通过这些图像提取特征点的位置信息。具体来说,标定过程中并不依赖于标定板的具体运动轨迹,而是通过对多个视图的分析得到相机的内参矩阵 \( A \) 和畸变系数[^2]。 #### 2. 数学基础 为了理解张正友标定法的工作机制,需引入几个重要的数学概念: - **绝对二次曲线** 绝对二次曲线是一个射影不变量,在三维空间中表示为无穷远平面上的一个特殊二次曲线。它具有独特的性质,能够反映摄像机成像系统的内部几何特性[^3]。 - **虚圆点 (Circular Points)** 虚圆点是一组特殊的二维点,它们位于绝对二次曲线上并满足特定的代数关系。在欧氏几何框架下,虚圆点对于恢复仿射形状至关重要。 - **绝对二次曲线与其像之间的联系** 当光线经过针孔模型投影到图像平面上时,绝对二次曲线会被映射为其对应的像——即所谓的“绝对双曲线”。此像包含了关于相机内参的重要线索。 #### 3. 参数求解步骤 以下是张正友标定算法的主要计算环节: - **建立齐次线性方程组** 利用每幅图片中标定点的实际坐标与像素坐标的对应关系构建一组超定方程。世界坐标系下的某一点 \( P_w=[X,Y,Z]^T\) ,则其在相机坐标系内的表达形式可写为\[P_c=R\cdot P_w+t\]其中\( R,t \)分别代表旋转和平移向量;进一步转换至归一化平面后有如下关系成立:\[\lambda p_n=K^{-1}[R|t]\begin{bmatrix} X \\ Y\\ Z\\ 1 \end{bmatrix}\] - **估算初始猜测值** 首先假不存在镜头失真效应,则可通过最小二乘拟合初步获取内在参数阵\( K=\left[f_x,f_y,c_x,c_y,k_1,...k_m\right]\),这里包含焦距、主点位置以及径向切向畸变量等分项[^4]。 - **优化目标函数** 接着定义误差度量准则用于衡量重建效果的好坏程度,比如重投影偏差平方和等等。借助数值迭代手段不断调整候选方案直至达到收敛标准为止。 ```cpp // OpenCV 实现片段示意 cv::Mat cameraMatrix, distCoeffs; std::vector<cv::Point3f> objectPoints; // 世界坐标系中的棋盘格角点 std::vector<cv::Point2f> imagePoints; // 图像上的检测结果 cv::calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs); ``` 上述代码展示了如何调用OpenCV库执行完整的校准操作。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值