相机、镜头、光场

回顾之前,计算机图形学有两种成像的方法:

  • 光栅化成像
  • 光线追踪成像

这两种成像方法都是Synthesis合成的,不是自然界中存在的,下面再介绍一种成像方式Capture方式

Imaging = Synthesis + Capture

1.相机

在这里插入图片描述

[1]Pinholes Camera针孔相机
  • 利用小孔成像原理制作的相机叫针孔相机。针孔相机无法拍出东西的深度,任何地方都是清楚的,不会有虚化
  • 之前做光线追踪基于针孔相机模型,所以得不到因为深度不同产生的模糊效果
  • 因此在渲染过程中如果模拟光线与棱镜透镜的作用,可以得到模糊虚化的效果
  • 所以后来的相机一般采用带棱镜的

在这里插入图片描述

[2]快门与传感器
  • Shutter快门控制光进入相机
  • sensor传感器在曝光过程中记录Irradiance辐照度
  • 如果一个相机没有棱镜或针孔,感光元件上任何一个点都可能收集来自不同方向的光,且传感器不会区分,因此得不到真实的照片

在这里插入图片描述

[3]Field of View (FOV)视场

视场:能看到的范围

Focal Length焦距对视场的影响

对于一个固定的传感器尺寸,减少焦距增加视场
在这里插入图片描述

FOV=2arctan(h2f) FOV=2arctan(\frac{h}{2f}) FOV=2arctan(2fh)
也就是说视场与传感器大小、焦距有关,那么在定义视场时通常会不容易,那么在市场中人们通常就将传感器大小规定为

35mm胶片(36x24毫米),这样就方便从焦距的大小来旋转视场的大小:

  • 17mm is wide angle 104° (广角)
  • 50mm is a “normal” lens 47°
  • 200mm is telephoto lens 12° (远摄镜头)

在这里插入图片描述

传感器对视场的影响

在这里插入图片描述

在较小的传感器上保持FOV

为了保持视场,按照传感器的宽度/高度的比例减小镜头的焦距

在这里插入图片描述

[4]Exposure曝光
  • H = T x E
  • Exposure = time x irradiance
  • Exposure time (T)
    • Controlled by shutter(快门),控制有多长时间光可以持续进来
  • Irradiance (E)
    • Power of light falling on a unit area of sensor
    • Controlled by lens aperture(镜头光圈) and focal length(焦距)
摄影中的暴光控制
  • Aperture size (光圈大小)

    • Change the f-stop by opening / closing the aperture (if camera has iris control)类似于瞳孔缩放原理
  • Shutter speed快门速度

    • 改变传感器像素集成光的持续时间
  • ISO gain (感光度)

    • 更改传感器值和数字图像值之间的放大(模拟和/或数字),可以发生在硬件上(简单理解:最后接收到多少能量,任何将这个能量乘一个数而已)

在这里插入图片描述

在后期使用ISO来调整图片亮度,调节的同时也会将它的噪声放大。

摄影师必须权衡景深(?)和运动模糊的移动对象

快与慢摄影

高速摄影

普通曝光 = 极快的快门速度 x (大光圈和/或高 ISO)

在这里插入图片描述

低速摄影

Long-Exposure Photography(长的曝光时间,延时摄影):
在这里插入图片描述

2.Thin Lens Approximation(薄透镜近似)

通常入门不会使用单个棱镜来做相机成像,而是使用多个棱镜组成的棱镜来做成像
在这里插入图片描述

实际的棱镜并不是我们通常想的可以将光聚集到某一点的那样简单的棱镜,下面先不按这种进行学习,想探索理想的情况下的棱镜

[1]理想的薄镜头 - 焦点

在这里插入图片描述

  • 所有进入透镜的平行光线都通过透镜的焦点
  • 通过镜头后,所有穿过焦点的光线都将平行
  • 在现实中焦距可以任意改变
薄镜头方程

在这里插入图片描述

1f=1zi+1z0 \frac{1}{f}=\frac{1}{z_i}+\frac{1}{z_0} f1=zi1+z01

  • z0z_0z0:物距
  • ziz_izi:像距
  • fff:焦距

薄镜头方程推导过程:(相似三角形)

在这里插入图片描述

[2]Defocus Blur(散焦模糊)
  • 为了解释景深,引入Circle of Confusion (CoC)
  • 左边有一个Focal Plane,其上的东西会成像到Sensor Plane上;Object不在Focal Plane上,可能会聚焦在Image上,然后光线继续传播到Sensor Plane上,这时候在Sensor Plane上形成的圆就是CoC。
  • CoC的大小与光圈大小成正比。

在这里插入图片描述

由CoC得知,看到的东西是否模糊,取决于光圈的大小,大光圈容易有模糊的效果

[3]光圈F数
  • F数的定义是焦距除以光圈直径
  • 常见的真实镜头F数: 1.4, 2, 2.8, 4.0, 5.6, 8, 11, 16, 22, 32
  • F 值为2的光圈有时写成 f/2,反映了这样一个事实,即绝对光圈直径(A)可以通过焦距(f)除以相对光圈(N)来计算。

在这里插入图片描述

3.光线追踪中使用理想透镜

以前的光线追踪中,将相机与某个像素进行连线,相机是一个小点,也就是采用的是小孔成像原理

模拟薄透镜可以做出景深的效果

在这里插入图片描述

  • 选择sensor size传感器大小、lens focal length棱镜焦距和aperture size光圈大小
  • 选择感兴趣的主题Z0Z_0Z0的深度(把透镜放到场景中的某个位置)
    • 根据透镜公式,我们知道物距是Z0Z_0Z0,及其焦距,这样就可以计算出其像距ZiZ_iZi

那么接下来就可以进入渲染流程了:

在这里插入图片描述

  • 对于sensor传感器/成像平面上的点x′x'x
  • 在透镜上随机采样点x′′x''x′′
  • 将上面两点连线后,根据透镜性质得知光线可以传播到x′′′x'''x′′′
  • 估计x′′′x'''x′′′x′x'x的radiance

4.Depth of Field景深

用不同大小的光圈可以控制模糊的范围

景深对应的就是CoC小的那一段,这段是清晰的

真实场景中有一段深度(景深)经过透镜会在成像平面附近形成一段区域,这段区域内认为CoC是足够小的。这段就是清晰的。

可以简单理解成只要CoC比像素小或者差不多,画面就是清晰的

在这里插入图片描述

在这里插入图片描述

5.Light Field / Lumigraph光场

虚拟现实:将看到的世界在绘制在一张图上,也就是用一张图来模拟真实世界
在这里插入图片描述

[1]The Plenoptic Function全光函数

The Plenoptic Function全光函数描述人可以看到的东西

站在一个场景中,往四面八方看,用极坐标看的位置,全光函数定义了往某个方向看会看到什么值
P(θ,ϕ)P(θ,ϕ,λ)P(θ,ϕ,λ,t)P(θ,ϕ,λ,t,Vx,Vy,Vz) P(\theta,\phi) \\ P(\theta,\phi,\lambda)\\ P(\theta,\phi,\lambda,t)\\ P(\theta,\phi,\lambda,t,V_x,V_y,V_z) P(θ,ϕ)P(θ,ϕ,λ)P(θ,ϕ,λ,t)P(θ,ϕ,λ,t,Vx,Vy,Vz)
在这里插入图片描述

  • λ\lambdaλ:波长,使图片具有颜色
  • t,电影世界
  • Vx,Vy,VzV_x,V_y,V_zVx,Vy,Vz:全息电影,也可以理解为整个世界,整个世界就是一个7维的函数。
[2]光场

光场其实就是全光函数的一小部分。

在这里插入图片描述

定义光线:

在这里插入图片描述

将一个物体放在一个包围盒中,从任何位置和任何方向看这个物体。想描述物体所能被看到的多种情况,描述这个物体在包围盒上,在任何位置往任何方向获取的光线,写成一个函数。这个函数就记录了物体表面不同位置往各个方向的发光情况。
光场就是在任何位置往任何方向的光的强度。光场只是全光函数的一小部分,只包含二维位置(相当于uv坐标)和二维方向(θ,φ)(θ,φ)(θφ)
在这里插入图片描述

把物体变成光场,记录下光场后也就相当于记录下了物体的观测。不需要里面的物体是什么,只需要知道光场就知道了观测。
可以用一个平面,平面上的二维坐标和二维方向定义光线,作为光场的参数。

在这里插入图片描述

广场就是在任意一个方向往如何一个位置去的光对的强度

根据实例认识两种理解方式(a和b两种):

在这里插入图片描述

不同之前看的一个像素,这个像素的光来自于不同方向的光的平均(也就是下图中接收光的透镜上中),光场实际是将不同方向的光通过像素,将其分别记录下来,记录到sensor中

在这里插入图片描述

[3]光场相机

光场相机应用的是微透镜原理,使用微透镜将不同方向的光分开。

与普通相机不同之处是:光场相机可以先拍照在后期调整聚焦

普通相机中黄色的就是获取计算后得到的最终的像素。光场照相机将这里变为微透镜,微透镜将不同方向的光分散开。普通照相机记录一个像素,光场照相机计算一片像素。

在这里插入图片描述

然后将每个透镜选择一条光线,将其结果记录为像素值。就相当于用相机拍摄特定方向的照片。通过取不同方向的光线可以虚拟的移动摄像机的位置。

尽管如此,光场相机并没有广泛使用,是因为其具有如下缺陷:

  • 分辨率不足
  • 高成本,难设计
  • 像素总个数和一个像素分成多少个方向需要权衡
【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电网韧性提升方法,重点研究了移动储能系统的预布局与动态调度策略。通过Matlab代码实现,提出了一种结合预配置和动态调度的两阶段优化模型,旨在应对电网故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进行对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划与电力支援过程,从而全面提升配电网的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电网、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI一区论文中关于配电网韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电网应对突发事件的能力;③为移动储能系统在智能配电网中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置与动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进一步拓展研究。
### 光场相机的标定方法 光场相机的标定是一个复杂的过程,涉及多个方面,包括微透镜阵列的标定、相机畸变校正以及整体系统的参数优化。以下是关于光场相机标定的一些核心技术和方法: #### 微透镜阵列的标定 一种常用的方法是 **多频相移标定法**,该方法利用了微透镜对光线的汇聚作用。具体来说,在微透镜中心附近的像素通常会表现出更高的亮度。因此可以通过峰值检测技术找到这些亮斑的位置,并将其作为微透镜中心的估计值[^1]。 为了实现这一目标,可以设计一组特定频率的相移图案,并通过显示器展示给光场相机拍摄。通过对所获取的一系列图像取平均值,能够有效减少噪声干扰,从而提高定位精度。最终,通过对均值图像执行峰值检测操作,可以获得整个微透镜阵列中各个微透镜的精确中心坐标[^1]。 #### 相机畸变校正 除了微透镜阵列本身的标定外,还需要处理因光学系统引入的各种畸变问题。常见的畸变类型主要包括径向畸变和切向畸变。其中,径向畸变是最为主要的因素之一,它源于理想化的针孔模型无法完全反映实际镜头的行为特征[^3]。 针对这些问题,现代标定流程往往结合标准棋盘格模式来进行几何矫正工作。这种方法不仅有助于消除上述提到的传统意义上的形变效应,同时也适用于修正由于数字化成像设备内部结构特点所带来的新型挑战——比如由CCD/CMOS芯片表面平整度差异引发的独特形式的空间扭曲现象[^5]。 #### 综合考虑软硬件因素 值得注意的是,尽管先进的算法可以在一定程度上缓解某些物理局限带来的负面影响,但从长远来看,提升产品本身的设计质量仍然是不可或缺的重要环节。例如适当调整像元尺寸与微型透镜规格之间的比例关系便能显著改善最终成像效果;与此同时开发更加高效稳健的数据分析手段也是必不可少的努力方向[^2]。 ```python import numpy as np from scipy.ndimage import gaussian_filter def detect_lens_centers(image_stack, freqs=[8, 16, 32]): """ Detect micro-lens centers using multi-frequency phase-shifting method. Parameters: image_stack (list): List of images captured under different frequencies and phases. freqs (list): Frequencies used in the displayed patterns. Returns: list: Detected lens center coordinates. """ avg_image = np.mean([gaussian_filter(img, sigma=1) for img in image_stack], axis=0) peaks = find_peaks(avg_image) # Hypothetical function to locate bright spots return [(p[1], p[0]) for p in peaks] def find_peaks(image): """Placeholder peak detection logic.""" pass ``` 以上代码片段展示了如何基于输入图片堆栈计算出每个微透镜的大致位置。这里采用了简单的高斯模糊预处理步骤以增强信号强度对比度,便于后续更精准地识别局部极大值点集合。 --- ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

seeooco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值