【相机标定】相机内参

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

相机标定

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

拍照过程简化(针孔相机模型)

拍照是一个三维世界降维到二维的不可逆的操作,可以说相机拍摄是一个 R 3 → R 2 \mathbb{R}^3 \to \mathbb{R}^2 R3R2 的变换。
相机标定的目的就是找到一个合适的数学模型,近似表示这个三维到二维的过程,并且求其逆过程。

实际的镜头模组都是非常复杂的,我们可以找一个与这个镜头具有相同的物像共轭关系的凸透镜来等效这个镜头,我们把这个凸透镜称作等效透镜。为了分析的方便,我们用一个等效透镜在数学上替代一整个镜头模组。

【相机标定】相机内参 【相机标定】相机内参
Canon EF 85mm/F1.2L II USM 镜头模组 等效透镜

简化后的针孔相机模型中的 f 为焦距,但是这个焦距不是等效透镜的焦距,而是指图像传感器到等效透镜光心 O 的距离。
针孔相机模型大大简化了相机模型的数学复杂度,但是也有一些代价。针孔相机模型没有考虑相差(镜头畸变),没有考虑景深(因为针孔成像没有焦距的概念,认为物总是能够清晰成像)。

我们以小米 12S Ultra 的主摄为例,Sony IMX989 就是该款主摄的 CMOS 图像传感器。即便手机中的相机模组体积很紧凑,其中也是有多片镜头的,右下图是主摄的镜头组拆解,左图说的 23mm 等效焦距就是指跟这一堆镜片等效的等效镜片到 CMOS 的距离。像素尺寸指的是一个 CMOS 像素的边长,一个(正方形)像素尺寸约为 1.6μm。四合一像素尺寸是四个像素合成一个像素,所以边长 3.2μm。

小米12S Ultra主摄模组拆解
【相机标定】相机内参
【相机标定】相机内参

相机内参

相机拍摄过程中的四个坐标系

下图表示了摄影的过程,其实计算机视觉可以说是摄影或计算机图形学(Computer Graphics)的逆过程,想着如何利用已经降维成2D的信息去还原3D世界中的信息。

【相机标定】相机内参

这里使用四个坐标系来描述拍摄过程:像素坐标系、图像坐标系、相机坐标系、世界坐标系。

像素坐标系:图片是由像素组成的,每个像素可以用一个有序二元组(u,v)来表示,这个坐标系就叫做像素坐标系。像素坐标系是一个二维坐标系,标识了在每个像素在图像传感器中的位置,每次增量是 1 个像素。

图像坐标系:像素坐标系中的标号为(u,v),其中 u 轴对应实际物理尺寸 dx,v 轴对应实际物理尺寸 dy,图像坐标系是一个对应真实世界的尺寸二维坐标系,可以记为 ( x , y ) (x,y) (x,y)。图像坐标系也标记的是像素在图像传感器中的位置,不过增量是每个像素的实际物理尺寸,比如上面提到的 IMX989 的每个像素尺寸 1.6μm,对应这里的dx和dy。

相机坐标系:以相机光心为原点呈现的世界三维坐标系 ( X , Y , Z ) (X,Y,Z) (X,Y,Z),坐标系原点是相机等效镜头的光心。

世界坐标系:真实的世界三维坐标系 ( X w , Y w , Z w ) (X_w,Y_w,Z_w) (Xw,Yw,Zw),坐标系原点一般是外界的某一点。比如在机器人应用中经常是以机器人的基座为世界坐标系原点。

像素坐标系 图像坐标系 相机坐标系 世界坐标系
2D 坐标系,位于 CMOS 3D 坐标系
整数序号,标识像素位置,
原点位于 CMOS 左上角
对应真实世界物理尺寸,
标识像素在 CMOS 上的平面位置,
原点为相机光轴与 CMOS 的交点。
原点为相机光心 世界坐标系原点

相机拍照的过程可以分为以下几步:

  • 将世界坐标转换为相机坐标,存在刚体变换。其实对应的就是相机外参。
  • 相机坐标变为图像坐标,这是一个 3D->2D 的透视投影过程。
  • 图像坐标变为像素坐标,对图像坐标系进行离散化。

相机内参

相机内参便是求第二步和第三步中的参数。

为了描述的方便,我们可以将针孔相机模型翻转过来,如下图所示,因为主要用到三角关系,所以翻转前后在数学描述上是等价的。
【相机标定】相机内参

在相机坐标系中,像平面(图像传感器所在平面)为 Z = f Z=f Z=f(焦距,mm)。空间中一点 P 在相机坐标系下为 P ( X , Y , Z ) P(X,Y,Z) P(X,Y,Z),该点在像平面上的投影为点 p ( x . y ) p(x.y) p(x.y),在图像坐标系下为 p ( x , y ) p(x,y) p(x,y),在像素坐标系中的坐标为 ( u , v ) (u,v) (u,v)
  【相机标定】相机内参

根据三角形相似原理,通过右图可得图像坐标系和相机坐标系比例关系

x X = y Y = f Z \frac{x}{X}=\frac{y}{Y}=\frac{f}{Z} Xx=Yy=Zf

相机坐标系(3D) -> 图像坐标系(2D):于是我们 得到了 相机坐标系中一3D点 ( X , Y , Z ) (X,Y,Z) (X,Y,Z) 在图像坐标系中的对应平面位置 ( x , y ) (x,y) (x,y)

x = f Z X ,   y = f Z Y x={f \over Z}X,\ y={f \over Z}Y x=ZfX, y=ZfY

像素坐标系的原点位于图像传感器的左上角,记光心到 CMOS 零点的偏移为 c x , c y c_x,c_y cx,cy,也就是相机光心在像素坐标系中的坐标为 ( c x , c y ) (c_x,c_y) (cx,cy)。记每个像素在水平和竖直方向上的尺寸为 k , l k, l k,l (mm/pixel),由于像素不一定是正方形的,所以这里长宽分别表示,这个就对应上面说的CMOS像素尺寸1.6μm。

图像坐标系(连续2D) -> 像素坐标系(离散2D):则图像坐标系中一点 ( x , y ) (x,y) (x,y) 到像素坐标系中像素标号 ( u , v ) (u,v) (u,v) 的关系可以表示为

u = x k + c x = f k Z X + c x u={x\over k}+c_x={f \over kZ}X + c_x u=kx+cx=kZfX+cx

v = y l + c y = f l Z Y + c y v={y \over l}+c_y = {f \over lZ}Y + c_y v=ly+cy=lZfY+cy

f x = f / k , f y = f / l f_x=f /k, f_y=f /l fx=f/k,fy=f/l,则上面两式可以写成

u = f x X Z + c x ,   v = f y Y Z + c y u=f_x{X \over Z}+c_x,\ v=f_y{Y \over Z}+c_y u=fxZX+cx, v=fyZY+cy

其中 f x = f / k , f y = f / l f_x=f/k,f_y=f/l fx=f/k,fy=f/l(pixel)为像素焦距,即单位长度的像素个数,单位为像素。

上式写成矩阵形式为

[ u v 1 ] = 1 Z [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] \begin{bmatrix} u\\ v\\ 1 \end{bmatrix}= {1 \over Z} \begin{bmatrix} f_x & 0 & c_x\\ 0 & f_y & c_y\\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X\\ Y\\ Z \end{bmatrix} uv1=Z1fx000fy0cxcy1XYZ

上面的矩阵可以写成 Z p u v = K P Zp_{uv}=KP Zpuv=KP,中间的矩阵便是内参(intrinsics)矩阵,其中的四个参数便是要标定的内参。这个矩阵描述了相机坐标系到像素坐标系的变换关系。

有了相机内参我们便可以知道像素点对应的归一化平面(距光心距离为1的平面)的 x y 坐标,注意不是真实的XY坐标,因为空间点的深度值在透视投影过程中丢失了。

畸变

畸变(distortion)是对直线投影(rectilinear projection)的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration),可能是摄像机镜头的原因。

畸变模型:桶形畸变和枕形畸变。

相机中透镜的加入会对光线传播产生影响。透镜自身形状会影响光线传播,这种畸变(distortion,或失真)称为径向畸变;再者,相机组装过程中,镜片平面和 CMOS 不可能绝对平行,这种透镜平面和 CMOS 成像面不平行导致的畸变叫 切向畸变。

如果镜头没有畸变,那么点 P、光心 O、像点 p 应该是共线的。

径向畸变可以理解为像点沿距光心的长度方向发生了变化,切向畸变可以理解为像点沿切向(长度正交方向)发生了变化。一般使用多项式描述这些畸变, ( x d i s t o r t , y d i s t o r t ) (x_{distort}, y_{distort}) (xdistort,ydistort) 来描述畸变后的像点位置

径向畸变

x d i s t o r t = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y d i s t o r t = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) x_{distort}=x(1+k_1r^2 + k_2 r^4 + k_3 r^6) \\ y_{distort} = y(1+k_1 r^2 + k_2 r^4 + k_3 r^6) xdistort=x(1+k1r2+k2r4+k3r6)ydistort=y(1+k1r2+k2r4+k3r6)

切向畸变

x d i s t o r t = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t o r t = y + 2 p 2 x y + p 1 ( r 2 + 2 y 2 ) x_{distort}=x+2p_1xy + p_2(r^2 +2x^2) \\ y_{distort} = y + 2p_2xy +p_1(r^2 + 2y^2) xdistort=x+2p1xy+p2(r2+2x2)ydistort=y+2p2xy+p1(r2+2y2)

像平面(图像坐标系)上畸变后的像点坐标为

x d i s t o r t = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t o r t = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 2 x y + p 1 ( r 2 + 2 y 2 ) x_{distort}=x(1+k_1r^2 + k_2 r^4 + k_3 r^6)+2p_1xy + p_2(r^2 +2x^2) \\ y_{distort} = y(1+k_1 r^2 + k_2 r^4 + k_3 r^6) + 2p_2xy +p_1(r^2 + 2y^2) xdistort=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ydistort=y(1+k1r2+k2r4+k3r6)+2p2xy+p1(r2+2y2)

得到 5 个畸变参数 k 1 , k 2 , k 3 , p 1 , p 2 k_1, k_2, k_3, p_1, p_2 k1,k2,k3,p1,p2 后便可以对畸变进行建模。实际使用中也可以使用更简单的模型,比如径向畸变只使用二阶(只用 k 1 k_1 k1)多项式描述。

外参

内参是确定像素坐标系到图像坐标系的四个参数 c x , c y , f x , f y c_x,c_y,f_x,f_y cx,cy,fx,fy

世界坐标系到相机坐标系的变换矩阵 R , t \mathbf{R,t} R,t ​称为外参。

比如和机器人相关的应用中,一般外参是描述相机坐标系和机器人基坐标系之间的刚体变换。

如果有标定板的话,标定板的尺寸都是已知的。

参考

相机标定究竟在标定什么?–复旦光学博士 许翔翔

Computer Vision: A Modern Approach文章来源地址https://www.toymoban.com/news/detail-409028.html

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

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

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

相关文章

  • 计算机视觉之三维重建(二)(摄像机标定)

    标定示意图 标定目标 P ′ = M P w = K [ R   T ] P w P^{\\\'}=MP_w=K[R space T]P_w P ′ = M P w ​ = K [ R   T ] P w ​ 其中 K K K 为内参数, [ R   T ] [R space T] [ R   T ] 为外参数。该式子需要使用至少六对内外点对进行求解内外参数(11个未知参数)。 其中 R 3 × 3 , T 3 × 1 R_{3 times 3}, T_{3 times

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

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

    2024年02月09日
    浏览(41)
  • 【计算机视觉】相机

    我的《计算机视觉》系列参考UC Berkeley的CS180课程,PPT可以在课程主页看到。 成像原理 想要拍一张相片,直接拿胶片对着景物肯定是不行的,因为物体的每一点发出的光线都会到达胶片上的每一点,从而导致胶片上的影像非常模糊,甚至什么都看不出来。因此,我们想建立景

    2024年02月08日
    浏览(43)
  • 计算机视觉的相机选型

    #你一般什么时候会用到GPT?# 目前市面上的工业相机大多是基于CCD(ChargeCoupled Device)或CMOS(Complementary Metal Oxide Semiconductor)芯片的相机。一般CCD制造工艺更加复杂,也会更贵一点! 1、CCD工业相机主要应用在运动物体的图像提取,不过因为CMOS相机的成本低,所以应用也比较广

    2024年02月08日
    浏览(50)
  • 基于视觉重定位的室内AR导航APP的大创项目思路(3)手机相机内参数据获取和相机标定

    前情提要: 是第一次做项目的小白,文章内的资料介绍如有错误,请多包含! 相机内参是本身的物理数据,包括焦距f和缩放c,一般以矩阵K的形式存放和使用 1.相机的内参数据在建图的时候就需要使用,SLAM中需要根据相机内参数据结合传入的图像数据等进行建图,不然无法

    2024年02月09日
    浏览(53)
  • 计算机视觉基础(7)——相机基础

    从这一节开始,我们来学习 几何视觉 。中层视觉包括 相机模型、单目几何视觉、对极几何视觉和多目立体视觉等 。在学习几何视觉最开始,我们先来学习一下 相机模型 ,了解相机的基本原理,了解相机如何记录影像。 相机用于生成 二维的图像 ,图像最小的单元被称为

    2024年02月04日
    浏览(51)
  • 计算机视觉:多相机硬件同步拍摄

    目前主要有两种方法来同步不同传感器的信息(帧、IMU数据包、ToF等): 硬件同步(基于硬件信号触发,同步精度较高,需要硬件支持) 软件同步(基于时间戳或序列号同步,同步精度较低,无需硬件支持) 此博客重点介绍硬件同步,它允许在多个相机传感器之间精确同步

    2024年02月13日
    浏览(43)
  • OpenCV开发笔记(七十七):相机标定(二):通过棋盘标定计算相机内参矩阵矫正畸变摄像头图像

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136616551 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、

    2024年03月13日
    浏览(48)
  • 【计算机视觉】相机基本知识(还在更新)

    面阵相机则主要采用的 连续的、面状扫描光线 来实现产品的检测; 线阵相机即利用 单束扫描光 来进行物体扫描的工作的。 (1)面阵CCD工业相机: 优点 :应用面较广,如面积、形状、尺寸、位置,甚至温度等的测量。面阵CCD的优点是可以获取测量图像直观,二维图像信息

    2024年02月12日
    浏览(64)
  • 计算机视觉:OAK多相机硬件同步拍摄

    目前主要有两种方法来同步不同传感器的信息(帧、IMU数据包、ToF等): 硬件同步(基于硬件信号触发,同步精度较高,需要硬件支持) 软件同步(基于时间戳或序列号同步,同步精度较低,无需硬件支持) 此博客重点介绍硬件同步,它允许在多个相机传感器之间精确同步

    2024年02月09日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包