搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
代码探险家
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
推荐一个AI代码阅读神器_代码阅读ai
2
【Python爬虫】分享11 个有趣的 Python 爬虫例子,附源码!_爬取 有趣实例
3
GIT问题(一)——push冲突
4
Hive:insert into table 与 insert overwrite table 区别
5
微调 GPT-2 完成文本生成任务_gpt2微调
6
配置下载 docker镜像 playedu开源 最佳实践部署
7
IMX6ULL启动过程详解
8
探索编程艺术之门:HackerRank解决方案全景指南
9
网络安全工具100套_网络安全小工具
10
基于大数据爬虫+Hadoop超市进货推荐系统设计和实现(源码+LW+部署讲解)
当前位置:
article
> 正文
关于镜头畸变问题的总结_镜头畸变计算公式
作者:代码探险家 | 2024-07-03 09:33:18
赞
踩
镜头畸变计算公式
1、问题背景
最近在做的项目有畸变校正的需求,但测试镜头畸变时,发现畸变的形态不太正常。如下图所示中间向内凹、四周向外凸,感觉像是曲线型的。但常见的畸变就两种,一种是向内收的枕形畸变,另一种是向外凸的桶形畸变,所以本篇文章主要是对这个问题做一个分析,以及总结一下什么是畸变、畸变是怎么产生的、畸变的计算。
2、问题分析
关于畸变,是属于像差的一种,肯定是和镜头相关的。遇到我上面的问题具体该怎么处理呢?最简单的方法就是对着图卡(一般是点阵图/棋盘格)去拍 raw 图,将有问题现象的 raw 图反馈给镜头厂去确认。
一开始我是給的上面点阵图的那张 raw,他们反馈看现象是不太正常,但说我拍歪了,让再摆正重新拍一张。随即又拍了张摆正的解析力卡的 raw 给他们,因为是确认边缘直线变曲线的问题,所以用其他图卡能复现现象也行。
如下是这颗模组的规格,反馈说是这颗镜头的视场角是120度,属于广角镜头,只要畸变<10.5%就是正常的,确实短焦距的广角镜头是会容易出现明显的桶形畸变,但目前看到的这种曲线的畸变,就不太确定是什么了。
镜头厂那边实测,模拟给出的结论就是桶形畸变,也是满足镜头的设计要求的。并做了如下解释,如下图所示是反映镜头畸变的曲线图、网格图。从畸变曲线看,是单调递增的,且是负值,所以是单纯的桶形畸变。
曲线图上,在 2.2mm像高内,畸变都比较小,2.2mm 开始,畸变就变的比较大,应该是内视场畸变和外视场畸变差异过大导致的视差。
我的理解是类似于在一个一圈一圈的圆环里面画直线,会感觉直线变形了一样。
如上网格图也是一样,内视场的畸变很小,而到边角部分的畸变明显变大所以视觉上就感觉中间不直了一样。
3、知识延申:关于畸变的相关概念
a、什么是畸变
畸变是指物体所成的像在形状上的变形,它并不会影响像的清晰度,而只影响像与物的相似性。如下示意图所示,常见的畸变类型有桶形畸变和枕形畸变。
那什么时候是桶形畸变,什么时候又是枕形畸变呢?
以如下简单的示意图为例,将靠近镜头中心部分所成的像视为内视场(y1),边缘部分为外视场(y2)。当内视场的放大倍率 :y1/h1 > 外视场的放大倍率:y2/h2时,所成的像是从中心是往外放大的,也就是桶形畸变。 反之则是枕形畸变。
而具体出现桶形畸变还是枕形畸变,取决于光圈的位置,当光圈在透镜前面或后面时,会限制光线的行为。
当光圈在镜头前面,像的高度减小了,也就是像缩小了,就造成了桶形失真。复杂的镜头,例如后焦距广角镜头,往往就会出现桶形失真,因为前组镜头会充当后组的光圈。
当光圈在镜头后面,像的高度增加了,也就是放大了,就是枕形失真。远焦镜头的后组为负,会导致枕形失真。
下面这幅图片是对应的三维图,更加清晰的看出光圈与镜头的关系。
b、畸变产生的原因
从上面的概念我们了解到,畸变产生的根本原因是镜头像场中央区的放大倍率和边缘区的放大倍率不一致导致,
那为什么不一致呢?
请看如下这个光路图,A和B一个是轴上点,一个是轴外点。过B点作辅助光轴,也就是这个虚线,与像面交于B0′,B0′点即为B点的理想像点。另一方面,B点若是以细光束成像,则像点是B′点,注意,细光束成像是没有球差和慧差的,但是有场曲,所以B在细光束下成像像点实际在B', B′B0′为B点的场曲。
当B点以主光线成像时,看黄色主光线,这时注意,主光线是宽光束,存在球差和慧差,所以宽光束成像时,黄色主光线交辅轴于B1′点,所以B1′B′为B点的球差。
所以,综合球差慧差场曲的影响,主光线最终经B1′点交像面于Bz′点,那实际像点Bz’就偏离了理想像点B0′。再看看位于光轴上的A点,主光线与光轴重合,主光线的像点与理想像点在像面的中心点A′重合,因此轴上点成像没有偏差,但是轴外点的像高和理想像高有差异,造成中心和边缘的放大倍率不同,这就产生了畸变。所以,由以上分析可以看出,畸变的形成既有场曲的因素也有球差的因素。
注: 篇幅有限,这里就不再解释关于球差,慧差,场曲的概念了,后续文章会再单独描述;
c、关于畸变的计算
再回到上面镜头的spec,描述了镜头的 TV 畸变是10.5%,光学畸变是20%,
那这两者的区别是什么,具体是
如何
计算的?
1)、关于光学畸变:
光学畸变是对应镜头的指标,描述的是物体所成像的理想位置和实际位置的偏差,如下光路图中的轴外一点B,实际像点Bz',理想像点为B0′。可以用理想像高y’,和实际像高 yz’ 的比值来描述偏离程度,
公式为:( yz'-y' ) / y' x 100%
可以用此项目中的镜头规格来做具体的验证,镜头的光学畸变是随视场范围变化而变化的,所以规格书给出的20%是最大的光学畸变值,所以我们要计算出最大的理想像高,也就是计算当是最大视场范围时成像时的理想像高是多少。
最大的视场角如上规格书,对角线方向的 FOV 值为120° (如下图 ɵ = 60° ),焦距 f 是2.13mm,理想像高为:tan 60° x 2.13 = 3.689mm;
而最大实际像高就是 sensor 对角线长的一半:5.867 / 2 = 2.934mm;
则镜头最大光学畸变为:(2.934-3.689)/ 3.689 x 100% = - 20% ;
2)、关于 TV 畸变:
TV
畸变是对应所拍摄出的图片而言的,体现图像的变形程度,我们平常用 imatest 软件所测试的就是TV畸变的值。
TV 是 Transverse Vertical,横向竖向的意思。
关于TV畸变的计算它有SMIA 和 Traditional TV distortion 两种,如下示意图所示:
SMIA TV Distortion = 100% * ( A-B )/B ; A = ( A1+A2 )/2
Traditional TV distortion = 100% * ∆H/H
如上
SMIA TV Distortion 计算中,
A =
( A1+A2 )/2 =
H+2
∆H,B = H,则 100% *(A-B)/B = 2
∆H/H,所以
SMIA TV Distortion = 2x
Traditional TV distortion。
还是以此项目中用到的镜头来做具体的验证,规格书中给出的TV 畸变值是10.5%,且是SMIA TV 畸变;
如下是实拍的棋盘格的图,用来计算 SMIA TV畸变,拍两条横向直线,让他们与图像的上下边相切。两条直线与图像左侧相交,得到两个坐标,计算出纵向像素差A1。同样的方法可以得到右侧的纵向像素差A2。两条直线间的距离就是图像的高B,畸变值就是((A1+A2)/2 - B)/B。
用画图工具打开后,就可以得到每个点的像素位置,如下图的坐标所示,先算出左侧的像素差(2944-176=2768),右侧的像素差(2937-169=2768),中间的像素差为3120,可以计算出畸变值为:((2768+2768)/2 - 3120)/3120 = -11.2%),结果有点误差,但也不大,实际测试一般都是用 imatest 软件去计算,能了解一下具体是怎么计算的就可以了。
参考文章:
镜头畸变的那些事 | 清新的日子
光学畸变和TV畸变的换算方法 - 百度文库
光语者-摄影光学与镜头_中国刑事警察学院_中国大学MOOC(慕课)
大画成像成像镜头光学课程
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
【wpsshop博客】
推荐阅读
article
传递参数格式为
form
-
data
与
json
的区别,以及
ajax
、
axios
、
fetch
请求的方式...
本文介绍了前端HTTP请求中
form
-
data
和
json
格式的区别,以及
ajax
、
axios
、
fetch
三种POST提交...
赞
踩
article
计算机网络
——
传输层
:
TCP
/
UDP
_udp
tcp
...
传输层
实现源端主机和目标端主机上对等实体间会话,
TCP
/IP中两个代表性的
传输层
协议分别是
TCP
和
UDP
,本文对其进行了...
赞
踩
article
最新
腾讯
音乐
人
挂机
脚本
,号称 日赚
300
+_
腾讯
音乐
人
一万播放量收入...
总之,这个项目非常简单易行,不需要太多的技术和经验,而且利润也非常可观。如果你想要一个轻松赚钱的方法,不妨试试这个项目。...
赞
踩
article
go
语言怎么向
kafka
推送
消息
?...
在Go语言中,你可以使用`confluent-
kafka
-
go
`(也称为`librd
kafka
`的Go客户端)或`seg...
赞
踩
article
四、
本地
镜像
发布到
阿里
云
...
2、Dockerfile的方法,后续讲解。1、第三章使用的 commit 方法。2、选择控制台,进入容器
镜像
服务。6、将...
赞
踩
article
粒子
群
算法
求解
0
-1
背包
问题_
0
-1
背包
粒子
群
...
粒子
群
优化
算法
(PSO:Particle swarm optimization) 是一种进化计算技术(evolution...
赞
踩
article
Android
天气
APP
(十一)未来七天的
天气
预报
、逐
小时
预报
、UI优化,2024华为Androi...
对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境...
赞
踩
article
S
S
F
项目
总结
(
一
)...
作为
项目
经理,在把握需求变更上需要有高度的敏感,作为
一
个检测器,实时监控,
项目
过程中与客户方沟通的任何细小的变更,都应该...
赞
踩
article
目标
检测
——大规模
商品
数据
集_超市
商品
目标
检测
...
该
数据
集精心划分为九大主要类别,涵盖婴儿用品(如婴儿尿布、婴儿拖鞋)、饮料(如果汁、姜茶)、食品(如鱼干、蛋糕)、日用化...
赞
踩
article
汽车
智能网
联
催生新质生产力...
以前谈及
汽车
性能,往往会
联
想到发动机、变速箱或底盘。如今,智能座舱、集成电路、摄像头、毫米波雷达等词汇,成为了
汽车
性能新...
赞
踩
article
STM32
步进
电机
S
型加
减速
控制
详解:
源码
实现
、算法讲解及完整工程代码_野火
步进
电机
s升降速度
源码
...
这些算法基于
步进
电机
的特性和运动规律,通过对
电机
的驱动信号进行精确的调节,
实现
了
步进
电机
的平滑运动。在算法的
实现
过程中,...
赞
踩
article
粒子
群
python3
实现_
粒子
群算法
best
score
...
粒子
群优化算法(详细易懂_很多例子)在实现的过程中由于对其算法理解不够遇到了一些小问题。于是又找到了上面这篇文章加深了理...
赞
踩
article
实战:
循环
神经网络
与
文本
内容
情感
分类
_基于
循环
神经网络
的
文本
情感
分类
...
在传统
的
神经网络
模型中,是从输入层到隐含层再到输出层,层与层之间是全连接
的
,每层之间
的
节点是无连接
的
。但是这种普通
的
神经...
赞
踩
article
漏洞预警|
Apache
Kafka
Connect
JNDI注入漏洞_
kafka
-
clients
2...
棱镜七彩漏洞预警_
kafka
-
clients
2.3.0 漏洞
kafka
-
clients
2.3.0 漏洞 ...
赞
踩
article
微信
h5
网页
跳转
小
程序
,以及
跳转
内嵌
h5
小
程序
指定
页面
_网页
跳转
小
程序
指定
页面
...
1)首先是在index.html中引进
微信
sdk。2)在该
h5
的vue里,如果
h5
页面
可能会存在多种环境里,那么首先还需...
赞
踩
article
微信小
程序
mpvue
框架...
微信小
程序
mpvue
框架参考:微信开放文档一、vue基础vue 的官方文档 : Vue.js创建
mpvue
框架:vue ...
赞
踩
article
第一章--第三节--
人工智能
语言
模型
的
历史_
统计
语言
学
模型
是谁发明
的
?...
人工智能
语言
模型
是一种利用机器学习算法来处理自然
语言
的
技术,它能够自动完成翻译、文本生成、问题回答等任务,成为当今人工智...
赞
踩
article
python
tfidf
特征
变换
_Spark MLlib机器学习开发指南(4)--
特征
提取--TF-...
基于最新2.2.0版本翻译本节介绍和
特征
一起工作的算法,大致分为以下几类:提取:从原始数据提取
特征
转换:缩放,转换,或者...
赞
踩
article
Unity
渲染(四):
Shader
着色器
基础入门之获取
当前
屏幕
贴图
_
unity
shader
将
当前
帧...
通过这里,你会学习到怎么获取
当前
屏幕的
贴图
以及UV_
unity
shader
将
当前
帧画面作为
贴图
unity
shader
...
赞
踩
article
在
centos
系统上
安装
python3.9
的方法
_
centos
安装
python3.9
...
5) ./configure --enable-optimizations --enable-shared LDFLAG...
赞
踩
相关标签
前端
javascript
jquery
计算机网络
tcp/ip
udp
tcp
经验分享
golang
kafka
阿里云
云计算
运维
linux
docker
算法
机器学习
人工智能
android
ui
华为
目标检测
计算机视觉
大规模商品数据集