针孔相机模型,鱼眼相机模型,单目标定
单目相机
一、单目相机模型:
1.相机模型:
1.1统一模型:
无论是针孔相机还是鱼眼相机,其实可以归类成一个相机模型(畸变方式有差别而已),模型如下:
- 首先,看坐标轴,该模型以光心为相机坐标系原点,Z轴就是日常生活中的相机朝向,X和Y轴为垂直相机朝向的平面;
- 其次,看坐标点,PPP 为在相机坐标系下的三维空间中的一点,坐标是(X,Y,Z)(X,Y,Z)(X,Y,Z) ;其余四个坐标点的意思为(可以先不用理解这四个坐标点,后续会解释):
P′(XZ,YZ,1)P^{'}(\frac{X}{Z},\frac{Y}{Z},1)P′(ZX,ZY,1) :PPP 投影在归一化平面上的点,坐标有三角形相似推出;
P′′(XZf,YZf,f)P^{''}(\frac{X}{Z}f,\frac{Y}{Z}f,f)P′′(ZXf,ZYf,f) :PPP 投影在成像平面上的点,坐标有三角形相似推出;
Pd′P_d^{'}Pd′ : P′P^{'}P′ 在镜头畸变后的点,d是distortion的缩写;
Pd′′P_d^{''}Pd′′ : P′′P^{''}P′′ 在镜头畸变后的
- 最后,看三个平面,归一化平面是相机坐标系下Z=1时的平面,成像平面是Z=f时的成像平面,像素平面是和成像平面重叠的有范围限制的被像素离散了的平面。
需要说明的是,真实相机在物理上,相机成像平面和像素平面本来是再光心后的,但为了便于分析,通常将两个平面对称到图上位置,相机通常会在数字图像处理时会在X和Y轴方向对称处理下,因而下图这样的模型和现实坐标结果一致。
1.2坐标映射流程:
- 3D世界中的某点PPP 的光通过镜头进入相机,理想情况下,会直线传播依次到达P′P^{'}P′ 和 P′′P^{''}P′′ ;
- 成像平面上点P′′P^{''}P′′ 经传感器采样,转换到左上角为像素坐标原点的图像坐标系中得到uv坐标;
以上过程为理想过程,也就是最简单的针孔相机模型(下式中间矩阵就是内参矩阵KKK):
[uv1]=1Z[fx0Cx0fyCy001][XYZ]\begin{bmatrix} u\\ v\\1\end{bmatrix}=\frac{1}{Z}\begin{bmatrix} f_x & 0 & C_x\\ 0 & f_y & C_y\\ 0 & 0 &1\end{bmatrix} \begin{bmatrix} X\\ Y\\Z\end{bmatrix}⎣⎡uv1⎦⎤=Z1⎣⎡fx000fy0CxCy1⎦⎤⎣⎡XYZ⎦⎤
然而现实是,PPP到P′P^{'}P′时(也即光从镜头进入相机归一化平面时)会有镜头引起的畸变(具体畸变类型下面有讲),从而导致从P′P^{'}P′变成了Pd′P^{'}_dPd′,Pd′P^{'}_dPd′会继续按照之前的映射变成Pd′′P^{''}_dPd′′,因而可以看出如何计算出从P′P^{'}P′到Pd′P^{'}_dPd′最重要,这个过程就是畸变模型。
2.畸变模型:
2.1畸变模型概念:
畸变模型是相机模型中的一个子问题,请注意区分。
畸变模型分为两类,径向畸变和切向畸变:
径向畸变是,距离光心距离不同的点的畸变程度不一样
切向畸变,成像平面与小孔平面不平行引起侧倾
桶形失真就是距离图像中心越远,原来的光点就被拉向中心越多,枕形失真相反;
2.2常用的畸变模型:
- 针孔相机畸变模型:
- 鱼眼相机畸变模型:
这里的(xn,yn)(x_n,y_n)(xn,yn)就是P′P^{'}P′的前两项,(xd,yd)(x_d,y_d)(xd,yd)就是P′′P^{''}P′′的前两项,在归一化平面上Z坐标都为1;
2.3去畸变方法:
畸变参数和相机内参都可以通过标定求得,得到畸变参数后,如何进行去畸变呢?
答:根据要求取的像素平面位置uvuvuv,计算对应无畸变的归一化平面图像坐标P′P^{'}P′,找到这个坐标在畸变模型下的位置Pd′P^{'}_dPd′,进而找到相机模型下转移到当前畸变像素的位置Pd′′P^{''}_dPd′′和uvduv_duvd,然后取出来放到真实像素平面(找到uvduv_duvd可能不是整数,会用到双线性插值)
3.相机使用
在实际相机使用过程中,我们最大的需求是:建立像素坐标uvuvuv和真实3D坐标PPP的对应关系。
一般真实坐标并不是以相机坐标系为坐标系,而是在其他坐标系(如下图的世界坐标系,也可是其他传感器,如IMU等)下的坐标
RcwR_{cw}Rcw
- 坐标转换(原理详见视觉SLAM十四讲前几章节):
Xc=[RcwTcw][Xw1]X_c=\begin{bmatrix}R_{cw} & T_{cw}\end{bmatrix}\begin{bmatrix}X_w\\ 1\end{bmatrix}Xc=[RcwTcw][Xw1]
- 归一化处理:
P′=[Xc(0)Xc(2)Xc(1)Xc(2)1]=[xnyn1]P^{'}=\begin{bmatrix}\frac{X_c(0)}{X_c(2)}\\ \frac{X_c(1)}{X_c(2)}\\ 1\end{bmatrix} = \begin{bmatrix}x_n \\ y_n\\ 1\end{bmatrix}P′=⎣⎢⎡Xc(2)Xc(0)Xc(2)Xc(1)1⎦⎥⎤=⎣⎡xnyn1⎦⎤
- 畸变处理:根据上述畸变模型计算
Pd′=[xdyd1]P^{'}_d=\begin{bmatrix}x_d \\ y_d\\ 1\end{bmatrix}Pd′=⎣⎡xdyd1⎦⎤
内参转换:
(uv1)=(fx0Cx0fyCy001)[xdyd1]\begin{pmatrix}u\\ v\\ 1\end{pmatrix}=\begin{pmatrix}f_x & 0 & C_x\\ 0& f_y & C_y\\ 0&0 &1 \end{pmatrix}\begin{bmatrix}x_d \\ y_d\\ 1\end{bmatrix}⎝⎛uv1⎠⎞=⎝⎛fx000fy0CxCy1⎠⎞⎣⎡xdyd1⎦⎤
二、单目相机标定:
1.标定思路:
- 在不同位置对标定板进行拍照,一个标定板上最少有四个角点;
- 单个标定板图片能计算内参矩阵和外参矩阵的乘积,因而能计算多个乘积;
- 单个标定板图片使用的内参矩阵相同,因而可以结合多个乘积求解内参接矩阵;
- 再求解每个标定板图片对应的外参矩阵;
- 最后求解五个畸变参数;
注:标定时标定板应该尽量在图片四周,才能尽可能估计出准确的畸变参数。
2.标定原理推导:
相机标定之张正友标定法数学原理详解(含python源码)
图像处理–相机标定(Camera calibration)_fengye2two的专栏-CSDN博客_图像标定
3.标定具体实现:
摄像头标定 Python + OpenCV
图像矫正去畸变_雾里_看花的博客-CSDN博客
[图像]图像缩放算法-双线性内插法_祥的专栏-CSDN博客
参考文献:
Camera Calibration Theory - Calcam documentation
鱼眼相机成像模型_sylvester的博客-CSDN博客_鱼眼相机模型
针孔相机模型,鱼眼相机模型,单目标定相关推荐
- 针孔相机、鱼眼相机模型推导
针孔相机.鱼眼相机模型 一.针孔相机模型 空间的三维物体要成像到相机的 CMOS/CCD 上面,形成了图像.图像上的每个点对应空间上的一个点. 将世界坐标系上的一点 (x,y,z)映射到CMOS/CC ...
- OpenCV中的鱼眼相机模型详解
针孔相机.鱼眼相机模型推导: 一.针孔相机模型 空间的三维物体要成像到相机的 CMOS/CCD 上面,形成了图像.图像上的每个点对应空间上的一个点. 将世界坐标系上的一点 (x,y,z)映射到CMOS ...
- OpenCV——将针孔相机模型图片转换成鱼眼相机模型图片
一 理论基础 关于针孔相机模型,参考博客: 关于鱼眼相机模型,参考参考文献[1][2]. 这里只需要知道我们这里使用的鱼眼相机模型是等距投影的鱼眼相机模型,即r=fθ(1),而针孔相机模型是透视投影, ...
- 一文尽览 | 计算机视觉中的鱼眼相机模型及环视感知任务汇总!
点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[ECCV2022]获取ECCV2022所有自动驾驶方向论文! 论文 ...
- 从像素坐标到相机坐标_鱼眼相机模型EUCM(一)
前言 相较于普通的针孔相机,鱼眼相机的能够观测到的范围更广,在一定程度上其实是可以增强视觉的鲁棒性的.针对于鱼眼相机的模型其实有挺多的,也有论文对这些模型进行了评测,但对于本人来说,最熟知的还是针孔模 ...
- 【鱼眼相机模型】鱼眼相机投影模型理解
一.从普通镜头到鱼眼镜头 如图1所示,普通镜头下的光线依据针孔相机模型进行成像(该部分可参考相机投影关系).但该模型存在一个缺陷:相机视野范围越大,所需的成像平面也越大,当相机视野范围要求在180°时 ...
- 视觉SLAM之鱼眼相机模型
最近研究了视觉SLAM中不同的鱼眼相机模型,其中包括: Scaramuzza的鱼眼相机模型 代表性的SLAM工作为MultiCo-SLAM,是一个以ORB-SLAM为基础的扩展的多鱼眼相机视觉SLAM ...
- Opencv中普通相机模型与鱼眼相机模型的区别
普通相机模型 无畸变时相机模型的状态: 有畸变时的状态: 简单来讲就是获得地图点在归一化相机平面上的坐标[x',y']之后,进行加畸变操作,k1,k2,k3,k4,k5,k6都是径向畸变参数, 而p1 ...
- KannalaBrandt8鱼眼相机模型
1. 鱼眼相机 鱼眼相机镜头是由十几个不同的透镜组合而成,在成像的过程中,入射光线经过不同程度的折射,投影到尺寸有限的成像平面上,使得鱼眼镜头拥有更大的视野范围.下图为鱼眼相机的组成结构: 与针孔相机 ...
- 项目实战——基于计算机视觉的物体位姿定位及机械臂抓取(单目标定)
项目实战--基于计算机视觉的物体位姿定位及机械臂抓取(单目标定) 请各位读者朋友注意,这里面很多东西涉及到我的毕设,写作辛苦,请勿滥用,转载请务必注明出处! 单目标定主要分为两个部分, ...
最新文章
- 人人都能看懂的 6 种限流实现方案!(纯干货)
- Android实现仿QQ登录界面背景动画效果
- swift_021(Swift 的方法)
- spring注解@Component、@Repository、@Service、@Controller
- Linux-压缩成带有时间文件名的文件
- 三探·模块拼装思想(静态链接)
- 再见,Navicat!这个Pycharm的兄弟真香!
- 《WinForm开发系列之控件篇》Item1 BackgroungWorker
- 在微信小程序中使用“随机键盘”
- java 提交的内存_Java使用内存映射实现大文件的上传
- 详解经典GPS辅助惯性导航论文 A GPS-aided Inertial Navigation System in Direct Configuration
- 程序员简历工作模式_简历的完整形式是什么?
- 腐蚀和膨胀(erode and dilate)
- Kubernetes 1.13 版本发布:Kubeadm简化群集管理、容器存储接口(CSI)和CoreDNS作为默认DNS现已普遍可用
- Qt在Mac系统下添加alias到IncludePath中
- 大数据-如何在Docker上使用Hadoop
- php排列组合1004无标题,PHP的排列组合有关问题
- dataframe scala 修改值_Spark DataFrame:提取某列并修改/ Column更新、替换
- IT从业者创业公司生存指南:创业后记 ---- 百感交集的过来人
- ajaxFileUpload上传文件