相机模型及张正友标定法
针孔相机模型
针孔相机模型是实际研究中最常用的模型。针孔是一个中间有一个小孔的假想墙壁,光只能从小孔通过。
fff是摄像机焦距,ZZZ是摄像机到物体的距离,XXX是物体长度,是图像平面上的物体长度。由相似三角形可得:
−x=fXZ-x = f\frac{X}{Z} −x=fZX
可将上图等价转换为如下所示系统,图像平面防止在针孔前方的摄像机模型(数学上等价,形式更简单)。
经过转换得到
xp=fxczcyp=fyczc⟺zc[xpyp1]=[f000f0001][xcyczc]\begin{aligned} x_p = f\frac{x_c}{z_c}\\ y_p = f\frac{y_c}{z_c} \end{aligned}\iff z_c\begin{bmatrix} x_p\\ y_p\\ 1 \end{bmatrix}= \begin{bmatrix} f&0&0\\ 0&f&0\\ 0&0&1 \end{bmatrix} \begin{bmatrix} x_c\\y_c\\z_c \end{bmatrix} xp=fzcxcyp=fzcyc⟺zc⎣⎡xpyp1⎦⎤=⎣⎡f000f0001⎦⎤⎣⎡xcyczc⎦⎤
物体投影到成像平面之后由采样器件采样后转换为数字信号,成为像素图像。dx,dydx,dydx,dy分别为一个像素占据的成像平面的物理尺寸(x方向,y方向)。
由于像素坐标系的原点和图像坐标系的原点不同,建模时需要加上两者原点的偏移和cxc_xcx和cyc_ycy,像素坐标系两个轴的夹角θ\thetaθ。
u=xpdx+cx−ypcotθdxv=ypdysinθ+cy⟺[uv1]=[1dx−cotθdxcx01dysinθcy001][xpyp1]\begin{aligned} u &= \frac{x_p}{dx}+c_x-\frac{y_p\cot\theta}{dx} \\ v &= \frac{y_p}{dy\sin\theta}+c_y \end{aligned}\iff \begin{bmatrix} u\\v\\1 \end{bmatrix}= \begin{bmatrix} \frac{1}{dx}&-\frac{\cot\theta}{dx}&c_x\\ 0&\frac{1}{dy\sin\theta}&c_y\\ 0&0&1 \end{bmatrix} \begin{bmatrix} x_p\\y_p\\1 \end{bmatrix} uv=dxxp+cx−dxypcotθ=dysinθyp+cy⟺⎣⎡uv1⎦⎤=⎣⎡dx100−dxcotθdysinθ10cxcy1⎦⎤⎣⎡xpyp1⎦⎤
于是
[uv1]=1zc[1dx−cotθdxcx01dysinθcy001][f000f0001][xcyczc]=[fdx−fcotθdxcx0fdysinθcy001][xczcyczc1]\begin{aligned} \begin{bmatrix} u\\v\\1 \end{bmatrix}&=\dfrac{1}{z_c}\begin{bmatrix} \frac{1}{dx}&-\frac{\cot\theta}{dx}&c_x\\ 0&\frac{1}{dy\sin\theta}&c_y\\ 0&0&1 \end{bmatrix} \begin{bmatrix} f&0&0\\ 0&f&0\\ 0&0&1 \end{bmatrix} \begin{bmatrix} x_c\\y_c\\z_c \end{bmatrix}\\ &= \begin{bmatrix} \frac{f}{dx}&-\frac{f\cot\theta}{dx}&c_x\\ 0&\frac{f}{d_y\sin\theta}&c_y\\ 0&0&1 \end{bmatrix} \begin{bmatrix} \frac{x_c}{z_c}\\ \frac{y_c}{z_c}\\ 1 \end{bmatrix} \end{aligned} ⎣⎡uv1⎦⎤=zc1⎣⎡dx100−dxcotθdysinθ10cxcy1⎦⎤⎣⎡f000f0001⎦⎤⎣⎡xcyczc⎦⎤=⎣⎡dxf00−dxfcotθdysinθf0cxcy1⎦⎤⎣⎡zcxczcyc1⎦⎤
畸变模型
为了获得好的成像效果,通常在相机的前方加上透镜。透镜的引入会对成像过程中光线的传播产生新的影响:一是透镜自身的形状会对光线的传播产生影响,二是在机械组装过程中,透镜和成像平面不完全平行,这也会֯得光线穿过透镜投影到成像面时的位置发生变化。
由透镜形状引起的畸变称为径向畸变 。在针孔模型中,一条直线投影到像素平面上还是一条直线。可是,实际拍摄的照片中,摄像机的透镜往往使得真实环境中的一条直线在图片中变成了曲线。越靠近图像的边缘,这种现象越明显。由于实际加工制作的透镜往往是中心对称的,这使得不规则的畸变通常径向对称。它们主要分为两大类:桶形畸变和枕形畸变,如下图所示。
桶形畸变图像放大率随着与光轴之间的距离增加而减小,而枕形畸变则恰好相反。在这两种畸变中,穿过图像中心和光轴有交点的直线还能保持形状不变。
除了透镜的形状会引入径向畸变,由于在相机的组装过程中不能使透镜和成像面严格平行,所以也会引入切向畸变。
通常选用较为规则的图形例如黑白棋盘格进行相机标定,标定效果较好。使用OpenCV中摄像机标定的相关函数定得出相机内参数cx,cy,fx,fyc_x, c_y, f_x, f_ycx,cy,fx,fy以及畸变校正系数k1,k2,k3k_1, k_2, k_3k1,k2,k3。
对于径向畸变,可以用一个多项式函数来描述畸变前后的坐标变化:这类畸变可以用与距中心的距离有关的二次及高次多项式函数进行校正。考虑归一化平面上任意一点p\bm{p}p,其坐标为[xˉ,yˉ]T[\bar{x},\bar{y}]^T[xˉ,yˉ]T,是未校正的点的坐标,也可以写成极坐标的形式[r,θ]T[r,\theta]^T[r,θ]T,其中rrr表示点与坐标原点之间的距离,θ\thetaθ表示与水平轴的夹角。
xˉdistorted=xˉ(1+k1r2+k2r4+k3r6)yˉdistorted=yˉ(1+k1r2+k2r4+k3r6)\bar{x}_{distorted} = \bar{x}(1 + k_1r^2 + k_2r^4 + k_3r^6) \\ \bar{y}_{distorted} = \bar{y}(1 + k_1r^2 + k_2r^4 + k_3r^6) xˉdistorted=xˉ(1+k1r2+k2r4+k3r6)yˉdistorted=yˉ(1+k1r2+k2r4+k3r6)
其中[xˉdistorted,yˉdistorted]T[\bar{x}_{distorted}, \bar{y}_{distorted}]^T[xˉdistorted,yˉdistorted]T是校正后的点的归一化坐标。上述校正模型中,对于畸变较小的图像中心区域,畸变校正主要是k1k_1k1起作用;对于畸变较大的边缘区域,主要是k2k_2k2起作用。对于切向畸变,可以使用另外的两个参数p1p_1p1,p2p_2p2来进行校正:
xˉdistorted=xˉ+2p1xˉyˉ+p2(r2+2xˉ2)yˉdistorted=yˉ+p1(r2+2yˉ2)+2p2xˉyˉ\bar{x}_{distorted} = \bar{x} + 2p_1\bar{x}\bar{y} + p_2(r^2 + 2\bar{x}^2) \\ \bar{y}_{distorted} = \bar{y} + p_1(r^2 + 2\bar{y}^2) + 2p_2\bar{x}\bar{y} xˉdistorted=xˉ+2p1xˉyˉ+p2(r2+2xˉ2)yˉdistorted=yˉ+p1(r2+2yˉ2)+2p2xˉyˉ
联合上式,对于相机坐标系中的一点P(xc,yc,zc)(x_c,y_c,z_c)(xc,yc,zc),能够通过5个畸变系数找到这个点在像素平面上的正确位置:
- 将三维空间点投影到归一化图像平面。设它的归一化坐标为[xˉ,yˉ]T[\bar{x},\bar{y}]^T[xˉ,yˉ]T。
- 对归一化平面上的点进行径向畸变和切向畸变校正。
{xˉdistorted=xˉ(1+k1r2+k2r4+k3r6)+2p1xˉyˉ+p2(r2+2xˉ2)yˉdistorted=yˉ(1+k1r2+k2r4+k3r6)+p1(r2+2yˉ2)+2p2xˉyˉ\begin{cases} \bar{x}_{distorted} = \bar{x}(1+k_1r^2+k_2r^4+k_3r^6)+2p_1\bar{x}\bar{y}+p_2(r^2+2\bar{x}^2)\\ \bar{y}_{distorted} = \bar{y}(1+k_1r^2+k_2r^4+k_3r^6)+p_1(r^2+2\bar{y}^2)+2p_2\bar{x}\bar{y} \end{cases} {xˉdistorted=xˉ(1+k1r2+k2r4+k3r6)+2p1xˉyˉ+p2(r2+2xˉ2)yˉdistorted=yˉ(1+k1r2+k2r4+k3r6)+p1(r2+2yˉ2)+2p2xˉyˉ - 将校正后的点通过内参数矩阵投影到像素平面,得到该点在图像上的正确位置。
{u=fxxˉdistorted+cxv=fyyˉdistorted+cy\begin{cases} u = f_x\bar{x}_{distorted}+c_x\\ v = f_y\bar{y}_{distorted}+c_y \end{cases} {u=fxxˉdistorted+cxv=fyyˉdistorted+cy
张正友标定法
张正友标定法利用棋盘格标定法,在得到一张标定板的图像之后,利用相应的图像检测算法得到每一个角点的像素坐标(u,v)。将世界坐标系固定于棋盘格上,则棋盘格上任一点的物理坐标W=0,由于标定板的世界坐标系是人为事先定义好的,标定板上每一个格子的大小是已知的,可以计算得到每一个角点在世界坐标系下的物理坐标(U,V,W=0)。
利用每一个角点的像素坐标(u,v)和每一个角点在世界坐标系下的物理坐标(U,V,W=0),来进行相机的标定,获得相机的内外参矩阵、畸变参数。
- 求解内参矩阵与外参矩阵的积
Z(uv1)=(fdX−fcotθdxu00fdYsinθv0001)(R1R2T)(UV1)=A(R1R2T)(UV1)Z\begin{pmatrix} u\\v\\1 \end{pmatrix}= \begin{pmatrix} \frac{f}{dX}&-\frac{f\cot\theta}{dx}&u_0\\ 0&\frac{f}{dY\sin\theta}&v_0\\ 0&0&1 \end{pmatrix}\\(R_1 R_2 T) \begin{pmatrix} U\\V\\1 \end{pmatrix}= A\begin{pmatrix} R_1 R_2 T \end{pmatrix} \begin{pmatrix} U\\V\\1 \end{pmatrix} Z⎝⎛uv1⎠⎞=⎝⎛dXf00−dxfcotθdYsinθf0u0v01⎠⎞(R1R2T)⎝⎛UV1⎠⎞=A(R1R2T)⎝⎛UV1⎠⎞
对于不同的图片,内参矩阵A为定值;对于同一张图片,内参矩阵A,外参矩阵(R1R2T)(R_1 R_2 T)(R1R2T)为定值;对于同一张图片上的单点,内参矩阵A,外参矩阵(R1R2T)(R_1 R_2 T)(R1R2T),尺度因子Z为定值。将A(R1R2T)A(R_1 R_2 T)A(R1R2T)记为矩阵H,H即为内参矩阵和外参矩阵的积,记矩阵H的三列为(H1H2H3)(H_1 H_2 H_3)(H1H2H3),则有
(uv1)=1ZH(UV1)=1Z[H11H12H13H21H22H32H31H32H33](UV1)\begin{pmatrix} u\\v\\1 \end{pmatrix}= \frac{1}{Z}H\begin{pmatrix} U\\V\\1 \end{pmatrix}= \frac{1}{Z} \begin{bmatrix} H_{11}H_{12}H_{13}\\H_{21}H_{22H_{32}}\\H_{31}H_{32}H_{33} \end{bmatrix} \begin{pmatrix} U\\V\\1 \end{pmatrix} ⎝⎛uv1⎠⎞=Z1H⎝⎛UV1⎠⎞=Z1⎣⎡H11H12H13H21H22H32H31H32H33⎦⎤⎝⎛UV1⎠⎞
利用上式,消除尺度因子Z,可得:
u=H11U+H12V+H13H31U+H32V+H33u=\frac{H_{11}U+H_{12}V+H_{13}}{H_{31}U+H_{32}V+H_{33}} u=H31U+H32V+H33H11U+H12V+H13
u=H21U+H22V+H23H31U+H32V+H33u=\frac{H_{21}U+H_{22}V+H_{23}}{H_{31}U+H_{32}V+H_{33}} u=H31U+H32V+H33H21U+H22V+H23
此处H是齐次矩阵,有8个独立未知元素。每一个标定板角点可以提供两个约束方程(u,U,V的对应关系,u,U,V的对应关系提供了两个约束方程),因此,当一张图片上的标定板角点数量等于4时,即可求得该图片对应的矩阵H。当一张图片上的标定板角点数量大于4时,利用最小二乘法回归最佳的矩阵H。 - 求解内参矩阵
已知矩阵H,接下来求解相机的内参矩阵A,利用约束条件线性求解内参矩阵A。
假设存在
B=A−TA−1B=A^{-T}A^{-1} B=A−TA−1
式中,B为对称矩阵,基于绝对二次曲面原理求出B以后,再对B矩阵求逆,并从中导出内参矩阵A,再由A和单应矩阵H计算外参R和t。 - 最大似然估计
采用最大似然准则优化上述参数。
张正友标定法
相机模型及张正友标定法相关推荐
- 【三维重建】相机标定:张正友标定法
系列文章目录 本系列开始于2022.12.25,开始记录三维重建项目课题研究时的学习笔记,其中主要分为以下几部分组成: 一.相机成像及坐标系之间的转换关系 二.相机标定:张正友标定法 三.特征检测与匹 ...
- 单目相机标定实现--张正友标定法
文章目录 一:相机坐标系,像素平面坐标系,世界坐标系,归一化坐标系介绍 1:概述 公式 二:实现 1:整体流程 4:求出每张图像的单应性矩阵并用LMA优化 5:求解理想无畸变情况下的摄像机的内参数和外 ...
- Python-OpenCV相机标定、张正友标定法
一.相机标定介绍: 相机标定是进行视觉测量和定位的基础工作之一,标定参数准确与否直接关系到整个系统的精度,为此根据自己项目中的经验及参考相关的商用视觉软件的做法将相机标定过程中标定图片的获取过程中需要 ...
- 计算机视觉——相机标定之张正友标定法
这里写目录标题 一.相机标定 1.相机标定原理 2.相机标定步骤 3.数据集其他注意事项 二.相机标定实验 1.数据集 2.代码实现 3.实验结果 4.代码解读 一.相机标定 1.相机标定原理 2.相 ...
- matlab圆形标记,toolbox_calib 改进过的张正友标定法,可以用于使用圆形标记点 板的相机 。 matlab 266万源代码下载- www.pudn.com...
文件名称: toolbox_calib下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 946 KB 上传时间: 2014-02-23 下载次数: 39 提 ...
- 张正友标定法:A Flexible New Technique for Camera Calibration
张正友标定法:A Flexible New Technique for Camera Calibration Abstract MOTIVATIONS BASIC EQUATIONS Notation ...
- 工业相机标定(张正友标定法)
目录 相机标定的概念 a. 相机标定的定义 b. 相机标定的目的 相机标定的过程 a. 标定板选择 b. 标定板摆放及拍摄 c. 标定板角点提取 张正友标定法 a. 反解相机矩阵 b.反解畸变系数 使 ...
- 针孔相机标定-基于张正友标定法
针孔相机标定 前段时间曾经做过一段时间的摄像头标定,这里对以前做的事情做一个总结.首先,介绍一下针孔相机的标定吧,主要还是代码解析和一些细节说明,为了让自己更好的理解相机标定.当时做摄像头标定是为了实 ...
- 基于亚像素的图像测量仪标定算法(满视场棋盘格,张正友标定法)
图像测量仪对测量的精度极高,能达到0.001毫米,所有的图像边缘分割和摄像头标定,都在亚像素级水平上进行.目前我们能做到1/100个像素的提取.图像测量仪的关键部分在于亚像素分割.亚像素分割算法各种各 ...
最新文章
- oracle转mysql数据库
- 100+经典Java面试题及答案解析
- 环形缓冲区实现类(Delphi)
- C#高级技师语法,你会吗?
- Java substring() 方法
- js 和java有关系吗,javascript和JAVA有什么关系
- usb3.0 linux无法识别,USB3.0接口不能识别U盘的解决方法
- CSS之两栏固定布局(一)
- 405 宝塔钩子_点击数据库管理,nginx提示出现405 Not Allowed错误,是怎么回事?
- 725 - Division
- 江苏开放计算机绘图作业1,江苏开放大学计算机绘图形考2
- 百度url提交入口 百度网站收录提交入口网址
- 初识OpenGL (-)纹理过滤(Texture Filtering)
- 拼一个自己的操作系统(SnailOS 0.03的实现)
- 微信小程序获取用户的openId
- 鸿蒙渊主线任务,《天下3》年度资料片蓄势待发,奇幻山河创意无限!
- 不同的音频格式如何相互转换?
- 智能家居项目开发: 设计模式(工厂模式)+ 线程池 + Socket (持续更新中)
- Linux环境下Nginx部署静态资源文件。
- CAN总线与RS485的比较