【GAMES101笔记速查——Lecture 19 Cameras,Lenses and Light Fields】
本章节内容:相机、棱镜、光场
计算机图形学的两种成像方法:
1.合成方法:光栅化、光线追踪(展示出现实没有的东西)
2.捕捉方法:相机(捕捉现实已有的东西)
目录
1 相机
1.1 针孔相机(Pinhole Image Formation)
1.2 视场(FOV)
(1)FOV一般定义
(2)视场FOV越窄,我们看到的东西会越远。
(3)焦距不变的情况下,传感器越大,视场FOV越大;传感器越小,视场FOV越小。
(4)手机如何做到拥有很大的FOV?焦距变小(右图所示)
1.3 曝光(Exposure)
1.2.1 有哪些因素在影响曝光(图片的亮度):光圈、快门、ISO
1.2.2 光圈、快门、ISO的协调关系
1.2.3 光圈:F数
1.2.4 快门
(1)快门速度的影响:运动模糊
(2)快门与光圈
(3)快门时间的应用
2. 镜头(Thin Lens Approximation)
2.1 理想薄透镜
2.1.1 薄透镜公式
2.1.2 推导
2.2 焦散(Defocus Blur)
2.2.1 弥散圆的大小(Circle of Confusion (CoC) Size)
2.2.2 光圈的明确定义
2.3 理想薄透镜渲染(Ray Tracing Ideal Thin Lenses)
2.3.1 薄透镜渲染步骤
2.4 景深(Depth of Field)
2.4.1 计算过程
2.4.2 演示网站
1 相机
相机里面发生了什么?
最简单的针孔相机:小孔成像
快门:控制光在多少分之一秒内进入相机
传感器:捕捉光,记录irradiance(来自各个方向的所有光)
为什么相机没有针孔或者棱镜不能成像?
如果这么操作,相当于直接把传感器放到人的面前,传感器上的任何一个点都会收集来自各个方向的信息,这个点不能区分来自各个方向的能量,此时它收集的是irradiance,不是radiance,结果就是所有东西都是糊的。(但也有人在研究用传感器直接区分不同方向的信息)
1.1 针孔相机(Pinhole Image Formation)
针孔相机成像
公元前,人们就已经发现了小孔成像的原理。
如果我们能用纸做一个小孔,那么我们可以拍出效果不错的场景。
针孔相机拍出来的东西没有深度可言,也就是说它拍摄到的所有东西都是清晰的。光线追踪也是采用的这种针孔摄像机模型。
(虚化现象是由于棱镜的存在,如果可以编程模拟出光线与棱镜的作用,那么就可以得到带有景深的渲染效果)。
1.2 视场(FOV)
焦距对视场的影响
有一个简单的相似三角形关系
虽然对于小孔不存在焦距的概念,但是我们定义“小孔和传感器之间的距离”为焦距f
那么此时就可以计算tan角度,并用它的大小来定义FOV
目前看起来,FOV和传感器的大小、焦距都有关系。
(1)FOV一般定义
所以人们规定:在定义FOV的时候,传感器大小默认固定为35mm,然后用对应的焦距来定义。
(2)视场FOV越窄,我们看到的东西会越远。
(3)焦距不变的情况下,传感器越大,视场FOV越大;传感器越小,视场FOV越小。
之前我们混淆使用了传感器和胶片的感念,实际上,传感器(sensor)和胶片(film)是不同的东西,对于渲染来说,传感器记录irradiance多大,而最后的film决定了最后存储为什么样的图片格式。
(4)手机如何做到拥有很大的FOV?焦距变小(右图所示)
1.3 曝光(Exposure)
曝光 = 曝光时间 * irradiance
辐射度量学考虑单位时间,而照相考虑的是整体时间
曝光时间:由快门控制
单位面积上的能量irradiance与什么有关:1.落到传感器上的光能 2.光圈大小
1.2.1 有哪些因素在影响曝光(图片的亮度):光圈、快门、ISO
光圈大小(瞳孔):由f-stop来控制光圈大小。光圈是仿照人的瞳孔设计的,暗处瞳孔放大,明亮处瞳孔缩小。
快门速度(眼皮):快门越快,快门开放时间越短,进入的光越少。
IOS增益(视觉细胞):IOS可以理解为一种后期处理,给sensor最后的结果乘上某个数。这个乘法可以发生在硬件上(传感器调节灵敏度),也可以后期加(已经生成了照片然后再处理)。
1.2.2 光圈、快门、ISO的协调关系
不同的光圈大小:F数越大,光圈越小
不同的快门速度:通常用分数表示,1/1000就是快门开放1ms
不同的ISO:增益倍数
改变光圈大小,光圈大时,照片变虚。
ISO越大,照片越noisy,大家普遍不愿意调大这个数:对整个信号直接乘以一个很大的数,会放大信号,但同时,也会放大噪声。
控制其他变量,通过调节ISO来使曝光一致,得到的结果如下 :
1.2.3 光圈:F数
F数:两种写法FN或者F/N,N就是f数
F数的非正式理解:就是光圈的直径分之一。
1.2.4 快门
机械快门:打开是有一个过程的。
(1)快门速度的影响:运动模糊
1.运动模糊
在快门打开的一段时间内,高速运动的物体发生了一段位移,这个过程被传感器都记录下来并平均,产生了运动模糊现象。用更长的快门时间会容易发生运动模糊。
2.运动模糊不一定是坏事
比如,为了体现赛车等一些物体的速度,运动模糊可以展现出这种动态。
3.拍视频
在不同时间对物体位置进行采样,采样是会有走样现象的,有运动模糊在一定程度上起到了反走样的效果。
4.Rolling shutter:超高速物体的扭曲:图片的不同位置记录的是不同时间进来的光。
(2)快门与光圈
下面的F数和快门速度的组合,基本可以实现同样的曝光。
如何理解?
直径从4到8,面积从1/16变到1/64,相当于缩小为原来的1/4。那么为了维持曝光不变,快门速度就要变成原来的4倍,也就是从1/60变到了1/15。
大光圈会造成浅景深
快门速度影响运动模糊
一般来说,需要在景深和运动模糊之间取平衡。
(3)快门时间的应用
1.高速摄影:快门时间更短,光圈更大, ISO更大。
2.延时摄影:快门时间很长、光圈更小,ISO更小。(俗称拉丝)
2. 镜头(Thin Lens Approximation)
目前的手机一般用透镜组
实际的透镜可能很复杂,光可能聚不到一点。
2.1 理想薄透镜
我们研究比较简单理想的情况。
1.平行于棱镜的光,经过透镜后可以集中到一个点
2.光路有可逆性,如果一个光线穿过焦点,那么会被透镜折射成一束平行光
3.薄透镜可以任意改变焦距(现代相机用透镜组的好处:最终的结果就好像是可以改变透镜的焦距)
2.1.1 薄透镜公式
过棱镜中心的光不改变方向
Z0:物距
Zi:相距
物理规律:见公式,这个公式反应了焦距、物距、相距,三者之间的关系。
即:如果要改变物距,相距一定会跟着改。
2.1.2 推导
蓝色的一对相似三角形
粉色的一对相似三角形
这个公式反应了焦距、物距、相距,三者之间的关系。
演示软件:
2.2 焦散(Defocus Blur)
2.2.1 弥散圆的大小(Circle of Confusion (CoC) Size)
还是用相似三角形解
把A移动到等式右边,可以发现弥散圆的大小和棱镜的大小(F数)成正比
2.2.2 光圈的明确定义
F数:焦距f/光圈直径A
F数计算举例见图
2.3 理想薄透镜渲染(Ray Tracing Ideal Thin Lenses)
一般我们都是从相机往任何一个像素中心去连,这样默认是一个小孔成像的模型,所有入镜的物体成像都是清晰的。
我们也完全可以模拟薄棱镜,并且渲染出这样的图片
2.3.1 薄透镜渲染步骤
1.确定传感器大小
2.确定透镜本身属性:焦距、光圈大小
3.确定透镜与场景目标的距离z0.
4.根据透镜公式,可以算出相距zi(传感器sensor和棱镜的距离)
5.在成像平面上选择一个点x’。
6.在透镜上选择一个点x’’。
7.连接这两个点,组成的光线会穿过透镜打到物体平面上,并且打到的点x’’’是确定的,可以计算的。
8.计算x’’到x’’’的radiance即可。
2.4 景深(Depth of Field)
景深:实际场景中的一段深度,它经过透镜后在成像平面附近的小区域内(CoC足够小)。
2.4.1 计算过程
2.4.2 演示网站
光圈越小,景深越大,看到的东西更多清晰(越接近小孔成像)
相关文章:

【GAMES101笔记速查——Lecture 19 Cameras,Lenses and Light Fields】
本章节内容:相机、棱镜、光场 计算机图形学的两种成像方法: 1.合成方法:光栅化、光线追踪(展示出现实没有的东西) 2.捕捉方法:相机(捕捉现实已有的东西) 目录 1 相机 1.1 针孔相…...
虚拟机上搭建达梦DSC简略步骤
vmware 17 centos 7.6 达梦 dm8_20240920_x86_rh7_64.iso cd /d C:\Program Files (x86)\VMware\VMware Workstation\.\vmware-vdiskmanager.exe -c -s 100MB -a lsilogic -t 2 "F:\vm\dmdsc\sharedisk\share-dcr.vmdk" .\vmware-vdiskmanager.exe -c -s 100MB -a l…...
Python和R荧光分光光度法
🌵Python片段 Python在处理荧光分光光度法数据方面非常强大,得益于其丰富的数据处理和可视化库,可以轻松实现从数据读取到分析的完整流程。荧光分光光度法用于测量物质在激发光照射下发出的荧光强度,常用于定量分析和特性研究。 …...

电子学习中的关键游戏化元素
游戏化彻底改变了电子学习领域,提供了一种使学习具有吸引力、互动性和有效性的方法。通过将类似游戏的功能集成到教育平台中,教育工作者可以增强动力,提高知识记忆,并创造动态的学习体验。游戏化的关键要素为设计与学习者产生共鸣…...
算法日记 33 day 动态规划(打家劫舍,股票买卖)
今天来看看动态规划的打家劫舍和买卖股票的问题。 上题目!!!! 题目:打家劫舍 198. 打家劫舍 - 力扣(LeetCode) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金…...

JavaScript的let、var、const
这张图片主要介绍了JavaScript中的三种变量声明方式:let、var和const。 1. let 含义:let是现在实际开发中常用的变量声明方式。特点: 块级作用域:let声明的变量只在其所在的块级作用域内有效。例如:{let x 10; } co…...
C语言-数学基础问题
一.奇数、偶数问题 1.从键盘上输入一个整数,判断并输出它是奇数还是偶数。 //从键盘上输入一个整数,判断并输出它是奇数还是偶数。 main() {int i;printf("输入一个整数:\n");scanf("%d",&i);if(i%20)printf("它是偶数\n…...
解决单元测试时找不到类名
场景: springboot单元测试mockito对mapper进行mock时: tk.mybatis.mapper.mapperexception: 无法获取实体类 XX.xx 对应的表名 分析: 使用了一个方法:Example examplenew Example(User.class); 进入源码后发现Entityhelper没…...

从零开始-VitePress 构建个人博客上传GitHub自动构建访问
从零开始-VitePress 构建个人博客上传GitHub自动构建访问 序言 VitePress 官网:VitePress 中文版 1. 什么是 VitePress VitePress 是一个静态站点生成器 (SSG),专为构建快速、以内容为中心的站点而设计。简而言之,VitePress 获取用 Markdown…...

【案例学习】如何使用Minitab实现包装过程的自动化和改进
Masimo 是一家全球性的医疗技术公司,致力于开发和生产各种行业领先的监控技术,包括创新的测量、传感器和患者监护仪。在 Masimo Hospital Automation 平台的助力下,Masimo 的连接、自动化、远程医疗和远程监控解决方案正在改善医院内外的护理…...

【ArcGISPro】使用AI提取要素-土地分类(sentinel2)
Sentinel2数据处理 【ArcGISPro】Sentinel-2数据处理-CSDN博客 土地覆盖类型分类 处理结果...

深度解析:Nginx模块架构与工作机制的奥秘
文章目录 前言Nginx是什么?Ngnix特点: 一、Nginx模块与工作原理1.Nginx的模块1.1 Nginx模块常规的HTTP请求和响应的流程图:1.2 Nginx的模块从结构上分为如下三类:1.3 Nginx的模块从功能上分为如下三类: 2.Nginx的进程模型2.1 Nginx进程结构2.2 nginx进程…...

分布式kettle调度平台v6.4.0新功能介绍
介绍 Kettle(也称为Pentaho Data Integration)是一款开源的ETL(Extract, Transform, Load)工具,由Pentaho(现为Hitachi Vantara)开发和维护。它提供了一套强大的数据集成和转换功能,…...

企业数字化转型现状
国家数字经济战略背景 2018年以来,国家政府不断出台政策规范我国企业数字化治理市场。2018年9月颁布《关于发展数字经济稳定并扩大就业的指导意见》,支持建设一批数字经济创新创业孵化机构。积极推进供应链创新与应用,支持构建以企业为主导。…...

极客大挑战2024wp
极客大挑战2024wp web 和misc 都没咋做出来,全靠pwn✌带飞 排名 密码学和re没做出几个,就不发了 web ez_pop 源代码 <?php Class SYC{public $starven;public function __call($name, $arguments){if(preg_match(/%|iconv|UCS|UTF|rot|quoted…...

将django+vue项目发布部署到服务器
1.部署django后端服务 部署架构 1.1 下载依赖插件 pip3.8 freeze > requirements.txt1.2 安装依赖插件 pip3 install -r requirements.txt1.3 安装mysql数据库 apt install mysql-server初始化数据库 CREATE USER admin% IDENTIFIED WITH mysql_native_password BY 123…...

函数类型注释和Union联合类型注释
函数类型注释格式(调用时提示输入参数的类型): )def 函数名(形参名:类型,形参名:类型)->函数返回值类型: 函数体 Union联合类型注释(可注释多种类型混合的变量)格式: #先导入模块 from typing import…...

python画图|无坐标轴自由划线操作fig.add_artist(lines.Line2D()函数
【1】引言 新发现了一种自由划线操作函数,和大家共享。 【2】官网教程 点击下述代码,直达官网: https://matplotlib.org/stable/gallery/misc/fig_x.html#sphx-glr-gallery-misc-fig-x-py 官网代码非常简洁,我进行了解读。 …...

MacOS系统上Jmeter 录制脚本遇到的证书坑位
一、JMeter介绍与安装 1,下载及安装 jmeter官网地址 二、录制百度链接https请求时,需要导入jmeter相关证书到macos系统的更目录中. 导入方式,直接拖入mac的系统中,始终新人就可以; 三、jmeter 创建相关的录制组件…...

网络层协议IP
对于网络层我们直接通过IP协议来了解其内容 一.IP协议 首先我们先来了解几个概念: 主机:配有IP地址,但是不进行路由控制的设备 路由器:配有IP地址,同时进行路由控制的设备 节点:主机和路由器的统称 所以现在…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...