相机系列——从相机畸变到托勒密地图

news2024/11/23 1:32:39

by 木一

标签:#相机畸变 #畸变纠正 #鱼眼相机 #折射定律 #托勒密地图

引言

前文[1][2]我们介绍了针孔相机模型,以及针孔相机模型的相机标定过程,但针孔相机模型是对相机成像最简单的描述,实际的相机成像过程要远复杂很多。

首先相机成像原理虽然可以简化为小孔成像,但实际的相机并非针孔相机,按照小孔成像原理,小孔直径越小成像越清晰,事实上并非如此,因为光线还具有波动性,针孔越小,光的波动性就会越明显,衍射效应影响越大,导致成像变得模糊。另外小孔成像的亮度和成像范围也远远达不到相机成像要求。所以实际的相机采用的是凸透镜或镜头组来达到类似小孔成像的效果。

凸透镜成像 图源:https://zhuanlan.zhihu.com/p/469422543

相机畸变分类及成因

凸透镜出色的光线汇聚能力,能够将物体的像缩小到很小的范围,同时兼顾了成像的亮度和清晰度,这些特性使凸透镜非常适合作为相机镜头。而为了提高成像质量,相机镜头通常采用凹凸透镜组合实现成像。

透镜组合 图源:广东奥普特科技股份有限公司,奥普特,OPT,奥普特官网,广东奥普特科技

用凸透镜(透镜组)做镜头,尽管形式改了,但是成像投影的方式并没有变化,同样可以用针孔相机模型来进行描述。在针孔成像过程中,像与物保持着很多不变的性质,比如直线经过变换仍然是直线,圆锥曲线(比如椭圆)经过变换仍然是圆锥曲线,正因为这些不变的几何性质,使得照片与原场景存在着某种相似性,所以我们看照片才具备真实感。

而在实际应用中,相机的凸透镜成像会偏离相似性,也就是我们所说的产生了畸变,畸变一般是由于相机镜头的制造工艺、安装误差等原因造成的。通常相机畸变可以分类两类:径向畸变和切向畸变。

径向畸变

径向畸变是指是由镜头透镜物理性质或镜片组结构引起的成像画面向外膨胀或向内收缩的现象,简单来说就是直线经过成像后变成了曲线,这并不会影响像的清晰度,而只影响像与物的相似性,径向畸变分为桶形畸变和枕形畸变:

径向畸变1 图源:关于镜头畸变问题的总结_镜头畸变计算公式-CSDN博客

形成这种现象的主要原因是透镜在不同位置的放大倍率不同。如下图所示,将靠近镜头中心部分所成的像记作y1,远离镜头中心部分所成的像记作y2,当y1/h1 > y2/h2时,所成的像是从中心往外放大的,也就是桶形畸变。反之则是枕形畸变。

径向畸变2 图源:https://blog.csdn.net/qq_35247586/article/details/130047063

通常情况下,广角镜头容易产生桶形畸变,长焦镜头容易产生枕形畸变。

切向畸变

切向畸变是由于透镜本身与相机传感器平面(成像平面)或图像平面不平行而产生的,这种情况多是由于透镜被粘贴到镜头模组上的安装偏差导致。通常情况下只考虑径向畸变即可。

切向畸变 图源:镜头畸变的那些事 | 清新的日子

畸变纠正

相机镜头由于要兼顾不同应用场景,畸变不可避免,因此需要对产生了畸变的图像进行畸变纠正。前文我们介绍的针孔相机模型和相机标定方法是基于无畸变的成像过程的,所标定的相机内参也是假定相片不存在畸变。因此畸变纠正需要在相机标定之前完成。基于特定的畸变模型,求解畸变系数,对相片进行畸变纠正,产生无畸变相片,再基于无畸变相片进行相机标定。

畸变纠正 图源:透镜畸变及校正模型_径向畸变-CSDN博客

常用于描述相机畸变的有多项式模型和除法模型,目前比较常用的机器视觉库中基本上也都集成了畸变纠正算法,比如OpenCV中集成张正友标定法,且只考虑了畸变模型中影响较大的径向畸变,具体算法介绍也比较普遍了,不再赘述。具体可参考:https://www.cnblogs.com/Jack-Elvis/p/16078743.html

拓展:鱼眼相机

大多时候,我们并不希望镜头有畸变,但在一些特殊应用场景中,也需要牺牲物像的相似性,以获取其他方面的优势,比如为了获取更大的视角范围所设计的超广角相机、鱼眼相机等。

上文我们介绍了焦距和视角的关系,容易得知,焦距越短视角越大,但实际情况是普通超广角相机即便拥有很短的焦距,也很难覆盖180°的视角范围,因此人们又发明了鱼眼镜头。鱼眼镜头的灵感顾名思义是来自水下的鱼。如下图所示,由于水的折射率比空气大,从水下向上看时,水面上的空间会被压缩到一个半球形空间,而球形外部,则是是来自水面下景色的反射。这样所有水面上的景色便被压缩在一个圈内,这个圈也被叫做斯涅耳窗口。关于鱼眼镜头的介绍,这边文章中介绍的很全面,本文不再过多阐述:https://zhuanlan.zhihu.com/p/29273352。

空气-水界面处的光线折射与全反射 图源:https://zhuanlan.zhihu.com/p/29273352

斯涅耳窗口现象 图源:https://zhuanlan.zhihu.com/p/29273352

鱼眼相机 图源:百度百科

拓展:折射定律

前面提到一个有趣的现象:斯涅耳窗口,关于这个现象在查阅资料时又关联到另外一个知识点:斯涅尔定律,出于好奇检索了一下,发现这便是从小便学过的折射定律,并且折射定律的发现历程,也是经历了很多曲折:

最早的研究起源于公元二世纪,古希腊科学家托勒密做了一个关于光的折射实验。他在一个圆盘上装两把能绕盘心旋转的尺子,将圆盘的一半浸入水中。让光线由空气射入水中,就得到它在水中的折射光线,转动两把尺子,使它们分别与入射光线和折射光线重合。然后取出圆盘,按尺子的位置刻下人射角和折射角。尽管托勒密的实验方法是正确的,实验结果相当精确,与现代值几乎没有多大的差别。但是,由于他测量得不够精确,得出了一个错误的结论,他认为折射角与入射角成正比。托勒密因此错过了一次发现折射定律的机会。

之后伊朗学者伊本·沙尔在984年的专著《论点火镜子与透镜》里最先正确地描述折射定律。可惜的是其它学者并没有注意到他的研究结果。之后很多年,人们都是从托勒密的错误理论开始研究折射。

伊本·沙尔的手稿 图源:维基百科

之后,阿拉伯的科学家阿勒·哈增重复了托勒密的测量,证明入射角和折射角之比是常数的说法是错误的。

17世纪初,开普勒对光的折射现象进行了深入的研究,虽然没有找到正确的折射定律表达式,但通过这些实验发现了全反射,并把他的发现写进了《折射光学》一书。

正确的折射定律是两个人建立的——荷兰数学家威里布里德•斯涅耳和法国数学家笛卡儿

1621年,在开普勒的研究结果的启示下,斯涅耳做了进一步的实验,并发现了入射角与折射角的余割之比为一常数的规律。斯涅耳的这一折射定律是从实验中得到的,没有做任何的理论推导,虽然正确,但却从未正式公布过。

1637年,法国数学家笛卡儿进一步完善了斯涅耳光的折射定律,第一次给出了折射定律的现代表述形式,并在《屈光学》一书中论述了这个问题。

最后还有一个法国数学家费马,由于笛卡尔是从光的微粒观念中推导出折射定律的,这引起了费马的怀疑,费马没有根据光折射的实验现象对光作任何假设,只是利用光是以有限速度传播的这一十七世纪最伟大的发现,用数学方法给出了折射定律的证明。

再发散一下,把大家带跑偏的托勒密,也是将地心说理论体系构建完善的那个人,托勒密通过整理之前六百年的天文学文献,加上自己长期观测的结果,建立了完整的地心体系理论,基本上圆满地解释了当时人们所能观察到的所有天文学现象。甚至在他死后的整整15个世纪中,天文学的教科书都在教授他的理论。

托勒密体系的宇宙图 图源:维基百科

此外,托勒密所著《地理学指南》对地图学的发展做出了巨大的贡献,影响贯穿至今。他综合前人的研究成果,提出在地图上绘制经纬线网的概念,为此,托勒密测量了地中海一带重要城市和据点的经纬度,还提出了投影问题,给出了圆锥投影和球面投影两种方法。《地理学指南》第8卷由几十幅地图组成。他用普通圆锥投影,也就是把经纬线绘成简单的扇形,绘制了世界地图,即著名的“托勒密地图”。

托勒密世界地图图源:影响世界制图史的九张地图

怎么就聊到了地图呢?因为小编是一名GISer,也就是专业为“地图学与地理信息系统”,地图投影几乎是地图学第一节课便要学习的内容。所以这位托勒密也算祖师爷级别的人物了。并且前面提到的鱼眼相机,在成像过程也存在一个投影模型,当然此投影非彼投影,但总觉得,万事万物皆有联系,好了,再说就唯心了,有兴趣的同学可以挖掘看看。

这些故事现在看起来似乎觉得有趣,但是回过头来想想,如今我们以为的常识,其实是先驱们对真理不懈的探索追求才得到的。摘抄一句博客中的话“虽然托勒密的错误延续了一千三百余年,而这也是他的价值所在。科学发现的轨迹就是在错误和正确之间来回震荡的一条曲线;人们总是会犯错误,而这些错误,不过是正确的前奏罢了。”

参考:

https://zhuanlan.zhihu.com/p/29273352

https://zhuanlan.zhihu.com/p/469422543

https://www.cnblogs.com/Jack-Elvis/p/16078743.html

关于镜头畸变问题的总结_镜头畸变计算公式-CSDN博客

镜头畸变的那些事 | 清新的日子

广东奥普特科技股份有限公司,奥普特,OPT,奥普特官网,广东奥普特科技

小孔成像为何以及为什么与凸透镜成像原理相同 - 哔哩哔哩

十一、托勒密之错

https://zh.wikipedia.org/wiki/斯涅尔定律

折射定律的发现及证明过程 开源地理空间基金会中文分会 开放地理空间实验室

科学网—托勒密为什么没有归纳出折射定律? - 王国强的博文

New Page 1

中国科学院西安光学精密机械研究所-光学科普园地

https://www.youtube.com/watch?v=i__IGU1Zm64

荣耀舰队托勒密_上.html

影响世界制图史的九张地图

科学网—从裴秀和托勒密,话地图学的发展 - 高关中的博文


  关注Mapmost,持续更新GIS、三维美术、计算机技术干货

Mapmost是一套以三维地图和时空计算为特色的数字孪生底座平台,包含了空间数据管理工具(Studio)、应用开发工具(SDK)、应用创作工具(Alpha)。平台能力已覆盖城市时空数据的集成、多源数据资源的发布管理,以及数字孪生应用开发工具链,满足企业开发者用户快速搭建数字孪生场景的切实需求,助力实现行业领先。

欢迎进入官网体验使用:Mapmost——让人与机器联合创作成为新常态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1871560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第201题数字范围按位与

题目&#xff1a; 题解&#xff1a; class Solution { public:int rangeBitwiseAnd(int m, int n) {while (m < n) {// 抹去最右边的 1n n & (n - 1);}return n;} };

Flutter循序渐进==>Dart之类型、控制流和循环

导言 磨刀不误砍柴工&#xff0c;想搞好Flutter&#xff0c;先学好Flutter&#xff0c;还是本着我学Python的方法&#xff0c;先从数据类型、控制流和循环开始&#xff0c;这是每一种编程语言必用的。编程语言是相通的&#xff0c;基本精通一种后&#xff0c;学其它的就变得很…

macos Automator自动操作 app, 创建自定义 应用程序 app 的方法

mac内置的这个 自动操作 automator 应用程序&#xff0c;可以帮助我们做很多的重复的工作&#xff0c;可以创建工作流&#xff0c; 可以录制并回放操作&#xff0c; 还可以帮助我们创建自定的应用程序&#xff0c;下面我们就以创建一个自定义启动参数的chrome.app为例&#xff…

Unity解决报错:Execution failed for task ‘:unityLibrary:BuildIl2CppTask‘

目录 编辑器版本2020.3.33f1 及 2021.3.15f1 直接导出apk或aar报错(虽然会自动生成temp的AS工程&#xff0c;经过打开验证 也是无解的)&#xff1b; 唯一解决办法&#xff1a;Unity导出As工程没问题&#xff1b; 编辑器版本2020.3.33f1 及 2021.3.15f1 直接导出apk或aar报…

黑马点评项目总结1-使用Session发送验证码和登录login和 使用Redis存储验证码和Redis的token登录

黑马先是总结了从session实现登录&#xff0c;然后是因为如果使用了集群方式的服务器的话&#xff0c;存在集群共享session互相拷贝效率低下的问题&#xff0c;接着引出了速度更快的内存型的kv数据库Redis&#xff0c; 使用Session发送验证码和登录login 举个例子&#xff1a…

深度神经网络——决策树的实现与剪枝

概述 决策树 是一种有用的机器学习算法&#xff0c;用于回归和分类任务。 “决策树”这个名字来源于这样一个事实&#xff1a;算法不断地将数据集划分为越来越小的部分&#xff0c;直到数据被划分为单个实例&#xff0c;然后对实例进行分类。如果您要可视化算法的结果&#xf…

SQL注入和防御方法

SQL注入是一种攻击手段&#xff0c;通过在SQL查询中插入恶意SQL代码片段&#xff0c;欺骗数据库服务器执行非授权的数据库操作。这种攻击可能导致数据泄露、篡改或丢失。为了防范SQL注入&#xff0c;可以采取以下几种策略&#xff1a; 1.使用预编译语句&#xff08;Prepared St…

OBD诊断(ISO15031) 01服务

文章目录 功能简介PID 的功能请求和响应1、read-supported PIDs1.1、请求1.2、肯定响应 2、read PID value1.1、请求1.2、肯定响应 3、同时请求多个PID3、同时读取多个PID数据 Parameter definition报文示例1、单个PID请求和读取2、多个PID请求和读取 功能简介 01服务&#xf…

Linux双网卡默认路由的metric设置不正确,导致SSH连接失败问题定位

测试环境 VMware虚拟机 RockyLinux 9 x86_64 双网卡&#xff1a;eth0(访问外网): 10.206.216.92/24; eth1(访问内网) 192.168.1.4/24 问题描述 虚拟机重启后&#xff0c;SSH连接失败&#xff0c;提示"Connection time out"&#xff0c;重启之前SSH连接还是正常的…

2.Android逆向协议-了解常用的逆向工具

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;微尘网校 上一个内容&#xff1a;1.Android逆向协议-环境搭建 常用的工具&#xff1a;AndroidKiller、jadx、JEB、IDA AndroidKiller…

华为云安全防护,九河云综合分解优劣势分析

随着全球化的发展&#xff0c;越来越多的企业开始寻求在国际市场上扩展业务&#xff0c;这一趋势被称为企业出海。然而&#xff0c;企业在海外扩张面临诸多隐患与安全挑战&#xff0c;其中因为地域的不同&#xff0c;在安全性方面与国内相比会变得薄弱&#xff0c;从而导致被黑…

Redis集群(Clustering in Redis)工作机制详解

Redis集群工作机制详解 Redis 集群是用于提高 Redis 可扩展性和高可用性的解决方案。 维基百科&#xff1a;Scalability is the property of a system to handle a growing amount of work by adding resources to the system. 可扩展性是系统的一种允许通过增加系统资源来处…

《征服数据结构》字典树(Trie树)

摘要&#xff1a; 1&#xff0c;字典树的介绍 2&#xff0c;字典树的插入 3&#xff0c;字典树的查询 4&#xff0c;字典树排序 5&#xff0c;字典树的删除 6&#xff0c;字典树的用途 1&#xff0c;字典树的介绍 字典树又称 Trie 树 &#xff0c;单词查找树&#xff0c;前缀树…

花卉寄售系统

摘 要 随着互联网的快速发展和普及&#xff0c;电子商务已经成为人们日常生活中不可或缺的一部分。在电子商务领域&#xff0c;花卉行业也逐渐崭露头角&#xff0c;成为一个具有巨大潜力的市场。传统的花卉销售模式通常是通过实体店面进行销售&#xff0c;这种模式存在着许多问…

Python | Leetcode Python题解之第202题快乐数

题目&#xff1a; 题解&#xff1a; def isHappy(self, n: int) -> bool:cycle_members {4, 16, 37, 58, 89, 145, 42, 20}def get_next(number):total_sum 0while number > 0:number, digit divmod(number, 10)total_sum digit ** 2return total_sumwhile n ! 1 an…

RISC-V知识总结 —— 向量(扩展)指令集

资源1:晏明 - RISC-V向量扩展指令架构及LLVM自动向量化支持 - 202112118 - 第13届开源开发工具大会&#xff08;OSDTConf2021&#xff09;_哔哩哔哩_bilibili资源2:张先轶 - 基于RISC-V向量指令集优化基础计算软件生态【第12届开源开发工具大会&#xff08;OSDT2020&#xff09…

AI加持,商业智能与分析软件市场释放更大潜能

根据IDC最新发布的《中国商业智能和分析软件市场跟踪报告&#xff0c;2023H2》显示&#xff0c;2023下半年&#xff0c;中国商业智能与分析软件市场规模为5.2亿美元&#xff0c;同比增长为3.7%。其中&#xff0c;本地部署收入占比为89.3%&#xff0c;同比增长1.7%&#xff1b;公…

密码学及其应用 —— 对称加密技术

1. 对称加密、流加密和块加密 1.1 对称加密 对称加密&#xff08;也称为密钥加密&#xff09;是一种加密方式&#xff0c;其中加密和解密使用相同的密钥。这种加密方法基于二进制层面的操作&#xff0c;如XOR&#xff08;异或&#xff09;、SHIFT&#xff08;位移&#xff09;…

Linux 搭建 kafka 流程

优质博文&#xff1a;IT-BLOG-CN 一、安装环境 【1】CenOS7虚拟机三台 【2】已经搭建好的zookeeper集群。 【3】软件版本&#xff1a;kafka_2.11-1.0.0 二、创建目录并下载安装软件 【1】创建目录 cd /opt mkdir kafka #创建项目目录 cd kafka mkdir kafkalogs #创建kafk…

Transformers 安装及 google-t5/t5-small 机器翻译示例

文章目录 Github文档推荐文章简介安装官方示例google-t5/t5-small使用脚本进行训练Pytorch 机器翻译数据集下载数据集格式转换 Github https://github.com/huggingface/transformers 文档 https://huggingface.co/docs/transformers/indexhttps://github.com/huggingface/tr…