【计算机视觉】相机

文章目录

  • 一、原始的相机:针孔相机(Pinhole Camera)
  • 二、针孔相机的数学模型
  • 三、真实相机
  • 四、透镜的缺陷

我的《计算机视觉》系列参考UC Berkeley的CS180课程,PPT可以在课程主页看到。

成像原理

一、原始的相机:针孔相机(Pinhole Camera)


想要拍一张相片,直接拿胶片对着景物肯定是不行的,因为物体的每一点发出的光线都会到达胶片上的每一点,从而导致胶片上的影像非常模糊,甚至什么都看不出来。因此,我们想建立景物和胶片一一对应的关系,就必须让景物的每一点只有一束光线到达胶片上的一点(其实是很小的区域)。为了达到这个目的,我们就必须用一个隔板把其他多余的光挡住(图中的barrier),只允许其中一束光通过,也就是隔板上的孔(aperture)。这就是针孔相机的原理了。这里的孔在现代的相机上就是光圈,英文名同样是aperture。

针孔相机无处不在,树叶之间的缝隙也可以构成针孔相机,树荫下地面上圆形的亮斑其实就是太阳的像。当发生日食的时候,亮斑的形状就不是圆形的了,而是月牙形(如上图所示)。

有时候,连窗子都可以是照相机。如图所示,酒店的窗户构成针孔相机使得窗外的塔尖倒映在了墙上。

二、针孔相机的数学模型

下面,我们对针孔相机建立数学模型。


针孔相机捕捉的是光束,所有的光束通过一个投影中心(Center of Projection, COP)。像是在像平面上形成的。有效焦距 d d d是从投影中心到像平面的距离。


我们把投影中心放在空间直角坐标系的原点。这里与实际不同的是,我们把像平面放在投影中心的前面(介于物和投影中心之间的 z = − d z=-d z=d处,以后处理其他相机也是如此),这样的话就可以避免景物倒过来的问题了。这样做是可行的,因为把像平面放在 z = d z=d z=d z = − d z=-d z=d处的唯一区别就是景物是正着的还是倒着的。然后,用一些相似三角形,就可以知道物点 ( x , y , z ) (x,y,z) (x,y,z)对应的像点是 ( − d x z , − d y z , − d ) \left(-d\cfrac xz,-d\cfrac yz,-d\right) (dzx,dzy,d)。忽略 z z z坐标 − d -d d,我们就知道胶片上的坐标是 ( − d x z , − d y z ) \left(-d\cfrac xz,-d\cfrac yz\right) (dzx,dzy)

三、真实相机

当然了,针孔相机是旧时代的产物,现在没有人在用针孔相机。现在的相机大都是基于透镜的。接下来我们会建立现代相机的模型。

首先我们讨论一下光圈半径。既然允许通过的光太多会使影像变模糊,为什么不让光圈越小越好呢?答案是:还有光的衍射现象。这里又要涉及一些瑞利判据之类的东西了,啊啊啊啊大物我的噩梦……


所以说光圈半径应该在一个合理的范围内。此外,现代相机使用透镜有很多好处。小孔成像利用的是光的直线传播,景物发出的大部分光被挡在外面了,只有一小部分进入了小孔,这就导致单位时间进入的光强很低,需要很长的曝光时间来弥补。而透镜允许我们不必浪费挡在外面的光,而是把光折进光圈,从而使得更多的光进入光圈,达到缩短曝光时间、降低衍射效应、提升图像品质的目的。透镜可以让光聚焦在一个特定的平面(焦平面)上,我们可以通过调节透镜的形状(曲率半径)、折射率来调节焦距,比针孔相机更方便。

当然,我们知道凸透镜成像满足高斯公式( 1 u + 1 v = 1 f \cfrac 1u+\cfrac 1v=\cfrac 1f u1+v1=f1死去的几何光学突然开始攻击我,这也就意味着对于不同的物距 u u u,相距 v v v是不同的,因此只有物距在一个范围内才能映射到给定的像平面上。物距偏离合理范围,聚焦的平面就不在像平面上了,就像近视眼和远视眼一样。

使图像清晰的最远和最近物距之差称为景深(depth of field):

光圈半径可以控制景深。我们知道,光圈越大,景物的一个点发出的光线映射到像平面上的光斑半径就越大,使得图像不清晰。我们又知道,凸透镜成实像时满足“物近像远像变大,物远像近像变小”,所以景物太远或太近都会导致聚焦不到像平面上,从而使光斑变大。当光圈变小时,可以约数光发散的角度,使像上的光斑变小,从而能允许更远和更近的物距,使得景深变大。焦比(F-number)是焦距与光圈直径之比,焦比越大,意味着光圈半径越小,使得曝光时间增长(因为进入光圈的光变少了,需要更长的曝光时间来弥补),但景深也变大。

焦距可以决定视野(field of view, FOV)。焦距越小,说明透镜遮光能力越强,很边缘的光都可以折进光圈里面,使得视野越大;同时,同一个物体的像也会变小。


焦距太小会导致拍摄变形(比如上图左边的左右脸不一样大)。这是因为小焦距对应大视角,从而使近、远景物占视角的比例之比加大,近景物在图片中的比例被夸张地放大,从而使图像呈现出诡异的形状。

四、透镜的缺陷

  1. 色差(chromatic aberration)。透镜对不同波长的光的折射率不同,使得不同颜色的像位置发生偏移。

  1. 径向畸变(radial distortion)。这是由不完美的透镜导致的;光线通过透镜边缘时会产生偏移。

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

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

相关文章

【深度学习】吴恩达课程笔记(一)——深度学习概论、神经网络基础

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 吴恩达课程笔记——深度学习概论、神经网络基础 一、概念区别1.深度学习与机器学习2.深度学习与神经网络 二、什么是神经网络1.分类2.特点3.工作原理4.神经网络示意图5.神经网络进行监督学习6.深度学习的发展 三、…

力扣:143. 重排链表(Python3)

题目: 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进…

亚信科技:发挥自我优势深入AIGC,并购整合高瞻远瞩致力未来路

【科技明说 | 重磅专题】 亚信科技在IT提供商领域中是一个低调的前行者,在全球通信及大型企业市场中扮演着重要的角色。对于近年来如火如荼AI方面的投入与研究,亚信科技是否也很重视呢? 事实上,是肯定的回答。 在我看…

一文详解汽车电子CAN总线

0.什么是CAN总线 CAN总线(控制器区域网络)是一个中央网络系统,连接不同的电子控制单元(ECU)以及车辆中的其他设备。现在的汽车可以有100个ECU,因此CAN总线通信变得非常重要。 1.CAN总线流行的背景 集中式:CAN总线系统允许对连接到网络的ECU进行集中控制…

Android开发知识学习——HTTP基础

文章目录 学习资源来自:扔物线HTTPHTTP到底是什么HTTP的工作方式URL ->HTTP报文List itemHTTP的工作方式请求报文格式:Request响应报文格式:ResponseHTTP的请求方法状态码 HeaderHostContent-TypeContent-LengthTransfer: chunked (分块传…

el-table多选表格 实现默认选中 删除选中列表取消勾选等联动效果

实现效果如下&#xff1a; 代码如下&#xff1a; <template><div><el-tableref"multipleTable":data"tableData"tooltip-effect"dark"style"width: 100%"selection-change"handleSelectionChange"><…

Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(下)

Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart吉祥物Dash 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/arti…

JVM常见的垃圾回收器(详细)

1、Young为年轻代出发的垃圾回收器。 2、Old为老触发的垃圾回收器。 3、连线代表的是垃圾回收器的组合。CMS 和Serial Old连线代表CMS一旦不行了&#xff0c;Serial Old上场。 首先了解一个概念&#xff1a;STW 1、什么是STW&#xff1f; STW是Stop-The-World缩写: 是在垃圾回…

即时编译器JIT

类编译加载执行过程 如下图所示&#xff0c;一个Java代码从编译到运行大抵会经历以下几个过程。具体每个过程笔者会在下文站展开讨论。 类编译 首先是类编译阶段&#xff0c;这个阶段会将Java文件变为class文件&#xff0c;这个class文件包含一个常量池和方法表集合&#xf…

【100天精通Python】Day72:Python可视化_一文掌握Seaborn库的使用《二》_分类数据可视化,线性模型和参数拟合的可视化,示例+代码

目录 1. 分类数据的可视化 1.1 类别散点图&#xff08;Categorical Scatter Plot&#xff09; 1.2 类别分布图&#xff08;Categorical Distribution Plot&#xff09; 1.3 类别估计图&#xff08;Categorical Estimate Plot&#xff09; 1.4 类别单变量图&#xff08;Cat…

深入了解 Elasticsearch 8.1 中的 Script 使用

一、什么是 Elasticsearch Script&#xff1f; Elasticsearch 中的 Script 是一种灵活的方式&#xff0c;允许用户在查询、聚合和更新文档时执行自定义的脚本。这些脚本可以用来动态计算字段值、修改查询行为、执行复杂的条件逻辑等等。 二、支持的脚本语言有哪些 支持多种脚本…

《HelloGitHub》第 91 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

nodejs+vue+elementui+express外卖数据分析python

在上述需求分析的基础上&#xff0c;通过深入研究&#xff0c;将系统使用人员划分为信息采集编辑、信息维护编辑、信息发布编辑三个角色。 本论文的研究目的是为了给采编者提供一套完善、高效的智能信息收集解决方案&#xff0c;并利用一系列的程序设计与开发&#xff0c;为采…

公司电脑禁用U盘的方法

公司电脑禁用U盘的方法 安企神U盘管理系统下载使用 在这个复杂的数据时代&#xff0c;保护公司数据的安全性至关重要。其中&#xff0c;防止未经授权的数据泄露是其中的一个关键环节。U盘作为一种常用的数据传输工具&#xff0c;也成为了潜在的安全风险。因此&#xff0c;公司…

NSS [鹤城杯 2021]EasyP

NSS [鹤城杯 2021]EasyP 直接给了源码 <?php include utils.php;if (isset($_POST[guess])) {$guess (string) $_POST[guess];if ($guess $secret) {$message Congratulations! The flag is: . $flag;} else {$message Wrong. Try Again;} }if (preg_match(/utils\.p…

【MATLAB源码-第58期】基于蛇优化算法(SO)和粒子群优化算法(PSO)的栅格地图路径规划最短路径和适应度曲线对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 粒子群算法 (Particle Swarm Optimization, PSO) 1. 算法概述 粒子群算法是一种基于群体智能的优化算法&#xff0c;模拟鸟群觅食的行为。算法中的每个粒子代表问题的一个可能解&#xff0c;并且具有位置和速度两个属性。粒…

Vue3:将表格数据下载为excel文件

需求 将表格数据或者其他形式的数据下载为excel文件 技术栈 Vue3、ElementPlus、 实现 1、安装相关的库 下载xlsx 和 file-saver 库 npm install -S file-saver npm install -S xlsx引入XLSX库和FileSaver库 import XLSX from xlsx; import FileSaver from file-saver;…

vue3响应式对象:ref和reactive

ref() <template><button click"changeMsg">改变信息</button><div>{{ msg }}</div><div>{{ man }}</div> </template><script lang"ts"> import { defineComponent,ref,Ref } from vueexport def…

【SEC 学习】美化 Linux 终端

一、步骤 1. 进入 /etc/bash.bashrc vim /etc/bash.bashrc2. 重新加载 bash.bashrc source /etc/bash.bashrc二、各参数指标 符号含义\u当前用户的账号名称\h仅取主机的第一个名字&#xff0c;如上例&#xff0c;则为fc4&#xff0c;.linux则被省略\H完整的主机名称。例如&…

C++STL---Vector、List所要掌握的基本知识

绪论​ 拼着一切代价&#xff0c;奔你的前程。 ——巴尔扎克&#xff1b;本章主要围绕vector和list的使用&#xff0c;以及容器底层迭代器失效问题&#xff0c;同时会有对原码的分析和模拟实现其底层类函数。​​​​话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑…