前段时间有人问我怎么由点的世界坐标计算计算对应的像素坐标,我详细的推导了下,现在把整个过程写篇博客。虽然网上有很多相关的文章,但是我可能会写的更详细些。
一.小孔成像模型
1.基本概念及公式
如图所示(图片来自视觉SLAM十四讲),图中的$O - xyz$坐标系称作相机坐标系,其中$O$是相机透镜的中心(具体应该是是相机透镜的后节点),$z$轴与主光轴重合,其中主光轴是通过透镜两个球面中心的直线(很好理解对吧?)。图中的$O' - x'y'$称为像平面坐标系(我们先以实际距离(米)为单位进行讨论,后面再说像素坐标系),其中$O'$称为像主点,是主光轴与物理成像平面的交点,在理想情况下(主光轴与物理成像平面垂直),也是$O$向物理成像平面做垂线与其的交点。那么不是理想情况下呢(你应该猜到实际中这种理想情况并不存在),这就会产生图像的畸变,关于畸变我们后面说。图中的$f$(focal length)称为焦距,明显可以看到是$O$和$O'$点的连线长度,暂时我们也以米为单位进行讨论。再次强调下,我们上面的所有坐标或者长度均以米为单位。
细心的读者会发现这是在物理成像平面上成的像是反的,为了解决这个问题我们将物理成像平面放到光心的前面来,这样并不改变成像的几何意义但可以直观很多。如下图(图来自/gaoxiang12/p/4652478.html)所示:(有人可能会问,“刚才不是$x$($x'$)轴向右$y$($y'$)向下吗,怎么现在反过来了??”,答:你不会没看出来原来相机正放着现在反着放了吧...)
现在我们假设实际中有一点$P$,其在相机坐标系中的坐标为$(X,Y,Z)$,其投影在物理成像平面上的像点在坐标系$O' - x'y'$中的像点为$(X',Y')$,根据三角形相似,可以容易的得出以下的等式:
$$\frac{Z}{f} = \frac{X}{{X'}} = \frac{Y}{{Y'}}$$
整理下得到:
$$X' = f\frac{X}{Z}$$
$$Y' = f\frac{Y}{Z}$$
通过此公式,在理想情况下(无畸变)即可由某点在相机坐标系下的坐标计算出其在像平面坐标系下的坐标,也就是其在相片上的像点。值得一提的是,可以看到公式中出现了$\frac{X}{Z}$和$\frac{Y}{Z}$,因此像极坐标系中的点坐标的单位并不一定非要是米,只要符合一定的比例关系即可,这也就是说,你用相机拍两个只有大小不同的物体时,是可以得到完全相同的两张图像的。
2.像素坐标系
前面讨论的像点坐标都是在像平面坐标系中,即以像主点$O'$为原点,向右为$x'$轴,向下为$y'$轴。但是由于现在一般获取的图像并非胶片而是像素矩阵,因此更好的描述像点的坐标的方式是以像素为单位,因为你可以直接在相片上数出一个点在几行几列而没法知道他实际以米为单位的坐标,事实上这两者是可以转换的,下面就来说下两者怎么转化。
如上图(图片来自/aoulun/article/details/78768570)所示,其中的${O_i} - xy$为刚才所讲的像平面坐标系,而${O_p} - uv$就是像素坐标系,坐标轴和${O_i} - xy$坐标轴平行,原点在图像的左上角(因为我们一般确定某个像素的位置都是用第几行第几列来描述)。其中${O_i} - xy$的单位为米,${O_p} - uv$单位为像素(1个像素,2个像素,3个像素...(困了))。接下来我们说下像素是什么,在相机中每个感光单元(一个像素对应的CCD或CMOS硬件单元)接受外界光的辐射产生电流,记录一个像素值的大小,接受的光越强,则产生的电流越大,像素值越大,反之越小。感光单元一般很小,比如(5μm×6μm),因此图片中一个像素值就是对应实际位置的感光单元产生的与电流强度有关的一个值。如果你以前没做过图像处理也没结果计算机视觉那你现在应该懂电子图像到底是什么了,没错他就是一个像素值组成的矩阵。现在我们来看看这两个坐标系间到底有什么关系,很明显就是原点不一样,也就是说有一个平移关系,还有就是坐标的单位不一样,一个是米一个是像素,也就是两种坐标差一个系数比例的关系。于是我们可以用下面的公式来描述两者的关系:
$$u = \alpha X' + {c_x}$$
$$v = \beta Y' + {c_y}$$
通过上面的公式就可以将同一个点在像平面坐标系中以米为单位的像点坐标转换成在像素坐标系中以像素为单位的像素坐标。很明显正如我们刚才说的,就是做了一个缩放+平移变换而已。平移变换很好理解,其中的${c_x}$和${c_y}$就是图中的${u_0}$和${v_0}$。我们主要说下缩放变换以及公式中的$\alpha$和$\beta$是什么,$\alpha X'$然后加上{c_x}是像素坐标,那么很显然$\alpha X'$就是像点相对于像平面坐标系原点(图中的${u_0}$和${v_0}$)的以像素为单位的偏差,那么既然$X'$的单位是米,$\alpha$的单位就应该是一米对应的像素个数,即像素/米。说到这显然$\alpha$和$\beta$的意义已经很明显了,加入一个相机感光单元的大小为5μm×6μm,那么$\alpha = \frac{1}{{5 \times {{10}^{ - 6}}}}$,$\beta = \frac{1}{{6 \times {{10}^{ - 6}}}}$。
至此我们说完了像素坐标系及与像平面坐标系的转换。
3.相机内参
我们将第1节得到的由相机坐标系下点的坐标计算其像平面坐标系下想点的坐标带入到上节得到的像平面坐标系下的坐标向像素坐标系下转化的公式中,可以得到以下公式:
$$u = \alpha f\frac{X}{Z} + {c_x}$$
$$v = \beta f\frac{Y}{Z} + {c_y}$$
令其中的$\alpha f$为${f_x}$,$\beta f$为${f_y}$(一切变得熟悉起来),得到如下公式:
$$u = {f_x}\frac{X}{Z} + {c_x}$$
$$v = {f_y}\frac{Y}{Z} + {c_y}$$
用矩阵描述一下为:
$$\left[ {\begin{array}{*{20}{c}}
u\\
v\\
1
\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}
{{f_x}}&0&{{c_x}}\\
0&{{f_y}}&{{c_y}}\\
0&0&1
\end{array}} \right]\left[ {\begin{array}{*{20}{c}}
{\frac{X}{Z}}\\
{\frac{Y}{Z}}\\
1
\end{array}} \right]$$
其中的
$\left[ {\begin{array}{*{20}{c}}
{\frac{X}{Z}}\\
{\frac{Y}{Z}}\\
1
\end{array}} \right]$称作归一化坐标,其中的
$\left[ {\begin{array}{*{20}{c}}
{{f_x}}&0&{{c_x}}\\
0&{{f_y}}&{{c_y}}\\
0&0&1
\end{array}} \right]$就是传说中的相机内参,可以看到共有四个物理变量。讲到这已经可以从点的实际坐标计算出其像素坐标了,是不是感觉讲到头了?醒醒,还记得我们设定的点的实际坐标是相机坐标系中的吗?但是实际中我们得到的点的坐标并不是相机坐标系下的坐标,而是一种被称为世界坐标系下的坐标,那如何由世界坐标系下的坐标计算对应的像点坐标呢,下节我们详细说说。
标签:frac,参及,像素,相机,坐标,array,内参,坐标系
来源: /lygxx/p/11384915.html
如果觉得《相机的内参会改变吗_相机内参外参及成像过程》对你有帮助,请点赞、收藏,并留下你的观点哦!