相机,棱镜和光场
一、成像方法
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
光场其实就是全光函数的小部分,在定义光场前我们先定义光线,定义一条光线需要的是二维的位置和二维的方向(在下面会阐述)
要记录一个物体向四周展示的样子,只需要记录包围盒上表面各个点往各个方向发射的光线的信息
这也就是光场记录的东西
在物体表面任何一个位置往任何一个方向去的光线的强度
怎么理解二维的位置与二维的方向呢?
物体的表面是二维的,方向也是二维的,所以用这个四个信息当变量的函数就是光场
我们把物体变成光场,记录下光场后也就相当于记录下了物体的观测
我们还可以理解成我们取一个平面,平面右边是一个物体,它的光会穿过这个平面来到左边
我们不需要知道右边有什么,我们只需要知道对于平面上任意一个点的任意一个方向会发出什么
相关文章:

相机,棱镜和光场
一、成像方法 Imaging Synthesis Capture 1.Synthesis(图形学上)合成:比如之前学过的光线追踪或者光栅化 2.Capture(捕捉):把真实世界存在的东西捕捉成为照片 二、相机 1.小孔成像 利用小孔成像的相…...

【图像版权】论文阅读:CRMW 图像隐写术+压缩算法
不可见水印 前言背景介绍ai大模型水印生成产物不可见水印CRMW 在保护深度神经网络模型知识产权方面与现有防御机制有何不同?使用图像隐写术和压缩算法为神经网络模型生成水印数据集有哪些优势?特征一致性训练如何发挥作用,将水印数据集嵌入到…...
代码随想录算法训练营第31天—贪心算法05 | ● 435. 无重叠区间 ● *763.划分字母区间 ● *56. 合并区间
435. 无重叠区间 https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0%E5%8C%BA%E9%97%B4.html 考点 贪心算法重叠区间 我的思路 先按照区间左坐标进行排序,方便后续处理进行for循环,循环范围是0到倒数第二个元素如果当前区间和下一区间重叠…...
2024《》
vue-cli到哪做了那些事 vue-cli是vue.js的脚手架,用于自动生成vue.jswebpack的项目模板,快速搭建Vue.js项目。 vue cli内置了webpack的一些功能,这些是用webpack打包时需要我们自己配置的,例如: 1.ES6代码转换成ES5代…...

【Web】Java反序列化之从CC3看TemplatesImpl的利用
目录 关于TemplatesImpl 关于TemplatesImpl加载字节码 CC3链分析 纯CC3demo 根据CC3改CC6 关于TemplatesImpl TemplatesImpl 是 Java 中的一个类,通常与 Java 反序列化漏洞相关的攻击中被使用。该类位于 Java 标准库中的 javax.xml.transform 包下。 在 Java…...
【Elasticsearch索引】Recovery恢复索引
文章目录 索引恢复恢复列表获取恢复信息响应详细信息正在进行的恢复响应解析高级设置 本地分片恢复事务日志 索引恢复 索引恢复提供了对正在进行的索引分片恢复的洞察。恢复状态可以针对特定的索引报告,也可以在集群范围内报告。 恢复列表 recovery命令是索引分片…...

如何在 Linux 中快速清空文件而不删除它们?
在Linux系统中,清空文件而不删除它们是一种常见的需求,特别是在需要保留文件结构或权限的情况下。本文将详细介绍如何在Linux环境中快速清空文件内容的多种方法,以及每种方法的优缺点。清空文件通常涉及到文件内容的擦除,但并不涉…...
SpringBoot 配置文件${variable:default}用法
${variable:default}用法,variable是变量名,default是默认值。如果配置文件中未指定该变量的值,则会使用默认值来替代。 解释代码: ip: ${NACOS_IP:nacos.ip} 该yaml函数是一个配置项,用来指定Nacos服务器的IP地…...

CUDA学习笔记02:测试程序hello world
参考资料 Win10下在VS2019中配置使用CUDA进行加速的C项目 (配置.h文件,.dll以及.lib文件等)_vs2019 cuda-CSDN博客 配置流程 1. 新建一个一般的项目 2. 项目建好后,在项目里添加.cu测试文件 测试的.cu文件命名为cuda_utils.cu&…...

2023年第十四届蓝桥杯大赛软件类省赛C/C++大学A组真题
2023年第十四届蓝桥杯大赛软件类省赛C/C大学A组部分真题和题解分享 文章目录 蓝桥杯2023年第十四届省赛真题-平方差思路题解 蓝桥杯2023年第十四届省赛真题-更小的数思路题解 蓝桥杯2023年第十四届省赛真题-颜色平衡树思路题解 蓝桥杯2023年第十四届省赛真题-买瓜思路题解 蓝桥…...

项目部署发布
目录 上传数据库 修改代码中的数据源配置 修改配置文件中的日志级别和日志目录 打包程序 编辑编辑 上传程序 查看进程是否在运行 以及端口 云服务器开放端口(项目所需要的端口) 上传数据库 通过xshell控制服务器 创建目录 mkdir bit_forum 然后进入该目录 查看路…...

MATLAB环境下基于离散小波变换的心电信号伪影去除及PQRST波检测
可穿戴个人健康监护系统被广泛认为是下一代健康监护技术的核心解决方案。监护设备不断地感知、获取、分析和存储大量人体在日常活动中的生理数据,为人体的健康状况提供必要的、准确的、集成的和长期的评估和反馈。在心电监测领域,可穿戴传感器具有以下应…...

SwiftUI 在 App 中弹出全局消息横幅(下)
功能需求 在 SwiftUI 开发的 App 界面中,有时我们需要在全局层面向用户展示一些消息: 如上图所示:我们弹出的全局消息横幅位于所有视图之上,这意味这它不会被任何东西所遮挡;而且用户可以点击该横幅关闭它。这是怎么做到的呢? 在本篇博文中,您将学到以下内容 功能需求…...

2023年06月CCF-GESP编程能力等级认证Scratch图形化编程三级真题解析
本文收录于专栏《Scratch等级认证CCF-GESP真题解析》,专栏总目录・点这里 一、单选题(共15题,共30分) 第1题 高级语言编写的程序需要经过以下( )操作,可以生成在计算机上运行的可执行代码。 A:编辑 B:保存 C:调试 D:编译 答案:D 第2题 小球角色,执行以下程序…...
升级openssl
openssl版本一键升级(需要修改tar包名称和路径) --- - name: Install OpenSSLhosts: openssltasks:- name: Copy OpenSSL tar.gz to /tmpcopy:src: /root/shl/soft/openssl-1.1.1v.tar.gzdest: /tmp # remote_src: yes # 如果源文件在控制主机上…...

软考基础知识2
1.DMA控制方式:直接内存存取。数据在内存与I/O设备间直接成块传送,不需要CPU的任何干涉,由DMA硬件直接执行完成。 例题: 2.程序计数器总是存下一个指令的地址。 例题: 3.可靠度的计算: 例题:…...
Python基本数据类型介绍
Python 解释 Python是一种高级编程语言,以其简洁、易读和易用而闻名。它是一种通用的、解释型的编程语言,适用于广泛的应用领域,包括软件开发、数据分析、人工智能等。python是一种解释型,面向对象、动态数据类型的高级程序设计…...
边缘计算网关:连接物理世界与数字世界的桥梁-天拓四方
边缘计算网关是一种硬件设备,通常部署在网络边缘,即物联网设备的接入点。它具备数据采集、处理、存储和传输等功能,能够实现对物联网设备的实时监控和控制。边缘计算网关将原本需要在云端处理的数据在本地进行计算和分析,从而降低…...
NTP网络校时服务器(GPS北斗卫星校时系统)应用场景
NTP网络校时服务器(GPS北斗卫星校时系统)应用场景 NTP网络校时服务器(GPS北斗卫星校时系统)应用场景 随着大数据、云计算时代的到来,各行业信息化建设的不断提升,信息化下的各个系统不再单独处理各自业务,而是趋于协同工作,因此,各…...

Intel 芯片 Mac 如何重新安装系统
使用可引导安装器重新安装(可用于安装非最新的 Mac OS,系统降级,需要清除所有数据,过程确保连接上网络,虽然这种方式不会下载 Mac OS,但是需要下载固件等信息) 插入制作好的可引导安装器&#x…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
scikit-learn机器学习
# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...