[计算机图形学]相机与透镜(前瞻预习/复习回顾)

news2024/11/25 4:37:17

一、相机

1.成像方法

成像方法有两种,合成捕捉,我们之前所说的光栅化和光线追踪都属于合成的方法,也就是实际上不存在的东西。而另一种成像方法叫做捕捉成像,也就是把真实世界中存在的一些东西变成照片这就是捕捉成像,例如用相机拍照。

2.小孔成像

小孔成像,一种自然现象,用一个带有小孔的板遮挡在墙体与物之间,墙体上就会形成物的倒立实像,我们把这样的一种现象叫小孔成像。而与之对应的相机是针孔相机

 当然,我们最常见的还是上图这种这种带透镜的相机。

3.相机部件

(1)快门

Shutter,也就是快门,控制光能否进入机身的部件,控制光能在1/n秒内进入摄像机。

(2)传感器 

光进入相机,相机需要被捕捉到,捕捉的原件叫做传感器。它记录的就是我们之前所说的Irradiance。(本篇我们不区分胶片和传感器的概念,但实际上它们是不同的)

如果没有真空/透镜,那么相机就不能拍摄一张照片,原因也很简单,如上图,如果没有针孔/透镜,那么传感器上的任何一个点都可能接收人来自四面八方的光线,而传感器本身又不区分方向,所以每个点都收集的是综合起来的信息,都是模糊的,那也就不能表示一张图片了。

4.针孔相机

小孔成像的现象在很早就被人们发现了,直到今天,我们仍然可以利用小孔成像原理来拍摄照片,但是小孔成像的照片没有深度,也就是它成像的任何一个位置都是清楚的不是模糊的,所以不能表示深度。

5.Field of View (FOV)—视场

视场表示的是我们能看到多大的范围,所谓广角镜头也就是视场更大的镜头。什么东西影响视场呢,我们先从小孔成像理解,我们把传感器的高度定义为h,传感器到小孔的距离定义为fFOV=2·arctan(h/2f)。我们就可以根据内部设计hf的参数来调节FOV

而人们规定了假设所有相机都是用35mm的胶片大小,也就是上面说的传感器大小h固定了,那么我们只需要通过定义f的不同就可以定义视场的大小,在透镜相机里,f就是焦距。所以,焦距短,视场就大,反之视场就小。这里注意我们说所有相机都是用35mm的胶片大小,并不是真的所有相机它的胶片大小都是35mm,这里指的是一种等效的大小。

 而视场越窄,我们能看到的就越远。如上图

同样的传感器也有不同的大小,更大的传感器也就有更大的分辨率,当然也越贵。对于手机,虽然它的传感器大小小于相机,但是人们通过缩小它的焦距,可以达到和相机一样的视场大小。

6.Exposure—曝光

Exposure,曝光,计算公式Exposure=Time x Irradiance。也就是说如果我们对一个明亮的场景拍照会拍到一个明亮的照片,如果我们对着一个黑暗的环境拍照,但是按下的快门时间很长,我们也可以得到一个比较明亮的照片。也就是说一个是进了多少光,一个是进光进了多长时间,我们将它们累积起来就可以得到曝光度。照相和辐射度量学不同,我们在辐射度量学中总是定义单位时间,但是照相并不是单位时间内发生的它记录的是总共的能量。

那么有哪些东西决定曝光呢?首先是光圈的大小,光圈的大小决定了进光的多少,而它实际上是一个仿生学的设计,仿照的是人的瞳孔。第二个就是快门,快门开放的时间,开放时间越长进光自然也就越多。还有一个是ISO感光度,它相当于是一个后期处理,简单的说就是接受到的能量我们将它放大多少倍,也就是乘上一个数。

上图表示不同因素对照片的影响,其中包括F数,它表示光圈的大小,F数越小代表光圈越大。还要快门时间,Shutter Speed,也就是快门开放多长时间。ISO数值越大,乘的数就越大。

(1)ISO

ISO我们之前说了,就是一个简单的后处理,在最后的图片上加一个增益多少倍,而且它是线性的,ISO200一定就是ISO100的两倍。

但是ISO虽然能提升画面的曝光度,但是会导致噪声放大的问题,如上图。从信号的角度理解,我们拍出的照片一定是有噪声的,但是最终我们ISO的操作只是简单的在最后结果上乘了一个数,信号虽然被放大了,但是噪声同样的也被放大了。所以ISO在一定范围内是可以用的,但是过大就会导致噪声问题。

(2)光圈大小—F stop

光圈也是我们说的影响曝光的重要因素之一,描述光圈的大小有一个专门的数,叫F数,或者F stop。它有两种写法,一个是FN,另一个是F/NN是我们关心的数。现在,我们可以简单的理解为N就是光圈直径的倒数。

(3)快门

快门时间除了会影响曝光度,还会影响一个现象叫做运动模糊。我们知道我们按下快门键,快门从关闭状态到打开状态是有一个过程的,它并不是瞬间打开的,而运动模糊的产生就是在快门从开始打开的时候物体开始运动,到快门完全打开的时候它已经运动了一段时间而产生的。因此,我们的曝光时间越长,运动模糊就会越严重,而如果曝光时间相同,那么运动的越快的物体越容易产生运动模糊。

快门时间还会造成一种Rolling shutter问题,如上图,我们发现飞机的螺旋桨扭曲了。这同样是快门时间导致的,快门打开的过程中,传感器的有些地方先接收到了光,有些低方后接收到了光,于是导致了这种现象。

通过调节影响曝光度的不同因素,我们可以取到很多不同参数而达到相同曝光度的参数。当然它们只是曝光度相同,至于景深,噪声,运动模糊仍具有各自参数的影响。

高速摄影和低速摄影

上图展示的是高速摄影低速摄影,高速摄影就是用极短的快门时间,但是通过调大光圈和ISO来达到正常曝光度但是拍摄下高速运动的效果。低速摄影,又叫延时摄影,相反的就是用很长的曝光时间和小光圈来拍摄,会产生拉丝的效果,实际上就是运动模糊,能拍摄出显现长时间积累的效果。

二、透镜

实际的透镜和透镜是非常复杂的,包括相机和手机,它们都是用一组各种各样的棱镜来实现的。还有一些透镜如上图,它一半是凸的一半是平的,也就是说它不可能把光聚到一块。我们这里讨论的是一种理想化的薄透镜

关于薄透镜,我们有几个性质,1.平行光穿过一定会被聚焦到一个点上,我们叫它焦点。2.焦点到透镜中心的距离就叫做焦距,同时光路可逆也就意味着一个聚光从焦点发散打到透镜会被变成许多平行光。3.我们认为这个薄透镜的焦距是可以随时更改,但实际上薄透镜的焦距是已经固定了的,但是我们这里仍然人为它可以更改,因为我们近似的是相机的棱镜组,相机的棱镜组可以改变组合形式来改变焦距。

除了上面的性质,还有一个性质就是,光线从透镜中心穿过不改变方向。同时我们定义物体到透镜的距离,物距z0,成像到透镜的距离zi,焦距f,就可以得出如上的规律等式关系。

 推导过程也很简单,如上图所示。

1.Defocus Blur—散焦模糊

Computing Circle of Confusion (CoC) Size—弥散圆

散焦模糊可以解释景深的问题,我们引入一个概念叫COC,一个物像在的位置我们管他叫Focal Plane,通过透镜后会聚焦到一点,但是如果我们的成像平面不在这个点上,比如在后面,那么光线并不会停止前进,而是继续前进而发散,会形成一个圆,这个圆就是弥散圆。弥散圆的大小也很好计算,同样根据相似三角形得出上面的式子。如果我们固定这个值,我们会发现,COC的大小和透镜的直径大小A有关。

 这也就告诉我们,大光圈会看到更模糊的图像,而小光圈的照片更清晰,如上图。

现在我们来明确一下光圈的F数的明确定义,它是焦距/光圈的直径,和我们之前说的光圈直径的倒数有关系,但是它和焦距也有关系。

明确了F数的定义,那么我们之前说COC大小和A有关,而N又等于f/A,那我们也可以得出另外一个计算COC大小的式子,也就是把A换成f/N。也就是说COCF数有一个反比关系

2.Ray Tracing Ideal Thin Lenses—薄透镜光线追踪

我们之前所说的Path Tracing实际上是默认了小孔成像的模型。而根据我们前面的介绍,我们知道光线是如何与透镜作用的,那我们自然可以模拟透镜去做渲染。首先我们先定义一些关于透镜的参数,比如成像平面的大小,棱镜的焦距,光圈的大小。然后规定透镜放到离场景中的某个平面的距离z0。然后根据透镜公式,我们自然知道像距zi。

我们现在成像平面上个找一点x',然后在透镜上找一点x'',根据公式我们就知道,这条经过透镜的光线会打到哪一个点x''',然后我们连线x''和x''',得到它的Radiance,最后记录在x'上就可以了。

3.Depth of Field—景深

我们之前说COC会导致模糊,也就是大光圈会导致大的COC,也就会更模糊,但是总有一些地方是不模糊的,模糊有一个范围,那么怎么定义这个范围呢?这就需要景深。      

景深 ,我们可以这么理解,就是在我们拍摄的物体前后有一段深度,它相应的在成像平面附近也会形成一片区域,这片区域的弥散圆足够小,小到和我们成像的像素差不多,也就是我们看上去是清晰的不模糊的,那么物体前后那段深度就叫做景深

 景深的图示和计算公式

参考:

GAMES101_Lecture_19 (ucsb.edu)

Lecture 19 Cameras, Lenses and Light Fields_哔哩哔哩_bilibili

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

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

相关文章

【量化课程】01_投资与量化投资

文章目录 1.1 什么是投资1.1.1 经济意义上的投资1.1.2 投资的分类1.1.3 金融投资1.1.4 个人投资者投资品种1.1.5 投资VS投机 1.2 股票投资的基本流程1.3 常见的股票投资分析流派1.3.1 投资者分析流派 1.4 什么是量化投资1.4.1 量化投资基本概念1.4.2 量化投资的优势1.4.3 量化投…

C多线程、锁、同步、信号量

文章目录 一 线程函数1.1 创建线程1.2 线程退出1.3 线程回收1.4 线程分离:1.5 其他线程函数1.5.1 线程取消1.5.2 线程ID比较 二 线程同步2.1 互斥锁2.1.1定义2.1.2 初始化2.1.3 销毁2.1.4 加锁 、 常试锁、解锁2.1.5 互斥锁使用 2.2 死锁2.3 如何避免死锁2.4 读写锁…

05_从0运行,重定位,初始化,中断再到定时器

总结 这边简单讲讲,代码上电后从0开始发生了什么,为什么要重定位把代码复制到sdram, bin文件前面几条跳转函数都跳转去哪 中断产生后发生什么 重定位问题 1.为什么需要重定位 把程序从一个位置移到另一个位置 叫重定位 可以只重定位部分段的数据 也可以把所有的都重定位到sd…

Linux运维之shell基础

一.流程控制 1.if判断 基本语法: if [ 条件判断式 ] then 程序 elif [ 条件判断式 ] then 程序 else 程序 fi注意事项: ①[ 条件判断式 ],中括号和条件判断式之间必须有空格②if 后要有空格 例如,现在写一个if.sh脚本文件 #…

echarts关于自定义饼图数据刷新和颜色渲染问题

在使用echarts的自定义饼图Customized Pie时,定义的动态数据会发生颜色无法渲染的问题,如下图所示: 该图表的颜色是根据itemStyle内的color属性而来,如下: itemStyle: {color: #4d90fe, /* 图表的颜色 */shadowBlur:…

【python知识】importlib包详解

importlib — The implementation of import — Python 3.11.3 documentation 目录 一、说明 二、 模块导入简介 2.1 最简单的 importlib用途 2.2 importlib 包的目的有三个 2.3 import_module() 和__import__() 三、高级模块使用 3.1 动态引入 3.2 模块引入检查 3…

SpringBoot整合Mybatis-Plus、Jwt实现登录token设置

Spring Boot整合Mybatis-plus实现登录常常需要使用JWT来生成用户的token并设置用户权限的拦截器。本文将为您介绍JWT的核心讲解、示例代码和使用规范,以及如何实现token的生成和拦截器的使用。 一、JWT的核心讲解 JWT(JSON Web Token)是一种…

JavaWeb——HTML和CSS

HTML和CSS定义 标记语言 :比如XML:可扩展的标记语言&#xff0c;标签可以自己定义&#xff0c;解析时需要按照定义的规则去解析。 学习目的:掌握常见标签和常见样式的使用 HTML 结构: 特点: 1.不区分大小写&#xff0c;不管是<html>还是<HTML>都是一样的作用 …

错题笔记第一篇

目录 1. strlen的用法2. case3. switch4. 二分查找 1. strlen的用法 正确答案 &#xff1a;C strlen计算的是字符串的长度&#xff0c;二字符串是以\0结尾&#xff0c;而咱们并没有存储\0&#xff0c;后序的空间是未知的&#xff0c;strlen找不到\0就会一直找&#xff0c;所以它…

如何使 VSCode 中 CMake Debug 的输出显示在 cmd 上而不是自带的 debug console

如何使 VSCode 中 CMake Debug 的输出显示在 cmd 上而不是自带的 debug console 首先需要明确的一点是从 VSCode 插件商店下载的 CMake 是默认打印输出的结果在 debug console 中的&#xff0c;就像下面这样&#xff1a; 可以看到&#xff0c;一个问题是在加载 dll 时候会频繁…

82. Python split方法-分割字符串

82. split方法-分割字符串 文章目录 82. split方法-分割字符串1. 什么是split( )函数2. split( )方法的语法格式如下&#xff1a;3. 实操练习4. 列表索引取值知识回顾5. 用split方法分解网址提取有效信息6. 从地址信息中拆分省、市、区信息 1. 什么是split( )函数 split[splɪ…

深度学习模型压缩与优化加速

1. 简介 深度学习&#xff08;Deep Learning&#xff09;因其计算复杂度或参数冗余&#xff0c;在一些场景和设备上限制了相应的模型部署&#xff0c;需要借助模型压缩、系统优化加速、异构计算等方法突破瓶颈&#xff0c;即分别在算法模型、计算图或算子优化以及硬件加速等层…

《LearnUE——基础指南:上篇—2》——GamePlay架构之Level和World

目录 听说世界是由多个Level组成的 1.2.1 引言 1.2.2 建造大陆&#xff08;ULevel&#xff09; 1.2.3构建世界&#xff08;World&#xff09; 1.2.4总结 听说世界是由多个Level组成的 1.2.1 引言 上小节谈到Actor和Component的关系&#xff0c;UE利用Actor的概念组成了世…

GitLab统计代码量

gitlab官方文档&#xff1a;https://docs.gitlab.com/ee/api/index.html 1、生成密钥 登录gitlab&#xff0c;编辑个人资料&#xff0c;设置访问令牌 2、获取当前用户所有可见的项目 接口地址 GET请求 http://gitlab访问地址/api/v4/projects?private_tokenxxx 返回参数 …

【文章学习系列之模型】Non-stationary Transformers

本章内容 文章概况总体结构主要模块Series Stationarization&#xff08;序列平稳化模块&#xff09;De-stationary Attention&#xff08;逆平稳化注意力模块&#xff09; 实验结果消融实验总结 文章概况 《Non-stationary Transformers:Exploring the Stationarity in Time …

Docker 存储

Docker 存储 docker 默认存储方式docker 持久化存储Volumes &#xff08;卷&#xff09;简介推荐使用情况 Bind mounts &#xff08;绑定挂载&#xff09;简介推荐使用情况 绑定挂载与卷注意点 docker 非持久化存储tmpfs mounts &#xff08;tmpfs 挂载&#xff09;简介推荐使用…

leetcode100——相同的树

文章目录 题目详情分析Java完整代码 题目详情 leetcode100 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例&#xff1a; 分析 主要想法…

vue3头像上传组件

用到了自定义组件v-model的双向绑定使用input的typefile这个原生html元素&#xff0c;通过监听change事件&#xff0c;获取到选择的文件&#xff08;注意&#xff0c;选择完文件值后&#xff0c;要把这个隐藏的input的typefile元素的value置为空&#xff0c;否则&#xff0c;下…

【关于C++中----异常】

文章目录 一、C语言中处理错误的方式二、C异常概念三、异常的使用3.1 异常的抛出和捕获3.2 异常的重新抛出3.3 异常安全3.4 异常规范 四、自定义异常体系五、C标准库的异常体系六、异常的优缺点 一、C语言中处理错误的方式 C语言中常见的错误类型包括&#xff1a;语法错误、逻…

访问 virtualbox中的mysql

在 mysql.user 中存储这用户可访问的的host地址 select user,host from user;修改访问权限 可以使用sql语句 use mysql; mysql>update user set host % where user root; flush privileges或者使用mysql的权限语句 use mysql; Grant all on *.* to root% identified b…