当前位置: 首页 > news >正文

【相机标定系列】【相机模型】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

相关文章:

  • SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测
  • Rust腐蚀怎么用服务器一键开服联机教程
  • Github 2024-05-21 开源项目日报 Top10
  • 【并发小知识】
  • Redis 中 List 数据结构详解
  • 2023、2024国赛web复现wp
  • 【vue】el-select选择器实现宽度自适应
  • Py列表(list)
  • 2024/5/28 P1247 取火柴游戏
  • 【Linux学习】进程间通信 (3) —— System V (1)
  • pygame raycasting纹理
  • 整理好了!2024年最常见 20 道 Rocket MQ面试题(一)
  • JavaScript面试 题
  • JavaScript与版本控制:编译时光机的双重奏——git仓库
  • redis基本数据结构与应用
  • Google 是如何开发 Web 框架的
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 0基础学习移动端适配
  • Java超时控制的实现
  • Java-详解HashMap
  • leetcode386. Lexicographical Numbers
  • leetcode46 Permutation 排列组合
  • linux安装openssl、swoole等扩展的具体步骤
  • Octave 入门
  • Python 基础起步 (十) 什么叫函数?
  • Web设计流程优化:网页效果图设计新思路
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 计算机常识 - 收藏集 - 掘金
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何在GitHub上创建个人博客
  • 深入浏览器事件循环的本质
  • 我有几个粽子,和一个故事
  • 与 ConTeXt MkIV 官方文档的接驳
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • zabbix3.2监控linux磁盘IO
  • 第二十章:异步和文件I/O.(二十三)
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #include<初见C语言之指针(5)>
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #职场发展#其他
  • (11)(2.1.2) DShot ESCs(四)
  • (4)Elastix图像配准:3D图像
  • (55)MOS管专题--->(10)MOS管的封装
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (SERIES10)DM逻辑备份还原
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (四) Graphivz 颜色选择
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .gitignore
  • .NET 8.0 发布到 IIS
  • .NET Core 中插件式开发实现