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

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

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. DBA的工作职责和每日工作

    DBA一般职责 1.安装和升级数据库服务器,以及应用程序工具构建和配置网络环境. 2.熟悉数据库系统的存储结构预测未来的存储需求,制订数据库的存储方案. 3.根据开发人员设计的应用系统需求创建数据库存 ...

  2. JavaScript 语法总结3

    1. 数组初始化可以跳着来  var s = [1,2,,,,6]; // 中间省略的元素为undefined 2. 函数定义表达式:  var f = function(args){ return ...

  3. 用Swift实现一款天气预报APP(三)

    这个系列的目录: 用Swift实现一款天气预报APP(一) 用Swift实现一款天气预报APP(二) 用Swift实现一款天气预报APP(三) 通过前面的学习,一个天气预报的APP已经基本可用了.至少 ...

  4. (最短路 SPFA)Invitation Cards -- poj -- 1511

    链接: http://poj.org/problem?id=1511 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82829#probl ...

  5. 23 DesignPatterns学习笔记:C++语言实现 --- 1.3 Singletion

    23 DesignPatterns学习笔记:C++语言实现 --- 1.3 Singletion 2016-07-21 (www.cnblogs.com/icmzn) 模式理解  

  6. Hbase和传统数据库的区别

    在说HBase之前,我想再唠叨几句.做互联网应用的哥们儿应该都清楚,互联网应用这东西,你没办法预测你的系统什么时候会被多少人访问,你面临的用户到底有多少,说不定今天你的用户还少,明天系统用户就变多了, ...

  7. Sourcetree拉取推送问题

    以下sourcetree使用时出现的问题:可以暂时用删除passwd文件解决 拉取时账号密码输入错误 已经有一个远程仓库了,但是需要拉取另一个远程仓库时,提示URL 进入 C:\Users\用户名\A ...

  8. 关于windows服务注册的问题

    开发工具:VS2012 语言:C# 今天的工作内容是把wcf服务以windows服务的方式运行,由于之前没有做过windows服务,所有在网上找了些文章来看下,发现创建windows 服务是一件很简单 ...

  9. 在ASP.NET Core2上操作MongoDB就是能这么的简便酷爽(自动完成分库分表)

    NoSQL是泛指非关系型的数据库,现今在我们的项目中也多有使用,其独特的优点为我们的项目架构带来了不少亮点,而我们这里的主角(MongoDB)则是NoSQL数据库家族中的一种.事实上,NoSQL数据库 ...

  10. Math类的三个方法比较: floor() ceil() round()

    public class Test { public static void main(String[] args) { double d1 = 3.4, d2 = 3.6; //正数 double ...