【相机标定系列】【相机模型】SLAM 中常用的相机模型畸变模型总结

Overview

鱼眼镜头的成像原理分类:

Dioptric cameras,通过透镜来实现,主要是折射
Catadioptric cameras,使用一个标准相机加一个面镜(Shaped mirror)
polydioptric camera,通过多个相机重叠视野

目前的视觉系统都是 central 的,入射光线会相交于同一点,点称为 single effective viewpoint。

https://github.com/alalagong/CameraModel

Camera models相机模型

Pinhole:针孔
omnidirectional:全向

(【鱼眼镜头9】论文Omnidirectional Camera,鱼眼是全向折射相机,满足单一有效视点,scaramuzza多项式Taylor模型(适用于鱼眼相机),统一投影模型(在鱼眼应用受限))中提到了Omni 相机模型,早期的统一投影模型和后来的scaramuzza多项式Taylor模型(适用于鱼眼相机)

Distortion models :畸变模型

Equidistant (EQUI)
Radtan
FOV

Equi畸变模型是一种用于描述相机镜头引起的径向畸变(radial distortion)的数学模型。它基于等距投影(equidistant projection)的原理,即图像上点与物体空间点之间的距离在投影前后保持不变。在【鱼眼镜头10】等距Equidistant模型的Kannala-Brandt模型中我说明了这个的模型的情况,在opencv 中fisheye有应用

Radtan在【相机标定系列】径向畸变和切向畸变(radial-tangential distortion) 径向畸变和切向畸变模型,简称为radtan畸变模型。中有说明,是经典的畸变模型

Projection model:投影模型

Full projection model
MEI Camera
Pinhole Camera
atan Camera
Davide Scaramuzza Camera

常用用例

要注意畸变矫正之后的相机内参会变化。

DSO:Pinhole + Equi / Radtan / FOVVINS:Pinhole / Omni + RadtanSVO:Pinhole / atan / ScaramuzzaOpenCV:cv: pinhole + Radtan , cv::fisheye: pinhole + Equi , cv::omnidir: Omni + Radtan

cv::fisheye在 OpenCV 中用于鱼眼相机的标定,但它本身并不直接等同于 Kannala-Brandt 模型。不过,cv::fisheye 函数在处理鱼眼相机标定时,可能会采用类似 Kannala-Brandt 模型或其他鱼眼相机模型的方法来描述和校正鱼眼相机的畸变。

cv::fisheye

cv::fisheye 是 OpenCV 库中用于处理鱼眼相机(Fisheye Camera)的模块。它基于鱼眼相机模型来处理鱼眼镜头引入的严重畸变。以下是关于 cv::fisheye 所基于的模型的一些关键点:

  1. 鱼眼相机模型简介

    • 鱼眼相机相较于传统针孔相机,拥有更广阔的视野,但这也导致了更严重的畸变。
    • 鱼眼相机模型通常包括针孔成像和鱼眼畸变两个主要部分。
  2. 针孔成像

    • 在鱼眼相机模型中,针孔成像描述了从3D世界坐标系到相机坐标系,再到理想图像坐标系的投影过程。
    • 这一过程通过外参数的旋转和平移转换来实现。
  3. 鱼眼畸变

    • 鱼眼畸变是鱼眼相机特有的现象,它导致图像中的直线在图像边缘附近呈现弯曲状。
    • OpenCV 中的 cv::fisheye 模块使用多项式模型来描述这种畸变,通常包括多个畸变系数(如 k1, k2, k3, k4 等)。
    • 畸变校正通常涉及将畸变图像坐标转换为校正后的图像坐标。
  4. 畸变校正过程

    • 对于世界坐标系中的一点 P,首先通过针孔投影得到理想坐标 [a; b]。
    • 接着,应用鱼眼畸变模型计算畸变后的坐标 [x’; y’]。
    • 最后,将畸变坐标调整到像素坐标系 [u; v]。
  5. 多项式畸变模型

    • OpenCV 的 cv::fisheye 模块使用的畸变模型通常是一个多项式,如 θ d = θ ( 1 + k 1 θ 2 + k 2 θ 4 + k 3 θ 6 + k 4 θ 8 θd = θ (1 + k1θ^2 + k2θ^4 + k3θ^6 + k4θ^8 θd=θ(1+k1θ2+k2θ4+k3θ6+k4θ8)。
    • 其中,θ 是理想坐标的极角,θd 是畸变后的极角,k1, k2, k3, k4 是畸变系数。
  6. 模型应用

    • cv::fisheye 模块提供了多种函数和工具,用于鱼眼相机的标定、畸变校正、投影和反投影等操作。
    • 通过这些工具,用户可以准确地校正鱼眼相机拍摄的图像,获得更准确的视觉信息。

总结来说,cv::fisheye 是基于鱼眼相机模型来处理鱼眼镜头引入的畸变的。它利用针孔成像原理和多项式畸变模型来模拟和校正鱼眼相机的成像过程,从而为用户提供高质量的视觉信息。

参考

https://blog.csdn.net/OKasy/article/details/90665534

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

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

相关文章

npm的基本命令和用法

1. 安装与初始化 安装npm 首先,确保你的系统中已安装了Node.js,因为npm随Node.js一同分发。访问Node.js官网下载并安装适合你操作系统的版本。安装完成后,在终端或命令提示符中输入以下命令来验证安装: 1$ node -v 2$ npm -v …

[STM32-HAL库]ADC采集-DMA中断采集-平均值滤波-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

目录 一、前言 二、实现步骤 1.STM32CUBEMX配置 2.Keil工程程序设计 三、结语 一、前言 本文通过STM32CUBEMX实现对ADC的数据采集和滤波操作,帮助各位开发者完成与模拟量输入的采集工作。 二、实现步骤 1.STM32CUBEMX配置 以STM32F103C8T6为例,打开S…

3D 生成重建015-nerf2mesh从神经辐射场中提取mesh和纹理!

3D 生成重建015-nerf2mesh从神经辐射场中提取mesh和纹理! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 NeRF2Mesh 提出了一种从多视角 RGB 图像重建纹理表面网格的新方法。它克服了传统 NeRF 模型的局限性,由于其隐式表示,传统 NeRF 模…

高斯分步正态分布

高斯分布,也称为正态分布(Normal Distribution),是统计学和概率论中最重要的分布之一。它由德国数学家卡尔弗里德里希高斯(Carl Friedrich Gauss)首先系统研究并命名。以下是关于高斯分布的详细介绍&#x…

基于 Pre-commit 的 Python项目代码风格统一实践

背景信息 统一代码风格首先需要定义参照的规范,每个团队可能会有自己的规范,我们选择的规范是 yapf mypy isort,如果保证所有的研发人员都遵循相关规范呢? 鼓励 IDE 中对应的插件的安装,通过直接对应的插件&#x…

bootstrap实现天平效果

之前提到了,最近,孩子的幼儿园让家长体验“半日助教活动”,每个家长需要讲授15-20分钟的课程。作为一名程序员,实在没有能教的课程,只能做了一个小游戏,带着小朋友们熟悉数字。 在上一章博客中&#xff0c…

【读书】读书笔记——理科生的视角:底层逻辑+数学之美

1,底层逻辑1(看清这个世界的底牌) 刘润 著 0)什么是底层逻辑? 底层逻辑是:事物之间共同点、变化背后不变的东西事;看清事物的本质,才能在复杂变化中从根本上解决问题。 1&#x…

【Java继承】(超级详细!!!)

【Java继承】(超级详细!!!) 1、 继承的概念2 、继承的语法3、 父类成员访问3.1 子类中访问父类的成员变量3.2 子类中访问父类的成员方法 4、 super关键字5 、子类的构造方法6、 继承关系上的执行顺序7、protected 关键…

ubuntu20.04安装后配置:wifi、屏幕亮度、Nvidia驱动等

文章目录 一、安装时最好用英语,否则Downloads等home下文件夹是中文二、安装后开机无法进入系统图形界面三、清理不必要软件,更新系统四、屏幕亮度、Nvidia驱动五、wifi 一、安装时最好用英语,否则Downloads等home下文件夹是中文 安装完再在…

error: ‘address‘ in ‘class school‘ does not name a type school:: address = “

错误代码 class school{ public:string name;static string address; public:static string getAddress(){return address;} };school::address "南京路";原因 school::address “南京路”;前面未加类型,导致编译错误 解决 class school{ public:stri…

选项卡式小部件QTabWidget

文章目录 1. 详细介绍2. 常用属性3. 信号4. 常用函数5. 官方示例Tab Dialog QTabWidget提供一堆选项卡式小部件。 1. 详细介绍 选项卡式部件提供一个选项卡栏和一个用于显示与每个选项卡相关的页面的页面区域。 默认情况下,选项卡栏显示在页面区域上方,…

Vue.js - 计算属性与侦听器 【0基础向 Vue 基础学习】

文章目录 计算属性 computedcomputed 的使用方法computed 与 method 的区别计算属性完整写法 watch 侦听器(监视器)简单写法 → 简单类型数据,直接监视完整写法 → 添加额外配置项 计算属性 computed computed 的使用方法 **概念&#xff1…

web题解,基础知识巩固(qsnctf)

1.文章管理系统 1)打开题目,把它页面翻完了,没看懂它有啥用 2)看了看源码,也是一样的,没找到有用的东西 3)想着可能还是在隐藏文件里找,那我就直接用dirsearch扫扫看 4)…

初识C++ · 模拟实现vector

目录 前言: 1 部分简单函数的实现 2 push_back和pop_back 3 reserve和resize 4 Print_vector 5 insert和erase 6 拷贝构造 7 构造 8 赋值 9 memcpy的问题 10 迭代器失效 前言: 继上文模拟实现了string之后,接着就模拟实现vector&…

DataFrame—数据汇总9

s3.sort_index() 文章最前: 我是Octopus,这个名字来源于我的中文名--章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣&#xf…

MyBatis复习笔记

3.Mybatis复习 3.1 xml配置 properties&#xff1a;加载配置文件 settings&#xff1a;设置驼峰映射 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings>typeAliases&#xff1a;类型别名设置 #这样在映射…

如何去除视频上的文字?免费无痕去水印分享!视频制作良器!

对于需要进行二次创作的视频素材&#xff0c;去除原有的文字可以提供一个更加干净的画布&#xff0c;方便创作者在其基础上进行新的创作和编辑。同时&#xff0c;去除文字后的视频也更方便分享到各种平台&#xff0c;避免因为平台对文字的限制而导致视频无法发布或传播。 要去除…

Kotlin 标准函数 with、run、apply 的定义和使用

Kotlin 标准函数 with、run、apply 的定义和使用 1. with 函数 定义&#xff1a; with 函数允许你在一个对象的上下文中执行一个 lambda 表达式&#xff0c;而不需要在 lambda 表达式中重复引用该对象。 kotlin.internal.InlineOnly public inline fun <T, R> with(r…

云计算期末复习(1)

云计算基础 作业&#xff08;问答题&#xff09; &#xff08;1&#xff09;总结云计算的特点。 透明的云端计算服务 “无限”多的计算资源&#xff0c;提供强大的计算能力 按需分配&#xff0c;弹性伸缩&#xff0c;取用方便&#xff0c;成本低廉资源共享&#xff0c;降低企…

python 3.10 install on centos

CentOS 7 安装 Python 3.10_yum python3.10-CSDN博客