相机模型,坐标变换,畸变

小孔成像模型

墨子就记录了小孔成像是倒立的。这从几何光学的角度是很好理解的:光沿直线传播,上方和下方的光线交叉,导致在成像平面位置互换。

小孔的大小有什么影响?

小孔越大,进光量变大了,但是成像平面上一个点来源于物体的多个点,相当于画画的笔触越粗,所成的像也越模糊。

但是小孔越小成像就越清晰吗?先不说技术上无法实现,孔越小,光的衍射diffraction现象会越明显,光要越过障碍物,会出现水波纹:

小孔的形状有什么影响?

无论小孔什么形状,物体的每个位置会穿过小孔,在平面投下小孔形状的图案。但结果小孔的物体有无数道光线,所以最终成像来看没什么差异。正如前面的比方,改变小孔的形状,也可以理解为笔触的不同。

坐标变换

世界坐标到相机坐标

相机坐标系的原点是光心。世界坐标系到相机坐标系,是一个仿射变换:旋转+平移。

P_c=\begin{pmatrix} R & T\\ 0 & 1 \end{pmatrix}P_w

相机坐标到传感器坐标

图像坐标系是以传感器sensor为原点的,所以相机坐标系到图像坐标系就是一个缩放变换。

由三角形相似可以得到,缩小的尺度就是焦距f和物距的比值。

\begin{bmatrix} X\\ Y\\ Z \end{bmatrix}=\frac{1}{Z_c}\begin{pmatrix} f& 0& 0\\ 0 & f& 0\\ 0& 0 & 1 \end{pmatrix}\begin{pmatrix} X_c\\ Y_c\\ Z_c \end{pmatrix}

传感器坐标到像素坐标

像素坐标是离散化的,它是以传感器坐标以像素长宽为单位得到的。因为图像一般以左上角为原点,所以传感器坐标到像素坐标还需要一次平移。

内参和外参

前面从世界坐标系到像素坐标系经历了三次坐标变换。第一次涉及到的的平移和旋转构成了外参矩阵,后两次构成了内参矩阵。

外参有6个参数,3个控制旋转,3个控制平移。

内参有10个参数,其中五个是f,dx,dy,u_0,v_0,分别表示焦距,像素宽度,像素高度,图像宽度,图像高度。另外五个控制畸变。

畸变

近大远小

在相机坐标系到传感器坐标系转换中,涉及到了焦距和物距:

由上面的坐标变换公式可以看到, 成像大小与物距成反比,焦距成正比。这就可以解释透视关系中的近大远小。

那么是不是焦距和物距等比例同时放大缩小,成像就不变?理论上是这样的,但是物体不是一个平面,不同位置到镜头的距离是不一样的,没办法保证所有的点同时满足等比例变换,所以就会产生透视畸变:前景处被放大,背景处被缩小。

这就可以解释为什么拍特写摄影师都推荐用长焦。虽然剧烈近一点用短焦也可以拍出差不多大的像,但是因为焦距小,物距的微小变化就会被放大,导致畸变严重。

切向畸变

借鉴近大远小的分析,即便是平面物体,当平面和镜头不平行时,就产生了切向Tangential畸变。

径向畸变

径向是指半径的方向。因为镜头制作工艺,图像中心和边缘的折射有差异,所以产生了径向畸变。径向畸变又分为桶形畸变和枕形畸变:

很显然,径向畸变是关于半径r的函数,所以一般建模为r的指数多项式。

reference:

29. 小孔相机 - 知乎

为什么小孔成像实验中,孔的形状不影响像的形状? - 知乎

aachen数据集,其中一项是内参

> The intrinsic calibration is defined by the width `w` and height `h` of the image, its focal length 
`f`, the position of the principal point (`cx` and `cy`), and a radial distortion parameter `r`. 

Step1:模型 16个相机参数(内参、外参、畸变参数)-CSDN博客

Computer Vision

相机标定(Camera calibration)-CSDN博客

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

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

相关文章

第二步 完善MBR

文章目录 前言一、什么是MBR?二、我们需要什么样的MBR?三、设计我们的MBR!1、打印“1 MBR”2、加载次引导程序——loader 四、实践检验! 查看系列文章点这里: 操作系统真象还原 前言 在上一篇文章 第一步 从启动BIOS开…

社交电商的三大模式,新零售招商模式策划

链动21奖励模式,七人拼团模式拆解,分享购模式解析 坐标:厦门,我是易创客肖琳 深耕社交新零售行业10年,主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 随着数字时代的到来,“互联网”概…

PyCharm2023 社区版安装 +中文语言包+配置教程+Python环境搭建

一、Python 安装 我们在安装Pycharm之前,首先要先安装Python环境也就是安装Python解释器 因为PyCharm是一个用于编写和调试Python代码的开发工具,而Python解释器是用于解释执行Python代码PyCharm需要依赖Python解释器来执行Python代码,因此…

R语言贝叶斯方法在生态环境领域中的应用

贝叶斯统计已经被广泛应用到物理学、生态学、心理学、计算机、哲学等各个学术领域,其火爆程度已经跨越了学术圈,如促使其自成统计江湖一派的贝叶斯定理在热播美剧《The Big Bang Theory》中都要秀一把。贝叶斯统计学即贝叶斯学派是一门基本思想与传统基于…

R语言基础--文件读写

From生物技能树(R第五节) 文章目录 一、文件读写1.注意用project管理工作目录2、文件读取1、读取.txt文件2、读取.csv文件注意:数据框不允许重复的行名 3.数据框的导出4.读取文件的其他方式(用于读取/导出文件的R包)--经验1.base2.readr3.dat…

图搜索算法-最小生成树问题-克鲁斯卡尔算法(kruskal)

相关文章: 数据结构–图的概念 图搜索算法 - 深度优先搜索法(DFS) 图搜索算法 - 广度优先搜索法(BFS) 图搜索算法 - 拓扑排序 图搜索算法-最短路径算法-戴克斯特拉算法 图搜索算法-最短路径算法-贝尔曼-福特算法 最小生…

【Redis】数据类型

Redis数据类型(5 3 1) 五种基本数据类型 String字符串 特点 二进制安全,可以包含任何数据,如数字,字符串,jpg图片或者序列化的对象 应用场景 缓存: redis作为缓存层,mysql做持…

【ORACLE战报】2024.4月最新OCP考试喜报.

课程介绍 DBA数据库管理必备认证:ORACLE OCP 19C 教材下载 ORACLE OCP 19C 官方电子教材 ORACLE OCP 12C官方电子教材 题库下载 ORACLE 19C题库 (083384题、082362题)-2024答案修正版.rar 所有的收获都是默默耕耘的成果 2024.4月【最新考试成…

Chromium 调试指南2024 Windows11篇-条件断点、函数断点(十一)

1. 前言 在调试过程中,步进代码和条件断点/函数断点是非常有用的工具和技术,它们可以帮助开发者更加精确地定位和解决问题。本文将介绍步进代码的常用工具以及条件断点/函数断点的设置方法,帮助开发者更加高效地进行调试工作。 2. 步进代码…

ControlNet原理解析

前排提示照片已经获得小姐姐许可。 光知道ControlNet好用,不想知道它背后的原理么?今天就看一看这篇论文,带大家了解一下ControlNet是如何炼成的。 ControlNet是干嘛的 我们知道现在文本到图像生成很火爆,你只需要输入文字就可以…

内存函数:memcpy(拷贝),memmove(拷贝),memcmp(比较),memset(设置)

内存函数 一.memcpy(内存拷贝1)1.函数使用2.模拟实现 二.memmove(内存拷贝2)1.函数使用2.模拟实现 三.memcmp(内存比较)1.函数使用2.模拟实现 四.memset(内存设置)1.函数使用2.模拟实…

【Linux】用户组、用户、文件权限(ugo权限),权限掩码,chmod,chown,suid,sgid,sticky,su,sudo

用户组 注意:普通用户只能查看有哪些组,不能创建/修改/删除,会提示:用户名 is not in the sudoers file.This incident will be reported. groupadd 用户组名新建用户组cat /etc/group查看有哪些组(普通用户可以操作…

Windows下配置TortoiseGit 访问Ubuntu虚拟机下Samba共享目录

前言: 本文记录学习使用 Git 版本管理工具的学习笔记,通过阅读参考链接中的博文和实际操作,快速的上手使用 Git 工具。 本文参考了引用链接博文里的内容。 引用: 【TortoiseGit】TortoiseGit安装和配置详细说明-CSDN博客 Git版本管理可视…

Java——对象的打印

当我们运行如下代码: public class Person {String name;String gender;int age;public Person(String name,String gender,int age){this.name name;this.gender gender;this.age age;}public static void main(String[] args){Person person new Person(&quo…

QT客户端开发的注意事项

QT客户端开发是一个涉及图形用户界面(GUI)设计、网络编程、数据库交互等多个方面的复杂过程。以下是在进行QT客户端开发时应注意的一些关键事项,通过关注这些事项,可以提高QT客户端应用的质量和开发效率。北京木奇移动技术有限公司…

Eclipse下载安装教程(包含JDK安装)【保姆级教学】【2024.4已更新】

目录 文章最后附下载链接 第一步:下载Eclipse,并安装 第二步:下载JDK,并安装 第三步:Java运行环境配置 安装Eclipse必须同时安装JDK !!! 文章最后附下载链接 第一步&#xf…

微软推出的Microsoft Fabric 到底是什么?

近期,总有客户问小编,微软推出的 Microsoft Fabric 是什么?这个产品有什么特别之处呢?希望下面这篇文章能为大家解开一些疑惑。 微软Fabric是2023年5月推出的一个数据分析平台,它将关键数据管理和分析工作负载整合到一…

【设计模式】JAVA Design Patterns——Acyclic Visitor(非循环访问者模式)

🔍目的 允许将新功能添加到现有的类层次结构中,而不会影响这些层次结构,也不会有四人帮访客模式中那样循环依赖的问题。 🔍解释 真实世界例子 我们有一个调制解调器类的层次结构。 需要使用基于过滤条件的外部算法(是…

奖金+1 万,OpenTenBase 开源核心贡献挑战赛,KB 专家助力其跑在 K8s 上

OpenTenBase 是由开放原子开源基金会孵化及运营的开源项目,是一款开放中立的企业级分布式 HTAP 开源数据库。OpenTenBase 具备高扩展性、商业数据库语法兼容、分布式 HTAP 引擎、多级容灾和多维度资源隔离等能力,已成功应用于金融、医疗、航天等行业的核…

FlyFlow:支持驳回后自动跨节点跳回

本周更新 新增:审批节点驳回(拒绝配置的驳回)支持自动跳回当前节点新增:修改数据节点新增:删除数据节点新增:子流程支持配置自动跳过发起人节点优化:两个项目合并一个单体项目优化:…