相机模型的内参、外参

11 篇文章 0 订阅

相机模型的内参、外参

这篇笔记主要参考:slam十四讲第二版(高翔)

相机将三维世界中的坐标点(单位为米)映射到二维的像素平面(单位为像素)的过程能够使用一个几何模型来进行描述,为了简单起见这个模型我们通常使用针孔模型。同时,由于相机镜头上透镜的存在,透镜的安装不能保证绝对的准确,因此在成像的过程中还会出现畸变。因此,我们使用针孔模型和畸变模型来描述整个投影过程。

针孔模型和畸变模型能够把外部的三维点投影到相机内部的成像平面,这组参数就构成了相机的内参(intrinsics)

1. 针孔模型、畸变模型(内参)

针孔模型可以用中学学习的小孔呈现原理来进行解释,如下图所示,

Image

图中包括两个坐标系,一个是相机内部的物理成像平面坐标系 O ′ − x ′ − y ′ O^\prime-x^\prime-y^\prime Oxy,这是一个二维的坐标系,还有一个是以相机的光心为中心的相机坐标系 O − x − y − z O-x-y-z Oxyz,这是一个三维坐标系。根据小孔成像原理,现实世界中的 P P P点在经过小孔 O O O投影之后,落在物理平面 O ′ − x ′ − y ′ O^\prime-x^\prime-y^\prime Oxy上,成像点为 P ′ P^\prime P,设 P P P的坐标为 [ X , Y , Z ] T [X,Y,Z]^T [X,Y,Z]T P ′ = [ X ′ , Y ′ , Z ′ ] T P^\prime=[X^\prime,Y^\prime,Z^\prime]^T P=[X,Y,Z]T,并且设物理成像平面到小孔的距离为 f f f(焦距),那么根据三角形的相似原理,我们很容易得到如下的等式:
Z f = − X X ′ = − Y Y ′ \frac{Z}{f} = - \frac{X}{X^\prime} = - \frac{Y}{Y^\prime} fZ=XX=YY
为了让模型更符合实际,我们可以利用算法等价地把成像平面对称地放到相机的前方,和三维空间点一起放在相机坐标系的同一侧,如图所示:

Image

这样我们就可以把负号去掉了,使式子更加简洁

Z f = X X ′ = Y Y ′ X ′ = f X Z Y ′ = f Y Z \begin{align*} \frac{Z}{f} & = \frac{X}{X^\prime} = \frac{Y}{Y^\prime} \\ X^\prime & = f\frac{X}{Z} \\ Y^\prime & = f\frac{Y}{Z} \end{align*} fZXY=XX=YY=fZX=fZY

上式描述了点 P P P和它的像之间的空间关系,这里的所有单位都可以用米(m)来表示。不过在最终的相机中,我们获得的是一个个的像素,这需要我们在成像平面上进行采样和量化。为了描述传感器将感受到的光线转换成图片像素的过程,我们设在物理成像平面上固定着一个像素平面 o − u − v o-u-v ouv,如下图所示

Image

像素坐标系通常的定义方式为:原点 o o o位于图像的左上角, u u u轴和 x x x轴平行, v v v轴向下和 y y y轴平行,像素坐标系和成像平面之间相差了一个缩放和一个原点的平移。我们假设现像素平面下的坐标 P ′ = [ u , v ] T P^\prime=[u,v]^T P=[u,v]T。设像素坐标在 u u u轴上缩放了 α \alpha α倍,在 v v v轴上缩放了 β \beta β倍,同时原点移动了 [ c x , c y ] T [c_x,c_y]^T [cx,cy]T,这样 P ′ P^\prime P在成像坐标系下的坐标 [ X ′ , Y ′ ] T [X^\prime,Y^\prime]^T [X,Y]T与像素坐标系下的坐标 [ u , v ] T [u,v]^T [u,v]T具有如下的关系:
{ u = α X ′ + c x v = β Y ′ + c y \left\{ \begin{align*} u & = \alpha X^\prime + c_x \\ v & = \beta Y^\prime + c_y \end{align*} \right. {uv=αX+cx=βY+cy
代入之前的关系,有下式
{ u = α f X Z + c x v = β f Y Z + c y \left\{ \begin{align*} u & = \alpha f\frac{X}{Z} + c_x \\ v & = \beta f\frac{Y}{Z}+ c_y \end{align*} \right. uv=αfZX+cx=βfZY+cy
然后把 α f \alpha f αf合并为 f x f_x fx,把 β f \beta f βf合并为 f y f_y fy,得:
{ u = f x X Z + c x v = f y Y Z + c y \left\{ \begin{align*} u & = f_x\frac{X}{Z} + c_x \\ v & = f_y\frac{Y}{Z}+ c_y \end{align*} \right. uv=fxZX+cx=fyZY+cy
其中, f f f的单位为米, α , β \alpha, \beta α,β的单位为像素/米。再将上式写成齐次的形式
[ u v 1 ] = 1 Z [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] ≜ 1 Z K P \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \frac{1}{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} \triangleq \frac{1}{Z}\bold{K}\bold{P} uv1 =Z1 fx000fy0cxcy1 XYZ Z1KP
然后再将 Z Z Z移到左边
Z [ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] ≜ K P Z\begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} \triangleq \bold{K}\bold{P} Z uv1 = fx000fy0cxcy1 XYZ KP
其中,我们将中间量组成的矩阵 K \bold{K} K称为相机的内参矩阵(Camera Intrinsics)。 K \bold{K} K通常认为,相机的内参在出厂之后就已经固定好了,不会在使用的过程中发生变化,有时 K \bold{K} K是由厂家提供,有时 K \bold{K} K需要自己进

有了内参矩阵 K \bold{K} K,我们就可以通过确定像素点的坐标 P u v P_{uv} Puv,来反算出点 P P P在相机坐标系中的位置 [ X , Y , Z ] T [X,Y,Z]^T [X,Y,Z]T,然后通过这个位置就可以计算出点 P P P在世界坐标系world中的坐标 P w P_w Pw了。

相机的畸变模型,这里不再介绍了,感兴趣的可以去看原书。

2. 手眼标定(外参)

相机的外参一般指的是从相机坐标系到机器人的基坐标系的齐次变换矩阵,当然这个齐次变换矩阵也可以用旋转矩阵 R \bold{R} R和平移向量来进行描述 t \bold{t} t,有下式成立
Z P u v = Z [ u v 1 ] = K ( R P w + t ) = K T P w ZP_{uv} = Z \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \bold{K}(\bold{R}P_w + \bold{t}) = \bold{K}\bold{T}P_w ZPuv=Z uv1 =K(RPw+t)=KTPw

这个在以后的博客中再详细介绍。

Reference

[1]slam十四讲第二版(高翔)

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: OpenCV提供了计算相机内参的函数cv::calibrateCamera(),它可以通过多组已知内参和对应的二维图像点与三维场景点的对应关系,估计相机内参矩阵和畸变系数。通过这些已知的相机内参,我们可以根据棋盘格标定板或其他已知尺寸的物体,得到它们在图像中的二维投影点。 在得到了相机内参矩阵,我们可以使用cv::solvePnP()函数计算外参矩阵。这个函数可以根据一组已知的三维物体坐标和对应的二维图像点,通过解决透视投影问题估计出相机外参矩阵。这个外参矩阵包含了相机相对于世界坐标系的旋转向量和平移向量。通过这些外参矩阵,我们可以将三维物体与相机坐标系进行对齐,实现物体在图像中的定位和姿态估计等功能。 需要注意的是,为了获得准确的外参矩阵,我们需要确保提供的三维物体坐标和对应的二维图像点是匹配正确的。同时,还需要保证使用的内参矩阵是准确的。如果内参矩阵存在误差,会对最后的外参估计结果产生影响。 总之,通过已知的相机内参,可以利用OpenCV提供的函数计算相机外参矩阵。这些内外参矩阵的计算过程是相机标定和姿态估计等计算机视觉应用中的重要基础。 ### 回答2: 在计算机视觉中,opencv是一个非常流行的开源计算机视觉库,用于处理图像和视频数据。求解相机内参外参是计算机视觉领域中的一个常见问题。内参相机的内部参数,包括焦距、光心等,用于描述相机的内部特性。外参相机与世界坐标系之间的变换关系,包括旋转矩阵和平移向量,用于将相机坐标系中的点映射到世界坐标系中。 在opencv中,可以通过多幅已知内参的图像来计算相机外参。首先,从场景中选取一些已知世界坐标系下的特征点,如棋盘格的角点。然后,使用opencv提供的函数,在每一幅图像中检测这些特征点的像素坐标。 接下来,使用相机模型将世界坐标系下的点投影到图像坐标系中,得到对应的像素坐标。这样,对于每一幅图像,都得到了世界坐标系下的特征点和对应的像素坐标。然后,将这些特征点和像素坐标作为输入,使用opencv中的函数来计算相机外参。 具体来说,可以使用函数cv::solvePnP()来求解相机外参。该函数需要输入世界坐标系中的特征点和对应的像素坐标,以及相机内参矩阵。然后,该函数会返回相机的旋转向量和平移向量,即相机外参。 总结起来,为了求解相机外参,可以通过使用opencv中的solvePnP函数,传入已知内参和特征点在世界坐标系中的坐标和对应的像素坐标,来计算相机的旋转矩阵和平移向量,从而得到相机外参信息。 ### 回答3: 计算相机的外部参数,也叫做相机的位姿,是根据已知的相机内部参数和一些已标定的图像信息来实现的。OpenCV提供了相应的函数和方法来实现这个过程。 首先,我们需要知道相机内参,包括焦距、主点坐标和畸变参数。这些内参可以通过相机的标定获得。 其次,我们需要准备一些已知的三维空间点和对应的图像点。这些点应当在空间中呈现出一定的分布,以便于对相机的位姿进行估计。这些点的对应关系可以通过一些特征点匹配算法来获得。 接下来,我们使用solvePnP函数来计算外参。solvePnP函数可以通过输入的三维空间点和对应的图像点,利用相机内参来计算相机的位姿。具体来说,solvePnP函数会返回一个旋转矩阵和一个平移向量,它们分别表示相机坐标系到世界坐标系的变换。 最后,我们可以根据旋转矩阵和平移向量来生成相机外参。通过这些外参信息,我们可以知道相机在世界坐标系中的位姿,也就是相机相对于世界的位置和方向。 总之,OpenCV提供了求解相机外参的函数和方法,我们可以根据已知的相机内参和一些已标定的图像信息来计算相机的位姿,从而实现对相机位姿的估计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

木心

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

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

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

打赏作者

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

抵扣说明:

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

余额充值