直接线性变换法是建立像点坐标和相应物点物方空间坐标之间直接的线性关系的算法。特点:不需要内外方位元素;适合于非量测相机;满足中、低精度的测量任务;可以标定单个相机。

各坐标系之间的关系推导直接线性变换解法

1.1 像素坐标系与像平面坐标系

图 1 像素坐标系与像平面坐标系间的关系

两坐标系的关系式如下:

像素坐标系即CCD坐标系,是以左上角为原点,水平向右为$u$方向,竖直向下为$v$方向;像平面坐标系是影像平面内的直角坐标系,用以表示像点在像平面上的位置,其以像主点$o$为原点,$x$方向与$u$方向平行,$y$方向与$v$方向平行。其二者的关系如右图所示,

$u= \frac{x}{dx}+u_{0}\\v=\frac{y}{dy}+v_{0}$

式中,$dx$为在$x$方向上每个像素的宽度;$dy$为在$y$方向上每个像素的高度。

将上式化为齐次坐标矩阵形式为

$\begin{bmatrix}u\\ v\\ 1\end{bmatrix}=\begin{bmatrix}\frac{1}{dx} & 0 & u_{0}\\ 0 & \frac{1}{dy} & v_{0}\\ 0 & 0 & 1\end{bmatrix}\begin{bmatrix}x\\ y\\ 1\end{bmatrix}$

1.2 像平面坐标系与像空间坐标系

像空间坐标系是以摄站点$S$为坐标原点,摄影机的主光轴$SO$坐标系的$Z_{C}$轴,像空间坐标系的$X_{C}$、$Y_{C}$轴分别与像平面坐标系的$x$、$y$轴平行。

图 2 像平面坐标系与像空间坐标系的关系

两坐标系的关系如下式

$\left\{\begin{matrix}\frac{x}{f}=\frac{X_{C}}{Z_{C}}\\ \frac{y}{f}=\frac{Y_{C}}{Z_{C}}\end{matrix}\right.\Rightarrow \left\{\begin{matrix}Z_{C}\cdot x=f\cdot X_{C}\\ Z_{C}\cdot y=f\cdot Y_{C}\end{matrix}\right.$

将上式化为矩阵形式为

$Z_{C}\begin{bmatrix}x\\ y\\ 1\end{bmatrix}=\begin{bmatrix}f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0\end{bmatrix}\begin{bmatrix}X_{C}\\ Y_{C}\\ Z_{C}\\ 1\end{bmatrix}$

1.3 像空间坐标系与笛卡尔空间坐标系

笛卡尔空间坐标系即为所摄物体所在的空间直角坐标系。两坐标系间的关系公式如下

$\begin{bmatrix}X_{C}\\ Y_{C}\\ Z_{C}\end{bmatrix}=R\begin{bmatrix}X\\ Y\\ Z\end{bmatrix}+\begin{bmatrix}X_{S}\\ Y_{S}\\ Z_{S}\end{bmatrix}$

化成齐次坐标矩阵形式为

$\begin{bmatrix}X_{C}\\ Y_{C}\\ Z_{C}\\1\end{bmatrix}=\begin{bmatrix}R & t\\ 0^{T} & 1\end{bmatrix}\begin{bmatrix}X\\ Y\\ Z\\1\end{bmatrix}=T\begin{bmatrix}X\\ Y\\ Z\\1\end{bmatrix}$

其中R,t

$R=\begin{bmatrix}r_{11} & r_{12} & r_{13}\\ r_{21} & r_{22} & r_{23}\\ r_{31} & r_{32} & r_{33}\end{bmatrix},t=\begin{bmatrix}t_{1}\\ t_{2}\\ t_{3}\end{bmatrix}$

1.4 四种坐标系的合成

由上述四个坐标系间的转换可得像素坐标系和笛卡尔空间坐标系的转换关系,见下式

$Z_{C}\begin{bmatrix}u\\ v\\ 1\end{bmatrix}=\begin{bmatrix}\frac{1}{dx} & 0 & u_{0}\\ 0 & \frac{1}{dy} & v_{0}\\ 0 & 0 & 1\end{bmatrix}\begin{bmatrix}f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0\end{bmatrix}\begin{bmatrix}R & t\\ 0^{T} & 1\end{bmatrix}\begin{bmatrix}X\\ Y\\ Z\\1\end{bmatrix}=\begin{bmatrix}l_{1} & l_{2} & l_{3} & l_{4}\\ l_{5} & l_{6} & l_{7} & l_{8}\\ l_{9} & l_{10} &  l_{11}& l_{12}\end{bmatrix}\begin{bmatrix}X\\ Y\\ Z\\1\end{bmatrix}$

由上式可得

$\left\{\begin{matrix}u=(l_{1}X+l_{2}Y+l_{3}Z+l_{4})/Z_{C}\\ v=(l_{5}X+l_{6}Y+l_{7}Z+l_{8})/Z_{C}\\ Z_{C}=l_{9}X+l_{10}Y+l_{11}Z+l_{12}\end{matrix}\right.\Rightarrow \left\{\begin{matrix}u=\frac{l_{1}X+l_{2}Y+l_{3}Z+l_{4}}{l_{9}X+l_{10}Y+l_{11}Z+1}\\ v=\frac{l_{5}X+l_{6}Y+l_{7}Z+l_{8}}{l_{9}X+l_{10}Y+l_{11}Z+1}\end{matrix}\right.$

$\left\{\begin{matrix}l_{1}=\frac{f\cdot r_{11}}{dx}+u_{0}\cdot r_{31} & l_{2}= \frac{f\cdot r_{12}}{dx}+u_{0}\cdot r_{32}& l_{3}= \frac{f\cdot r_{13}}{dx}+u_{0}\cdot r_{33}& l_{4}=\frac{f\cdot t_{1}}{dx}+u_{0}\cdot t_{3}\\ l_{5}= \frac{f\cdot r_{21}}{dx}+v_{0}\cdot r_{31}& l_{6}= \frac{f\cdot r_{22}}{dx}+v_{0}\cdot r_{32}& l_{7}= \frac{f\cdot r_{23}}{dx}+v_{0}\cdot r_{33}& l_{8}=\frac{f\cdot t_{2}}{dx}+v_{0}\cdot t_{3}\\ l_{9}= r_{31}& l_{10}= r_{32}& l_{11}= r_{33}& l_{12}=t_{3}\end{matrix}\right.$

式中,$(X、Y、Z)$为笛卡尔空间坐标系中的三维坐标,$(u,v)$为图像上对应三维点的像素坐标,$l_{1}...l_{12}$为笛卡尔空间坐标系与像素坐标系之间的关系系数,此外令$l_{12}=1$,因为$l_{12}$的取值对其他参数的值没有影响,顾上述两式是等同的,可由后续的计算过程证明。

2 相机内参数计算

2.1 DLT求解

将1.4小节中的最后一个方程组进行变换可得到下列等式

$\begin{bmatrix}X & Y & Z & 1 & 0 & 0 & 0 & 0 & -Xu & -Yu & -Zu\\ 0 & 0 & 0 & 0 & X & Y & Z & 1 & -Xv & -Yv & -Zv \end{bmatrix}\begin{bmatrix}l_{1}\\ l_{2}\\ l_{3}\\ l_{4}\\ l_{5}\\ l_{6}\\ l_{7}\\ l_{8}\\ l_{9}\\ l_{10}\\ l_{11} \end{bmatrix}-\begin{bmatrix}u\\ v\end{bmatrix}=0\Rightarrow BL=C$

上式中有11个未知数,每对点(像素与对应的三维点)可列两个等式,所以最少需要6对点才可解该方程。

未知数矩阵的解为

$L=(B^{T}B)^{-1}(B^{T}C)$

到此,即解出了$l_{1}...l_{11}$的值。

2.2 内参数计算

通过旋转矩阵的特性可求得相机的内参数

$\left\{\begin{matrix}u_{0}=l_{1}l_{9}+l_{2}l_{10}+l_{3}l_{11}\\ v_{0}=l_{5}l_{9}+l_{6}l_{10}+l_{7}l_{11}\\ f_{u}=\sqrt{l_{1}^{2}+l_{2}^{2}+l_{3}^{2}-u_{0}^{2}}\\ f_{v}=\sqrt{l_{5}^{2}+l_{6}^{2}+l_{7}^{2}-v_{0}^{2}}\end{matrix}\right.$

直接线性变换解法(DLT)用于标定相机的更多相关文章

  1. 相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)

    相机标定 一.相机标定的目的 确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数. 二.通用摄像机模型 世界坐标系.摄像机坐标 ...

  2. OpenCV相机标定和姿态更新

    原帖地址: http://blog.csdn.net/aptx704610875/article/details/48914043 http://blog.csdn.net/aptx704610875 ...

  3. 【双目备课】《学习OpenCV第18章》相机模型与标定整编

    一.相机模型 针孔模型.在这个简单模型中,想象光线是从场景或一个很远的物体发射过来的,但只有一条光线从该场景中的任意特定点进入针孔. 我们将这个图像进行抽象,就能够得到这样的结果: 其中,f为像到针孔 ...

  4. SLAM入门之视觉里程计(6):相机标定 张正友经典标定法详解

    想要从二维图像中获取到场景的三维信息,相机的内参数是必须的,在SLAM中,相机通常是提前标定好的.张正友于1998年在论文:"A Flexible New Technique fro Cam ...

  5. 相机标定:PNP基于单应面解决多点透视问题

              利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文:  ...

  6. Camera Calibration 相机标定:Opencv应用方法

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/49427383 Opencv中Camer ...

  7. 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)

    使用Opencv实现张正友法相机标定之前,有几个问题事先要确认一下,那就是相机为什么需要标定,标定需要的输入和输出分别是哪些? 相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的 ...

  8. Autoware 进行 Robosense-16 线雷达与 ZED 双目相机联合标定!

    项目要标定雷达和相机,这里记录下我标定过程,用的速腾 Robosense - 16 线雷达和 ZED 双目相机. 一.编译安装 Autoware-1.10.0 我没有安装最新版本的 Autoware, ...

  9. Camera Calibration 相机标定

    Camera Calibration 相机标定 一.相机标定方法 在opencv中提供了一组函数用于实现相机的标定,标定返回的值包括:相机内参矩阵(fx fy xc yc).相机外参矩阵(R t)以及 ...

随机推荐

  1. Spring MVC的handlermapping之请求分发如何找到正确的Handler(BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping)

    本文讲的是Spring MVC如何找到正确的handler, 前面请求具体怎么进入到下面的方法,不再细说. 大概就是Spring mvc通过servlet拦截请求,实现doService方法,然后进入 ...

  2. foo是什么?

    在英文程序员社区里,foo bar baz这些词是常用于作为占位符而使用的.要查wiki的话,这项更合适:http://en.wikipedia.org/wiki/Metasyntactic_vari ...

  3. C# Redis Server分布式缓存编程(二)(转)

    出处;http://www.cnblogs.com/davidgu/p/3263485.html 在Redis编程中, 实体和集合类型则更加有趣和实用 namespace Zeus.Cache.Red ...

  4. Ural 1519 Formula 1 (DP)

    题意:给定一个 n * m 的矩阵,问你能花出多少条回路. #pragma comment(linker, "/STACK:1024000000,1024000000") #inc ...

  5. Word2007发布博客

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  6. [label][javascript-Unit Test][JSLint]A Guide To JSLint Messages

    原文链接: http://www.jameswiseman.com/blog/2011/03/26/coding-convention-an-style-guide/ http://www.james ...

  7. StringFormate使用

    1常规类型的格式化 1.1显示不同转换符实现不同数据类型到字符串的转换 转换符   说明 示例 %s     字符串类型 “mingrisof” %c     字符类型 'm' %b 布尔类型 tru ...

  8. PHP爬虫(3)PHP DOM开源代码里的大坑和字符编码

    一.开源代码的问题 在PHP爬虫(2)中介绍了开源工程Sunra.PhpSimple.HtmlDomParser.在实际工作中发现一个问题,例如http://www.163.com的网页数据怎么也抓取 ...

  9. c#格式化字符

    1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0 ...

  10. 如何在CentOS 7中禁用IPv6

    最近,我的一位朋友问我该如何禁用IPv6.在搜索了一番之后,我找到了下面的方案.下面就是在我的CentOS 7 迷你服务器关闭IPv6的方法. 你可以用两个方法做到这个. 方法 1 编辑文件/etc/ ...