相机标定——小孔成像、相机模型与坐标系

小孔成像

用一个带有小孔的板遮挡在墙体与物之间,墙体上就会形成物的倒影,我们把这样的现象叫小孔成像。

用一个带有小孔的板遮挡在墙体与物之间,墙体上就会形成物的倒影,我们把这样的现象叫小孔成像。前后移动中间的板,墙体上像的大小也会随之发生变化,这种现象说明了光沿直线传播的性质。

在照相机被发明之前,人们就已经开始利用“小孔成像”原理制造各类光学成像装置,这种装置被称为“Camera obscura(暗箱)”。 19世纪上半叶,人们终于找到了固定保存暗箱中投影面上光学图像的方法与介质,照相机工业由此发展,因此Camera obscura被认为是照相机的祖先;而“Camera”则成了照相机的英文名称。

1839 年法国画家达盖尔根据小孔成像的原理发明了被称为“西洋镜”的世界第一台照相机。 不过当时的相机令现代人无法想象,暗箱大得像个小房子,拍摄时间至少三十分钟,以至于不得不将被摄的人头部固定在事先预制好的卡箍里,而且得到的只是一张笨重的铜版正像。 当时有报社记者评述:“就像在马路上拿着一面镜子,周围的景物极细地反映出来,然后把镜子带回家。”

现代照相机和摄影机也是利用了小孔成像的原理——镜头是小孔(大多数安装凸透镜以保证光线成像距离),景物通过小孔进入暗室,影像被一些特殊的化学物质(如显影剂等)留在胶片上。 数码相机、摄影机等则是将影像通过感光元件转换为数字信号(数码格式)存储在存储卡内。

其实,人类的视觉系统也是小孔成像的原理。只不过视觉系统的复杂度是相机系统的成千上万倍。

小孔成像模型

在这里插入图片描述

上图是最原汁原味的小孔成像原理图,它描述的是三维空间中的点到图像平面(image plane)上的投影。

在实际的实现和应用中,为了表达的方便,通常会将图像平面放在小孔和三维场景之间。如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里介绍几个概念:

  • 光轴:像极坐标系的Z轴
  • 光心:光轴中心点,即上图中的O点
  • 主点:光轴与图像平面的交点Principal Point
  • 焦距:光心到图像平面的距离Focal Length

四个坐标系

为了数学表达的方便,通常以光心为原点,建立一个图像坐标系。下图详细的描述了这些关系。

在这里插入图片描述

世界坐标系:Ow−XwYwZwO_w−X_wY_wZ_wOwXwYwZw 单位m

世界坐标系(world coordinate),也称为测量坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置。世界坐标系的位置可以根据实际情况自由确定。

相机坐标系:Oc−XcYcZcO_c−X_cY_cZ_cOcXcYcZc 单位m

相机坐标系(camera coordinate),也是一个三维直角坐标系,原点位于镜头光心处,x、y轴分别与相面的两边平行,z轴为镜头光轴,与像平面垂直。

像素坐标系:Ouv−uvO_{uv}−uvOuvuv 单位像素pixel(整数)

像素坐标系(pixel coordinate),二维直角坐标系,反映了相机CCD/CMOS芯片中像素的排列情况。原点ouv位于图像的左上角,u轴、v轴分别于像面的两边平行。像素坐标系中坐标轴的单位是像素pixel(整数)
几乎所有的图像,像素坐标都如下图所示:
在这里插入图片描述
即:像素原点在图像的左上角,横坐标值表示列数c,通常以u表示;纵坐标值表示行数r,通常以v表示。

图像坐标系:Oxy−xyO_{xy}−xyOxyxy 单位mm

图像坐标系(image coordinate),由于像素坐标系不利于坐标变换,因此需要建立图像坐标系oxy,其坐标轴的单位为毫米(mm),原点是相机光轴与相面的交点(称为主点Principal Point),即图像的中心点,x轴、y轴分别与u轴、v轴平行。故两个坐标系实际是平移关系,即可以通过平移就可得到。
如下图:(u0,v0) 为图像坐标系中心O在像素坐标系下的位置表示。
在这里插入图片描述

点在各个坐标系的表达:

在这里插入图片描述

### 小孔成像相机模型内参标定方法 #### 1. 原理概述 小孔成像模型是一种理想化的相机成像方式,在该模型下,光线通过一个小孔投射到感光平面上形成倒立缩小的影像。为了描述实际相机的行为并将其映射至此理论框架中,需确定一系列参数——即所谓的“内参”。这些参数包括焦距(focal length),光学中心(optical center)的位置(cx, cy),以及可能存在的径向(radial distortion coefficients k1,k2,...)和切向(tangential distortion parameters p1,p2)畸变系数。 对于针孔相机而言,其内部几何特性由一个3×3大小的矩阵来表示: \[ K=\begin{bmatrix} f_x & s & c_x \\ 0 & f_y & c_y\\ 0&0&1 \end{bmatrix} \tag{1}\label{eq:intrinsics_matrix} \] 其中\(f_x\) 和 \(f_y\) 是沿x轴和y轴方向上的有效焦距;\(c_x,c_y\) 定义了主点(principal point) 或者说是图像坐标的原点相对于像素网格左上角偏移量;而s项则用于处理非方形像素的情况(通常情况下设为零),它反映了两个坐标轴之间的斜率偏差[^2]。 #### 2. 实验准备数据采集 要获得上述提到的各项参数值,最常用的方法之一就是利用已知尺寸的标准棋盘格图案作为参照物来进行拍摄实验。具体来说,就是在不同角度、距离条件下多次捕捉同一物体的不同视角下的多幅图片,并记录每一张照片对应的姿态信息(旋转和平移)[^1]。 #### 3. 参数估计过程 基于获取的数据集,可以通过最小化重投影误差(reprojection error) 来优化求解未知变量。简单来讲,就是寻找一组最优的内在参数使得计算所得的理想特征点位置尽可能接近于真实观测结果。这一过程中涉及到的关键算法有: - **张正友标定法**:这是一种广泛应用于单目视觉系统的自校准技术,能够有效地消除透镜引起的透视失真效应的同时恢复出完整的摄像机内外方位元素集合。 - 使用OpenCV库中的`cv::calibrateCamera()` 函数实现自动化流程。给定世界坐标系下的三维点及其对应二维投影坐标后,该接口会自动完成整个迭代拟合操作,并返回最终估算出来的各项属性数值。 ```cpp // C++ code snippet using OpenCV for camera calibration. std::vector<std::vector<cv::Point3f>> objectPoints; std::vector<std::vector<cv::Point2f>> imagePoints; cv::Size imageSize; // ... (populate the above vectors with your data) double rms = cv::calibrateCamera(objectPoints, imagePoints, imageSize, K, distCoeffs, rvecs, tvecs); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知来者逆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值