直接线性变换解法(DLT)用于标定相机
直接线性变换法是建立像点坐标和相应物点物方空间坐标之间直接的线性关系的算法。特点:不需要内外方位元素;适合于非量测相机;满足中、低精度的测量任务;可以标定单个相机。
1 各坐标系之间的关系推导直接线性变换解法
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)用于标定相机的更多相关文章
- 相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)
相机标定 一.相机标定的目的 确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数. 二.通用摄像机模型 世界坐标系.摄像机坐标 ...
- OpenCV相机标定和姿态更新
原帖地址: http://blog.csdn.net/aptx704610875/article/details/48914043 http://blog.csdn.net/aptx704610875 ...
- 【双目备课】《学习OpenCV第18章》相机模型与标定整编
一.相机模型 针孔模型.在这个简单模型中,想象光线是从场景或一个很远的物体发射过来的,但只有一条光线从该场景中的任意特定点进入针孔. 我们将这个图像进行抽象,就能够得到这样的结果: 其中,f为像到针孔 ...
- SLAM入门之视觉里程计(6):相机标定 张正友经典标定法详解
想要从二维图像中获取到场景的三维信息,相机的内参数是必须的,在SLAM中,相机通常是提前标定好的.张正友于1998年在论文:"A Flexible New Technique fro Cam ...
- 相机标定:PNP基于单应面解决多点透视问题
利用二维视野内的图像,求出三维图像在场景中的位姿,这是一个三维透视投影的反向求解问题.常用方法是PNP方法,需要已知三维点集的原始模型. 本文做了大量修改,如有不适,请移步原文: ...
- Camera Calibration 相机标定:Opencv应用方法
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/49427383 Opencv中Camer ...
- 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图)
使用Opencv实现张正友法相机标定之前,有几个问题事先要确认一下,那就是相机为什么需要标定,标定需要的输入和输出分别是哪些? 相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的 ...
- Autoware 进行 Robosense-16 线雷达与 ZED 双目相机联合标定!
项目要标定雷达和相机,这里记录下我标定过程,用的速腾 Robosense - 16 线雷达和 ZED 双目相机. 一.编译安装 Autoware-1.10.0 我没有安装最新版本的 Autoware, ...
- Camera Calibration 相机标定
Camera Calibration 相机标定 一.相机标定方法 在opencv中提供了一组函数用于实现相机的标定,标定返回的值包括:相机内参矩阵(fx fy xc yc).相机外参矩阵(R t)以及 ...
随机推荐
- SystemTap 内核调试
一.简介 Systemtap是一个Linux下的全新的调式.诊断和性能测量工具,是我目前所知的最强大的内核调试工具. 参考: http://m.blog.csdn.net/blog/hnllei/75 ...
- C语言时间处理
一.简介 时间处理在编程中经常遇到,包括程序的运行时间和显示时间等.在标准C中, 日期和时间的处理包含在 time.h 的头文件中,需要使用日期和时间相关的类型的函数的话, 需要导入time.h. 二 ...
- IE6789浏览器使用console.log类似的方法输出调试内容但又不影响页面正常运行
问题来源:外网IE下,触发js报错.经检测,未清除console造成.清除console后,解决. 问题原因:console.log 原先是 Firefox 的“专利”,严格说是安装了 Firebug ...
- [Selenium] 针对下拉菜单出现之后又立马消失的问题,通过Javascript改变元素的可见属性
public void clickDateDropDownButton() { SeleniumUtil.jsClick(driver, page.getDateDropdownButtonOfInv ...
- JVM 垃圾回收- 转载 知识碎片
最近关注了一下垃圾回收的问题,想了解一下JVM 关于方法区的垃圾回收机制,找了几篇文章,不同的文章从不同角度讲述了一下,嗯... 拼凑起来 记录一下, 有些未验证正确性... JVM 方法区 当JVM ...
- ViewController的属性
[ViewController的属性] 1.navigationItem,只读,只第一次引用的时候被创建. The first time the property is accessed, the U ...
- Java动态代理(三)——模拟AOP实现
以下案例模拟AOP实现 目录结构 接口PersonService package com.ljq.service; public interface PersonService { public vo ...
- Android-HttpUtil工具类
Http(Java 版 HttpURLConnection)请求的相关工具类 public class HttpUtil { private static final int TIMEOUT_IN_M ...
- MSP430 G2553 LaunchPad GPIO中断
P1.P2端口上的每个管脚都支持外部中断.P1端口的所有管脚都对应同一个中断向量(Interrupt Vector),类似的,P2端口的所有管脚都对应另一个中断向量:通过PxIFG寄存器来判断中断来源 ...
- CHARPTER 3--INDEX DMVs
1.查找最重要的缺失的索引 --======================================================= --查找最重要的缺失的索引 ) DB_NAME() AS ...