从普通相机模型到鱼眼畸变模型--标定与去畸变

2024-06-18 14:58

本文主要是介绍从普通相机模型到鱼眼畸变模型--标定与去畸变,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 普通相机模型
    • 普通成像模型
      • 针孔模型与透镜组:
      • 径向畸变
      • 切向畸变
      • 现代手机摄像头的基本组成
      • 内参矩阵
    • 畸变模型
    • 张氏标定法
  • 鱼眼模型
    • 透镜组
    • r和f的进一步说明
    • 等距投影模型(OpenCV::fisheye)
    • 鱼眼图像去畸变过程

普通相机模型

普通成像模型

普通相机模型一般通过pin-hole model+径向畸变+切向畸变进行建。

针孔模型与透镜组:

针孔模型即小孔成像模型,近代的摄影术和现代照相机技术即起源于此。早在2400多年前左右的墨子和亚里士多德就发现了小孔成像原理,见图1,中世纪的画家们开始把这种小孔成像的原理应用在了绘画当中见图2。
在这里插入图片描述
图2

但是真实的针孔如果设计的过大,会导致成像重影,过小的话不能为快速曝光收集足够的光线。因此人们在小孔成像的基础上对照相暗盒进行改进,在暗盒上加装了固定焦距的镜头来收集更多的光线,这其实也是现代摄像机的雏形,在人们未发现如何将影像固定在底片的技术之前,画师们使用这种设备进行辅助绘画,如图3所示。
图 2 左:暗盒设备;右:暗盒内的景象
图3
理论上说是可能定义一种透镜而不引入任何畸变的,然而在制作工艺上,制作一个“球形”透镜比制作一个数学上理想的透镜更容易,所以实际中透镜的引入其代价就是带来图像的畸变。主要分为两类:

径向畸变

径向畸变主要来源于透镜的形状,沿着透镜半径方向产生畸变,原因是光线在远离透镜中心的地方比靠近中心的地方更加弯曲,主要包括桶形畸变和枕形畸变两种。

切向畸变

来自于整个摄像机的组装过程,主要由于透镜本身与感光芯片平面不平行而产生的。

现代手机摄像头的基本组成

该部分主要结合现代手机摄像头的基本原理进一步说明透镜组和焦距等概念。
在这里插入图片描述
(1) 镜座:支撑整个镜头模组
(2) 透镜组:凸透镜+凹透镜组成的复杂系统,作用是先汇聚光线,再发散光线,使得光线均匀分布在感光芯片上;另外凸透镜和凹透镜的距离确定了透镜组的焦距:
a) 短焦镜头:广角镜头,看到的范围更广;
b) 长焦镜头:望远镜头,看到的范围更窄,更远。
(3) 光圈:控制进光量,F值=焦距/光圈开口直径,如f=50mm,d=30mm,则光圈表示为F1.8或F/1.8,光圈越大对暗处图像的捕捉能力越强,同时光圈越大,物体景深效果越近。
(4) 对焦马达:当物体在远景和近景的时候,控制镜头组与感光芯片的距离,保持感光芯片上始终可以获得清晰的成像效果。

内参矩阵

不考虑畸变情况下点投影过程:其中相机物理坐标系到成像平面(感光芯片)为透视投影,成像平面到像素坐标系为一个仿射变换(考虑到感光版的横纵向不完全正交的影响;如果确定为90度时,退化为刚体变换;放射变换和刚体变换的区别在于R部分是否为正交矩阵,若是正交矩阵则为刚体变换,若是一般旋转矩阵则表示一般线性变换,线性变换+平移=放射变换)。
在这里插入图片描述
其中,f为焦距,单位为m;dX,dY分别为在X、Y方向上的一个像素在相机感光版上的物理长度(即一个像素在感光版上是多少毫米),因此f/dX,f/dY单位为像素,这也是OpenCV库标定函数的内参输出结果;dX,dY,f均不能在标定过程中直接测量(可以查阅camera设计手册得到设计值),只有组合量f/dX,f/dY可被直接标定出来[OpenCV白皮书]。θ角度表示感光板的横边和纵边之间的角度(90度表示无误差)。
OpenCV中内参矩阵中f/dX,f/dY作为整体被标定出来,那么OpenCV中标定得到的内参矩阵的本质特征是什么呢。对公式4-1中内参数矩阵变形,有:
在这里插入图片描述

(u,v)为像素坐标,(Xc/Zc, Yc/Zc)是将相机坐标系下的坐标进行归一化,即将3D空间中的点投影到Zc=1的2D平面上,同时也等价于f=1时的感光平面上的坐标,从另一个角度看,内参矩阵也反映了图像像素平面和成像归一化平面之间的单应性关系,该原理在普通摄像头和鱼眼摄像头去畸变的过程中会经常出现。

畸变模型

径向畸变模型
在这里插入图片描述
切向畸变模型
在这里插入图片描述
其中 (x,y)是理想的无畸变的归一化图像坐标(zc=1时对应的像平面);+hat 为畸变后的归一化图像坐标;r为图像成像点到像平面中心点的距离: r2=x2+y^2,xy分别为像平面下的坐标。二者效果如图所示。
在这里插入图片描述
在这里插入图片描述
影响较大的为径向畸变,张正友标定法仅仅考虑了该畸变。对于该畸变,光学中心畸变为0,随着向边缘移动,畸变越来越严重,可以用r=0附近泰勒级数展开的前几项定量描述(即在r=0附近使用多项式表示x与x hat比例这个复杂函数),因为函数必须是关于r径向对称,所以只使用泰勒展开的偶次幂项。原因如下图所示。
在这里插入图片描述图 x=1时,横轴为r,纵轴为x_hat。在这里插入图片描述
随着向图像边缘移动,x_hat同x偏离越来越大
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

张氏标定法

张正友标定法,相比较于使用昂贵设备(如两个或者三个正交平面)的经典技术相比,供了一种相对较为灵活方面的相机校准方法。只需要使用平面标靶物即可完成相机内参标定、畸变系数标定、标靶物与相机坐标系的外参估计三个任务。
张正友标定法主要应用在普通相机(FOV<120度,相比较鱼眼镜头无明显畸变)标定。基本思想是:首先假设畸变不存在,进行内参矩阵和外参矩阵求解;然后假设内参矩阵和外参矩阵无误差,根据点的投影结果和实际检测结果建立约束关系求解畸变参数,至此求解到内参数、畸变和外参数的closed-form solution;最后根据内参、畸变、外参的初始值,建立重投影误差优化目标,使用L-M方法迭代优化。
未完待续。。

鱼眼模型

基于针孔相机模型的镜头存在一个缺陷,光线始终沿直线传播使得镜头难以捕捉位于边缘的物体。如图4.2-1左边所示,对于同样长度的红色箭头,越靠近边缘的经过镜头成像后就变得越长,而实际上我们底片的尺寸是有限的,所以极端接近边缘的物体普通的镜头就无法成像记录了。然而当人们在水中向上看时,能一眼看到整个水面上的半球形空间,整个空间的影像都背扭曲、压缩到了一个半顶角约为48°的锥形内(由光线空气-水中的折射角度确定),如图4.2-2所示。在这个锥形空间内部,是来自水面上的空间的光线,在这个锥形外部,是来自水面下景色的反射。也就是说,在水中向上看时,一个圈之外,只能看到水底的景色;所有水面上的景色,都被压缩在一个圈内。鱼眼镜头也是人们根据这种特性发明的,鱼眼镜头的前镜片直径很短,且呈抛物状向前部凸出,与鱼的眼睛十分相似。因此鱼眼镜头的名称不应当理解为鱼眼看到的世界景象,而是因为外形和鱼眼相似而得名,同时鱼眼图片和人眼在水里仰视天空看到的景象比较一致,网上用一些“鱼在水中观察水面事物”的图片来说明鱼眼成像,笔者认为是不准确的。
在这里插入图片描述
在这里插入图片描述
在水里仰视看到的景象

透镜组

鱼眼镜头一般是由十几个不同的透镜组合而成的,在成像的过程中,入射光线经过不同程度的折射,投影到尺寸有限的成像平面上,使得鱼眼镜头与普通镜头相比起来拥有了更大的视野范围。
在这里插入图片描述
为了将尽可能大的场景投影到有限的图像平面内,鱼眼相机会按照一定的投影函数来设计。根据投影函数的不同,鱼眼相机的设计模型大致能被分为五种:透视投影(即针孔相机模型)、等积投影、等距投影、体视投影、正交投影[参考论文]。图4.2-4左图为各种投影模型的像点r同入射角度的关系,右图为等距投影示意图。
在这里插入图片描述
在这里插入图片描述左:对于(1)透视投影,当入射角接近90度时,像点r的值接近于+∞;2345的投影方式可保证r在一定范围内,在感光芯片制作上也是合理的

右图描述了鱼眼镜头成像和小孔成像的区别。O1XcYcZc为相机坐标系,O2-xy为像平面坐标系。对于现实中的一点P,入射角度为θ,如果按照针孔模型,则成像点为p^’,但是对于鱼眼相机,入射光线PO1经过镜头后会发生折射,因此P的成像点为p。

r和f的进一步说明

图2-4中的图取自论文,是一种通用描述,r和f的含义取决于所分析的投影平面是哪个,按照前述内参矩阵的说明,当投影平面为f=1时的归一化平面时,内参矩阵可直接建立图片像素和投影平面坐标的关系,因此,下文分析中,均设f=1,这与内参矩阵的含义是自洽的。
鱼眼相机标定中使用较多的是等距投影模型(OpenCV中使用的也是),下面以等距投影模型为例分析投影及去畸变过程。

等距投影模型(OpenCV::fisheye)

等距投影模型和去畸变算法过程,参考了很多博客发现很多都是错误的,没有讲清楚θ_d和θ角度的关系,成像平面和像素平面的关系以及推导过程中焦距f如何处理,最终笔者参考论文[][]和OpenCV去畸变的源码,整理如下。

在这里插入图片描述

在这里插入图片描述

鱼眼图像去畸变过程

去畸变过程为已知畸变图的像素坐标,反求无畸变(假设透视投影)情况下的物体点像素坐标, 基本思想为根据畸变像素点归一化平面成像点rdθ_dθra,b至此得到了无畸变情况下归一化平面像点坐标,根据内参矩阵的单应性关系映射至像素平面即完成去畸变图像的求解。
去畸变核心为已知θ_d求θ,是一个一元高次方程求解问题,常用二分法、不动点迭代、牛顿迭代法,本文不再详细介绍。图中蓝色部分为去畸变过程。源码参考OpenCV xx.cpp
在这里插入图片描述

这篇关于从普通相机模型到鱼眼畸变模型--标定与去畸变的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072314

相关文章

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达

智能客服到个人助理,国内AI大模型如何改变我们的生活?

引言 随着人工智能(AI)技术的高速发展,AI大模型越来越多地出现在我们的日常生活和工作中。国内的AI大模型在过去几年里取得了显著的进展,不少独创的技术点和实际应用令人瞩目。 那么,国内的AI大模型有哪些独创的技术点?它们在实际应用中又有哪些出色表现呢?此外,普通人又该如何利用这些大模型提升工作和生活的质量和效率呢?本文将为你一一解析。 一、国内AI大模型的独创技术点 多模态学习 多

OpenCompass:大模型测评工具

大模型相关目录 大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步,扬帆起航。 大模型应用向开发路径:AI代理工作流大模型应用开发实用开源项目汇总大模型问答项目问答性能评估方法大模型数据侧总结大模型token等基本概念及参数和内存的关系大模型应用开发-华为大模型生态规划从零开始的LLaMA-Factor

模型压缩综述

https://www.cnblogs.com/shixiangwan/p/9015010.html

AI赋能天气:微软研究院发布首个大规模大气基础模型Aurora

编者按:气候变化日益加剧,高温、洪水、干旱,频率和强度不断增加的全球极端天气给整个人类社会都带来了难以估计的影响。这给现有的天气预测模型提出了更高的要求——这些模型要更准确地预测极端天气变化,为政府、企业和公众提供更可靠的信息,以便做出及时的准备和响应。为了应对这一挑战,微软研究院开发了首个大规模大气基础模型 Aurora,其超高的预测准确率、效率及计算速度,实现了目前最先进天气预测系统性能的显著

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

关于文章“python+百度语音识别+星火大模型+讯飞语音合成的语音助手”报错的修改

前言 关于我的文章:python+百度语音识别+星火大模型+讯飞语音合成的语音助手,运行不起来的问题 文章地址: https://blog.csdn.net/Phillip_xian/article/details/138195725?spm=1001.2014.3001.5501 1.报错问题 如果运行中报错,且报错位置在Xufi_Voice.py文件中的pcm_2_wav,如下图所示