相机的内外参与相机标定

这篇具有很好参考价值的文章主要介绍了相机的内外参与相机标定。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

相机的内外参与相机标定

我们所生活的现实世界是一个三维的世界,人类生活期间,已经能够熟练地估计周围物体的深度及定位,但是,现在的照相机一般都只能拍摄二维图像,场景从三维变到二维的时候,一个最重要的信息,深度,就丢失了,在只是为了观赏的时候,一个二维的图像也是足够的,如果想做导航,定位及其它3D 重建等应用的时候,这个深度信息及物体之间的相对关系,距离就显得很重要了,如何从二维图像,估计出真实的三维世界,也是计算机视觉一个比较重要的任务,由此发展出多视几何,计算几何等学科。

相机的内外参估计,是几何测量的基础,相机的内外参,构建了三维世界坐标系到图像坐标系的变换关系,也就是完成了一个三维坐标到二维坐标的映射。相机的内外参,对我们理解相机成像模型也有很大的帮助。

我们先给出如下的定义:

  • 世界坐标系, P w = ( x w , y w , z w ) P_w = (x_w, y_w, z_w) Pw=(xw,yw,zw), 原点为 O w O_w Ow,这个原点可以是三维世界的任意一个点
  • 相机坐标系, P c = ( x c , y c , z c ) P_c = (x_c, y_c, z_c) Pc=(xc,yc,zc), 原点为 O c O_c Oc,一般把相机的原点设置在相机的光心处
  • 图像坐标系, P i = ( u i , v i , 1 ) P_i = (u_i, v_i, 1) Pi=(ui,vi,1), 原点为 O i O_i Oi,一般把图像的左上角设为图像坐标系的原点
相机外参

世界坐标系的一个点 P w P_w Pw,如果以相机作为参考系,相机原点在世界坐标系中的坐标为 O c O_c Oc,则该点的坐标就变成了 P w − C P_w - C PwC C C C 表示世界坐标系的原点与相机坐标系原点之间的偏移量,这个比较好理解,我们以二维平面坐标为例,如果二维坐标的原点为 (0, 0),那么在二维坐标系中的一个点为 (2, 3),如果相机的原点就在 (2, 3),那么以相机作为参考,该点的坐标就是 (0, 0),所以世界坐标系中的一个点在相机坐标系中有一个平移的关系。

另外,由于相机本身在三维坐标系中,会发生不同角度的旋转,就是我们常说的 pitch, yaw, roll,所以相机坐标系的三个坐标轴与世界坐标系的三个坐标轴,会存在三个夹角,所以相机坐标系中的一个点与世界坐标系中的一个点的关系满足如下的式子:

P c = R ( P w − C ) P_c = \mathbf{R}(P_w - C) Pc=R(PwC)

上式中的 R \mathbf{R} R 表示一个旋转矩阵, C C C 表示世界坐标系的原点与相机坐标系原点之间的偏移量,这两个量构成了相机的外参,将世界坐标系与相机坐标系联系起来了。

相机内参

接下来,我们再看一下相机的内参,相机的内参主要表示相机坐标系到图像坐标系的映射,在相机坐标系中,真实世界的一个点还是一个三维的点, P c = ( x c , y c , z c ) P_c = (x_c, y_c, z_c) Pc=(xc,yc,zc),但是投影到图像坐标系之后,深度消失了,也就是 z c z_c zc 消失了,只剩下 x c , y c x_c, y_c xc,yc,假设相机镜头的焦距为 f f f,在小孔成像模型中,像平面就在焦距 f f f 处,根据简单的三角关系,我们可以推出:

u i = f x c z c v i = f y c z c u_i = f \frac{x_c}{z_c} \quad v_i = f \frac{y_c}{z_c} ui=fzcxcvi=fzcyc

上面的式子说明了相机坐标系与图像坐标系存在一个尺度的变化,这个尺度和点的物距有关,这个式子也很好的解释了为什么小孔成像中会有近大远小的关系。

不过,上面的式子,像平面的原点是在像平面与主光轴的交点处,也就是图像的中心,我们一般设定的图像原点在图像的左上角,为了适配这种关系,可以给上面的式子再加一个平移量,则上式变为:

u i = f x c z c + p u v i = f y c z c + p v u_i = f \frac{x_c}{z_c} + p_u \quad v_i = f \frac{y_c}{z_c} + p_v ui=fzcxc+puvi=fzcyc+pv

上面的式子换成矩阵形式:

z c [ u i v i 1 ] = [ f 0 p u 0 f p v 0 0 1 ] [ x c y c z c ] z_c \begin{bmatrix} u_i \\ v_i \\ 1 \end{bmatrix} = \begin{bmatrix} f & 0 & p_u \\ 0 & f & p_v \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x_c \\ y_c \\ z_c \end{bmatrix} zcuivi1=f000f0pupv1xcyczc

写成一个更紧凑的形式:

z c P i = K P c z_c P_i = \mathbf{K}P_c zcPi=KPc

上面这个式子描述了相机坐标系到图像坐标系的映射关系, z c z_c zc 表示一个点在相机坐标系下的深度, K \mathbf{K} K 表示相机内参矩阵

投影矩阵

现在,我们有了相机的外参,表示世界坐标系到相机坐标系的变换,也有了相机的内参,表示相机坐标系到图像坐标系的变换,那么将内外参联合起来,就可以得到世界坐标系到图像坐标系的映射:

z c P i = K P c = K R ( P w − C ) z_c P_i = \mathbf{K} P_c = \mathbf{K}\mathbf{R}(P_w - C) zcPi=KPc=KR(PwC)

为了写成一个更加紧凑的形式,引入齐次坐标,将世界坐标系写成 P w = ( x w , y w , z w , 1 ) P_w = (x_w, y_w, z_w, 1) Pw=(xw,yw,zw,1),则上述式子可以表示成:

z c P i = [ K R − K R C ] P w = H P w z_c P_i = \begin{bmatrix} \mathbf{K}\mathbf{R} & - \mathbf{K}\mathbf{R} C \end{bmatrix} P_w = \mathbf{H} P_w zcPi=[KRKRC]Pw=HPw

上式的 H \mathbf{H} H 是一个 3 × 4 3 \times 4 3×4 的投影矩阵,可以表示成:

H = K R [ I − C ] \mathbf{H} = \mathbf{K}\mathbf{R} \begin{bmatrix} \mathbf{I} & -C \end{bmatrix} H=KR[IC]

K \mathbf{K} K 就是相机内参矩阵, R \mathbf{R} R 是相机外参中的旋转矩阵, C C C 是平移量,上面的内参矩阵 K \mathbf{K} K 是理想的小孔成像模型,如果考虑到实际情况,更一般的内参矩阵会考虑到装配误差,像素的长宽不一致等问题,内参矩阵更一般的形式如下所示:

K = [ a x s p x 0 a y p y 0 0 1 ] \mathbf{K} = \begin{bmatrix} a_x & s & p_x \\ 0 & a_y & p_y \\ 0 & 0 & 1 \end{bmatrix} K=ax00say0pxpy1

其中,

a x = f d x a y = f d y a_x = \frac{f}{dx} \quad a_y = \frac{f}{dy} ax=dxfay=dyf

上式将尺度由实际的 mm 转换成像素为单位,dx,dy 表示单个像素的长宽值, p x , p y p_x, p_y px,py 也表示实际的像素个数

相机标定

为了得到相机的外参,内参,根据上面的表达式,可以通过精确地测量三维世界的坐标点和图像上的坐标点,建议对应关系,再求解线性方程,从而获得投影矩阵,然后再通过矩阵分析,获得相机的内参,外参,这种方法的缺陷就是需要知道精确的三维坐标,这个在实际使用的时候不太方便,在实际使用的时候,一般都是用张正友标定法,这个方法的具体细节后面可以找个时间单独讲,这里就大概介绍一下基本的流程,这个方法已经集成到 OpenCV 里了。

  • 准备一个标定板,比如黑白棋盘格,测量棋盘格格子的尺寸
  • 对需要标定的相机,从各个角度拍摄一组图像
  • 对获取的图像提取角点信息,获取角点在图像上的坐标,调用函数 cv2.findChessboardCorners
  • 进一步获取更精确的角点坐标,调用函数 cv2.cornerSubPix
  • 调用 OpenCV 的函数进行内外参的计算,调用函数 cv2.calibrateCamera
  • 最后会返回四组参数:mtx, dist, rvecs, tvecs
  • mtx 内参矩阵
  • dist 畸变系数
  • rvecs 外参的旋转矩阵
  • tvecs 外参的平移量
参考

CMU 计算摄影课 http://graphics.cs.cmu.edu/courses/15-463/

多视图几何基础——深入理解相机内外参数 https://zhuanlan.zhihu.com/p/54139614

相机标定的原理及实现 https://blog.csdn.net/weixin_43843780/article/details/89294131文章来源地址https://www.toymoban.com/news/detail-407972.html

到了这里,关于相机的内外参与相机标定的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 相机标定和双目相机标定标定原理推导及效果展示

      参考了一些大佬的文章,整理了一下相机标定和双目标定的原理和推导。   摄像机成像就是空间场景投影至二维图像平面的空间变换过程。摄像机标定的要解决两个问题:首先确定三维空间点与像素平面像素点间的转换关系,即求解相机内外参;然后确定相机成像过程中

    2023年04月09日
    浏览(44)
  • 相机标定 - (02) - 相机标定步骤与原理

    目录 2 相机标定步骤 2.1 张正有标定操作步骤 2.2 张正有标定原理 参考文章: 三步骤详解张正友标定法_谜之_摄影爱好者的博客-CSDN博客         1998年,张正友提出了基于二维平面靶标的标定方法,使用相机在不同角度下拍摄多幅平面靶标的图像,比如棋盘格的图像,然

    2024年02月11日
    浏览(67)
  • 关于相机内参与外参的浅读

    原文地址:https://tunmx.github.io/posts/CH-Camera-internal-and-external-parameters/ 学习人脸3D重建的第一天,在首次接触3D相关的内容,必须要搞清楚相机的成像原理,如何将真实三维空间中的三维点与显示器、屏幕和图像等二维成像的平面映射,以及了解该过程的推导方式和相关坐标系的

    2024年02月15日
    浏览(37)
  • 相机标定-机器视觉基础(理论推导、Halcon和OpenCV相机标定)

             相机标定是获得目标工件精准坐标信息的基础。首先,必须进行相机内参标定,构建一个模型消除图像畸变;其次,需要对相机和机器人的映射关系进行手眼标定,构建一个模型将图像坐标系上的点映射到世界坐标系。主要分为背景知识、相机内外参模型推导、

    2023年04月21日
    浏览(45)
  • 相机标定—— 张正友标定法(1)

    我们首先要明白两个问题:1、相机是如何成像的?2、相机标定的目的是什么? 相机的成像过程涉及了 4 种坐标系与 3 种变换关系,这 3种变换关系分别是刚体变换、投影变换和离散化。 图 1 : 四 种 坐 标 系 的 关 系 图1 :四种坐标系的关系 图 1 : 四 种 坐 标 系 的 关 系

    2023年04月09日
    浏览(82)
  • 【相机标定】相机内参

    相机在计算机视觉方面的一些应用一般需要相机标定。我们总是听到标定这个词,那么具体标定的是什么呢?相机的拍摄是一个三维到二维(透视投影)的过程,这个过程可以用数学模型去表述,标定便是计算这个数学模型中的参数,我们最终希望通过这些参数能够从二维的

    2023年04月10日
    浏览(45)
  • 相机标定-张正友棋盘格标定法

    目录 1.针孔相机模型 2.相机成像过程 2.1  各个坐标系之间的转换 2.1.1 图像坐标系到像素坐标系  2.1.2 相机坐标系到图像坐标系  2.1.3世界坐标系到相机坐标系  2.1.4世界坐标系到像素坐标系 3.畸变与畸变矫正 3.1 畸变 3.2 畸变公式 4.相机标定原理 5.张正友标定法介绍 5.1张正友

    2024年01月16日
    浏览(45)
  • 【三维重建】相机标定:张正友标定法

    本系列开始于2022.12.25,开始记录三维重建项目课题研究时的学习笔记,其中主要分为以下几部分组成: 一、相机成像及坐标系之间的转换关系 二、相机标定:张正友标定法 三、特征检测与匹配 四、运动恢复结构法 目录 系列文章目录 文章目录 前言 一、 标定目的 二、 张正

    2024年02月07日
    浏览(38)
  • 【相机标定】opencv python 标定相机内参时不计算 k3 畸变参数

    畸变参数 k3 通常用于描述径向畸变的更高阶效应,即在需要高精度的应用中可以用到,一般的应用中 k1, k2 足矣。 常见的应用中, orbslam3 中是否传入 k3 是可选的,而 kalibr 标定中则只需要传入 k1, k2 。但计算 k3 时的 k1, k2 不等于不计算 k3 时的 k1, k2 ,因此需要学会两种场景下

    2024年02月09日
    浏览(38)
  • matlab相机标定求得相机内参

    可以去官网下载标定板,然后使用我们的相机进行拍照(10~15张即可): 下载请点击这里:here 在拍摄照片之前,先量取对应的每个方格的长度: 如下: 打开MATLAB的命令行: 输入 cameraCalibrator #调用标定的工具箱 添加的是刚刚我们拍照标定板的图片。 点击运行按钮 参数导出

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包