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

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

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行