相机,棱镜和光场

news2024/10/6 12:26:41

一、成像方法

Imaging = Synthesis + Capture

1.Synthesis(图形学上)合成:比如之前学过的光线追踪或者光栅化

2.Capture(捕捉):把真实世界存在的东西捕捉成为照片

二、相机

1.小孔成像

  • 利用小孔成像的相机叫做针孔相机
  • 相机的各个部位
    • 快门(Shutter):控制光进入相机
    • 传感器(Sensor): 捕捉光并记录下来(记录 Irradiance)
  • 如果没有透镜,相机就拍不了了
    因为如果直接把感光元件放在一个人的面前,感光元件上任何一个点都可能收集到不同方向过来的光,而且作为传感器的它不会区分来自各个方向的光线,所以会糊
  • 针孔相机拍出的东西是没有深度可言的
    也就是任何地方都是锐利清楚的,都不会是虚化的
    因为透镜的存在所以会产生虚化,这个之后会提到
    并且我们之前做光线追踪的时候用的就是针孔相机的模型,所以我们也得不到景深的模糊效果
    所以如果我们可以模拟光线和透镜的作用,那么我们也可以作出景深的渲染效果

2.FOV(field of view 视场)

  视场说的是能看到多大的范围
h: 传感器高度(宽度)
f: 焦距,传感器与 透镜/小孔 的距离

同样大小的传感器,焦距越大,视场越窄
同样焦距,传感器越大,视场越宽
同样视场,焦距和传感器等比

-焦距(Focal Length)

    • 历史原因,通常以35mm的胶片为基准(eg.17mm为广角)
    • 手机对应的基准会小很多(等效为35mm)

-传感器大小(Sensor Size)

    • 区分传感器和胶片:传感器记录收到的Irradiance; 胶片是存成图像格式

3.Exposure 曝光

曝光记录的是总共的能量,是T×E
曝光时间T由快门控制
Irradiance(E)由光圈与焦距决定

影响照片亮度的三要素:光圈、快门、感光度

三者的关系:

光圈

光圈是个挡光的东西,有大小,由F数控制,光圈是一种仿生学的设计,仿照人的瞳孔放大缩小

  • F-Number (F-Stop):描述光圈的大小
    • 有两种写法:FN or F/N(这些不重要,重要的是N)
快门
  • 快门:控制光通过的时间(我们关心从关闭到打开的过程)
    • 两个现象

  更长的曝光时间/更快的物体运动速度 容易造成运动模糊
  类似于在时间上采样

快门开启需要时间,这个会造成高速运动物体的扭曲,比如下图飞机的螺旋桨

ISO gain(感光度)
  • ISO :可以理解为乘了一个数(就是一个简单的增倍eg.ISO200就是ISO100的两倍)
  • ISO做简单放大的同时也会放大噪声,所以当倍数过大的时候可能会造成图片上很多白点

进光量~F-Stop² / Shutter Speed
(F数理解为直径分之一,与面积是平方关系,所以为了曝光量平衡,与快门速度也是平方关系)
即使比例关系做对了
但是大光圈会有浅景深的效果,快门时间会导致运动模糊等效果,需要权衡

  • 应用:
    高速摄影,每秒极高帧率,快门时间受限需要用更大光圈或者高ISO
  • 延时摄影,快门时间很长,光圈变小
  • 萤火虫长时间的飞构成了图片

三、透镜

真实的透镜并不那么理想,有些透镜无法将光线聚于一点 出现 Aberrations

理想化的透镜:

所有进入透镜的平行光线都通过透镜的焦点
穿过焦点的所有光线在通过透镜后将是平行的
焦距可以任意改变(实际上用透镜组改变焦距)

1 薄透镜方程

定义:zo(物距) zi(像距)f(焦距)

1/f =1/zi + 1/zo

推导过程:

2.Defocus Blur(焦散模糊) ——景深的原因

为了解释景深,我们引入Circle of Confusion (CoC)
左边有一个Focal Plane,其上的东西会成像到Sensor Plane上
如果Object不在Focal Plane上,如下图可能会聚焦在Image上,然后光线继续传播到Sensor Plane上,这时候在Sensor Plane上形成的圆就是CoC

CoC告诉我们看到的东西模糊不模糊,取决于光圈的大小,大光圈容易有模糊的效果

因为说CoC大小与光圈成正比,所以我们回头看光圈
之前我们说F数它是直径分之一,其实不对
F数的明确定义是焦距除以直径

一些例子:

3.在光线追踪中使用薄透镜近似

(略)

4.景深 Depth of Field

  • 用大/小 光圈会影响模糊的范围
  • 景深就是指实际场景中有一段深度,经过透镜后会在成像屏幕附近形成一段区域,我们认为这段区域的CoC都是足够小的。(可以理解为CoC和pixel一样小时,形成的image就是锐利的)
    • 所谓的景深的这一段就是对应CoC足够小的一段也就是清晰的一段
  • Depth of Field(FYI)
  • 考虑景深的最远处和最近处,推一下公式,把这些深度和焦距联系起来
    也就是某个位置穿过透镜会到某个地方
    • 把DF DN DS dF dS dN 联系起来(深度和焦距联系起来)
    • DOF = DF - DN

四.光场

Light Field / Lumigraph 两个词指同一东西,属于历史遗留问题,是由两个组独立几乎同时发现的同样东西,叫法不一样
要说光场,我们就从看到的世界是什么说起

我们看到这个三维世界,在我们眼睛里类似就是一幅图
那如果我们直接看到一幅图,这幅图完全记录了之前看到的光线信息,我们也能得到同样的结果
这也是类似虚拟现实的原理,用一个平面的成像设备,让人误以为在三维环境中

1.全光函数 The Plenoptic Function(描述我们可以看到的世界)

  • 从简单说:站在一个场景,位置固定,我们往四面八方看,定义任意一个方向

  • 改进:引入波长(颜色) → 彩色

  • 拓展:时间t → 电影

  • 再拓展:位置不固定,在三维空间内任意移动 VX VY VZ → 全系电影

  • 再改进:把函数理解为在任意位置,往任意方向看,在任意时间看到不同的颜色

→ 这就是我们看的世界

  • 可以从全光函数提取一些信息出来,用来表示更复杂的光

2.采样全光函数 Sampling Plenoptic Function

光场其实就是全光函数的小部分,在定义光场前我们先定义光线,定义一条光线需要的是二维的位置和二维的方向(在下面会阐述)

要记录一个物体向四周展示的样子,只需要记录包围盒上表面各个点往各个方向发射的光线的信息
这也就是光场记录的东西
在物体表面任何一个位置往任何一个方向去的光线的强度
怎么理解二维的位置与二维的方向呢?
物体的表面是二维的,方向也是二维的,所以用这个四个信息当变量的函数就是光场

我们把物体变成光场,记录下光场后也就相当于记录下了物体的观测

我们还可以理解成我们取一个平面,平面右边是一个物体,它的光会穿过这个平面来到左边
我们不需要知道右边有什么,我们只需要知道对于平面上任意一个点的任意一个方向会发出什么

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

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

相关文章

做测试还是测试开发,选职业要慎重!

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程,一周学完让你面试通过率提高90%!(自动化测试) 突然发现好像挺多人想投测开和测试的,很多人面试的时候也会被问到这几个职位的区别,然后有测…

前端面试拼图-前端基础(二)

摘要:最近,看了下慕课2周刷完n道面试题,记录下... 1. offsetHeight scrollHeight clientHeight 区别 计算规则: offsetHeight offsetWidth : border padding content clientHeight clientWidth: padding content scrollHeight…

CIP通讯介绍(欧姆龙PLC)

什么是CIP CIP通信是Common Industrial Protocl(CIP)的简称,它是一个点到点的面向对象协议,能够实现工业器件(传感器,执行器)之间的连接,和高等级的控制器之间的连接。目前,有3种网络DeviceNet…

图像剪辑|Linux|ImageMagick的初步使用--素描,毛玻璃等特效

前言: ImageMagick在图像剪辑领域的地位基本等同于FFmpeg,和FFmpeg基本一样,在Linux下使用此工具的原因是该工具可以使用shell脚本批量剪辑,在Windows下就会比较麻烦一些了 那么,本文主要是记录一下ImageMagick的一些…

【python】python用户管理系统[简易版](源码+报告)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

VScode 单步断点调试Nodejs方法总结

目录 方法一 方法二 方法三 方法一 使用vscode开发nodejs程序,能够启动单步调试模式,在指定代码处添加断点,像chrome、firefox浏览器上一样进行JavaScript的调试。 新建一个nodejs的工程,编写代码后,配置代码调试的步骤: 1、切换到代码调试界面 2、界面提示,新建一…

rust多个mod文件引用和文件夹mod使用注意事项

如果mod文件都在同一级目录,则直接使用就可以,因为rust文件都是一个隐藏的mod,但是如果mod文件在另外一个目录下面,就需要在目录下面声明一个mod.rs文件,这样才能将那个目录识别为一个mod,可以在mod.rs里面…

数据结构学习(三)链表

链表 1. 概念 反转链表 给出3个指针,一个cur,用于遍历链表中的每个节点,一个prev,用于保存cur指向的节点的上一个节点地址,还有一个after,用于保存cur指向的节点的下一个节点地址,链表操作遵循…

linux 交叉编译curl(+openssl)

一、交叉编译openssl 参考博客:点击跳转 二、交叉编译curl 1、源码下载 地址:点击跳转 2、配置 CPPFLAGS"-I/home/gui/gui/openssl/build_arm/include" LDFLAGS"-L/home/gui/gui/openssl/build_arm/lib" LIBS"-ldl" \ …

webpack基础配置及使用

webpack是什么 是一个现代 JavaScript 应用程序的静态模块打包器。当webpack 处理应用程序时,它会递归地构建一个依赖关系图 ,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle 。主要有 五个核心概念&#xff1a…

数据服务安全的重要性

数据服务安全在当今信息化社会显得尤为重要。随着大数据、云计算、人工智能等技术的飞速发展,数据已经成为企业和组织的核心资产,数据服务安全也面临着前所未有的挑战。本文将从数据服务安全的重要性、常见威胁、防护策略以及未来发展趋势等方面进行探讨…

【学位论文】上海交通大学 研究生学位论文 本地保存

上海交大研究生学位论文网:http://thesis.lib.sjtu.edu.cn/ (只能校内访问或SJTU VPN访问) 如果希望下载论文,需要参考:https://github.com/olixu/SJTU_Thesis_Crawler 安装过程 安装过程的几个坑: &a…

day04-Maven-SpringBootWeb入门

文章目录 01. Maven1.1 课程安排1.2 什么是Maven1.3 Maven的作用1.4 Maven模型1.5 Maven仓库1.6 Maven安装1.6.1 下载1.6.2 安装步骤 2 IDEA集成Maven2.1 配置Maven环境2.1.1 当前工程设置2.1.2 全局设置 2.2 创建Maven项目2.3 POM配置详解2.4 Maven坐标详解2.5 导入Maven项目 …

带使能控制的锂电池充放电解决方案

一、产品概述 TP4594R 是一款集成线性充电管理、同步升压转换、电池电量指示和多种保护功能的单芯片电源管理 SOC,为锂电池的充放电提供完整的单芯片电源解决方案。 TP4594R 内部集成了线性充电管理模块、同步升压放电管理模块、电量检测与 LED 指示模块、保护模块…

失败与坚持

失败 很多计划和目标由于个人能力等问题,都失败了。 如果将最近十年规划的目标算一个总评的话,接近97%的目标都没有实现。 这主要原因就是脱离了自身实际制定了一些超出自身能力所及的目标,当然也有一些客观因素。 坚持 有擅长做的事情&am…

Redis集群(主从)

1.主从集群 集群结构: 一.单机安装redis 1.上传压缩包并解压,编译 tar -xzf redis-6.2.4.tar.gz cd redis-6.2.4 make && make install 2.修改redis.config的配置并启动redis # 绑定地址,默认是127.0.0.1,会导致只能在本地访问。…

技术面没过,居然是因为没用过Pytest框架

01 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 简单灵活,容易上手,文档丰富; 支持参数化,可以细粒度地控制要测试的测试用例; 能够支持简单的单元测试和复杂的…

什么是网络安全、信息安全、计算机安全,有何区别?

这三个概念都存在,一般人可能会混为一谈。 究竟它们之间是什么关系?并列?交叉? 可能从广义上来说它们都可以用来表示安全security这样一个笼统的概念。 但如果从狭义上理解,它们应该是有区别的,区别在哪呢&…

HFSS仿真双频微带天线学习笔记

HFSS仿真双频微带天线 文章目录 HFSS仿真双频微带天线1、 求解器设置2、 建模3、 激励方式设置4、 边界条件设置5、 扫频设置6、 设计检查,仿真分析7、 数据后处理 这里重点关注HFSS软件的操作,关于理论知识将在后面的文章中进行更新。 设计要求&#xf…

Golang pprof 分析程序的使用内存和执行时间

一、分析程序执行的内存情况 package mainimport ("os""runtime/pprof" )func main() {// ... 你的程序逻辑 ...// 将 HeapProfile 写入文件f, err : os.Create("heap.prof")if err ! nil {panic(err)}defer f.Close()pprof.WriteHeapProfile(f…