InkSoul/content/computergraphic/相机与透镜.md

448 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: "相机与透镜"
date: 2022-07-29T14:39:13+08:00
---
计算机图形学中有两种成像方法:光栅化成像和光线追踪成像
这两种方法都是一种合成(Synthesis)的方法,即这个在自然界中不存在,但我们不知可以通过合成方法成像,还可以通过捕捉(capture)方法成像
$$Image = Synthesis + Capture$$
当然还有很多种成像方法最简单的捕捉成像方法是使用相机。当然现在还在研究很多别的更好成像技术比如光线的传播其实是有时间的有一些研究会研究光在极短时间内的传播就可以看到光线真正在空间中进行传播的过程这个过程叫Transient image瞬息图像
![](../../images/image_synthesis_capture.png)
## 相机
![](../../images/inside_the_camera.png)
最早的相机起源子小孔成像
如果中间平面上的一个孔是一个理想的点,那左边所有不同的有反射光的点,通过中间的孔会在另一侧形成和左边的人道理的像,此时在另一侧放一个传感器将其记录在胶片上就可以得到一张相片
小孔成像对应的相机为针孔相机(pinhole camera)
生活中常见的则为带透镜的相机
![](../../images/lenses_from_image_on_sensor.png)
### 相机部件
* 快门(shutter)
下图为去掉了镜头后的相机快门部分,控制光在多少分之一秒内进入相机
![](../../images/Shuntter_exposes_sensor_for_precise_duration.png)
* 传感器
记录传感器上任何一个点(像素)的Irradiance
![](../../images/sensor_accumulates_irradiance_during_exposure.png)
如果一个相机没有透镜或针孔是无法拍出照片的,如果将一个感光元件直接放在一个人的面前,任何一个点上都可能收集到来自不同方向的光,而这个点作为传感器无法区分来自各个方向的光线,此时会将各个方向的能量都综合在这个点上,会导致所有东西都是模糊的
![](../../images/sensors_without_lenses.png)
前沿中存在传感器可通过方向性的光分开记录的研究但目前依旧认为只能记录Irradiance而非Radianc
### 小孔成像过程
小孔成像现象在公元前就已经被发现和提出
![](../../images/pinhole_camera.png)
在今天,针孔摄像机拍摄依旧可行,大多数使用的相机都是带有透镜的,
真正做一个如下图的针孔(硬纸板中间有一个6mm直径能透光的地方),也能用这个小针孔拍摄某个场景,记录在胶片上。但拍出来的东西是没有深度可言的,任何地方都不会是虚的,都一定是清楚的
![](../../images/largest_pinhole_photograph.png)
![](../../images/largest_pinhole_photograph1.png)
虚化正是来源于透镜。在计算光线追踪是,我们使用的就是针孔摄像机的模型,所以也得不出不同的地方会有不同的模糊
### 视场(Field of View)(FOV)
视场往往意味着能够看到多大的范围对于广角镜头通常意味着能够拍到更广的角度可见的FOV更大对于手机上的相机视场就相对比较小
![](../../images/effect_of_focal_length_on_fov.png)
#### 从小孔成像的针孔摄像机理解视场
通过上图的相似三角形关系,如果分别从传感器的两个边缘和小孔连一条线,那么两条线中的区域都是可视范围
1. 传感器的高度认为是h
2. 传感器和小孔之间的距离(焦距,小孔成像中不存在此概念)是f
3. 通过平分FOV可计算得出
$$FOV = 2\arctan(\frac{h}{2f})$$
将传感器放置在离小孔更近的地方会使f变小FOV变大这样就可以通过内部设计推断视场有多大
#### 焦距(focal length)和视场
##### 通过定义焦距的方式来定义视场
不同视场决定不同拍照结果。视场和传感器大小及焦距相关,所以人们通常定义视场(FOV)以35mm格式的胶片为基准固定传感器的大小再通过定义焦距的方式来定义FOV
![](../../images/focal_length_vs_filed_of_view1.png)
##### 单反镜头的焦距
购买单反镜头时会有不同的焦距参数的原因正是视场不同
* 17mm is wide angle 104$^\circ$
* 50mm is a "normal" lens 47$^\circ$
* 200mm is telephoto lens 12$^\circ$
##### 手机相机的焦距
对于手机相机,其传感器很小,所以对应的焦距也小很多,手机上显示的焦距往往只是一个等效的概念
##### 不同视场的效果
当视场越窄,看到的东西越远
![](../../images/focle_length_vs_field_of_view2.png)
#### 传感器(Sensor)大小和视场(FOV)
小一点的传感器会对应小一点的视场
![](../../images/effect_of_sensor_size_on_fov.png)
##### 传感器与胶片
传感器与胶片这两个概念不一样平常往往认为是一回事认为传感器上各个不同的点会对应写到对应的位置上去存在一个一一对应的关系。我们认为传感器接收到的图像就是最后成像出来的图像。对于渲染器而言传感器负责记录每个像素最后收到的Irradiance有多大胶片用于决定应存储的图片格式
##### 传感器大小
大相机有大的传感器也就有大的分辨率,所以不同相机价格各不相同,相机机身越大,镜头越大越长越好,价格也就越高
![](../../images/sensor_size.png)
#### 曝光
理解:
如果对明亮场景拍照,得到的结果会亮一些,如果对着一个比较暗的场景,但快门按下的时间长即曝光时间长,也可以得到一个比较亮的照片。因此通过进来多少光和让光进来多长时间,进行累积就可以得到曝光度
在辐射度量学上,单位时间内有光打到一个表面,单位时间内又辐射出去,就只需要考虑单位时间,但照相是考虑整体时间
1. 曝光时间(T)由快门控制
2. Irradiance(E)指传感器单位面积接收的光能
3. H = T $\times$ E
Irradiance往往由光圈大小(影响镜头接收到多少光)和焦距决定
#### 影响照片亮度的因素
* 光圈的大小
相机为精密仪器可控制光圈大小最大可开到镜头一样大由f-stop控制。实际上是仿生学设计模仿人的瞳孔的动态大小调节功能
* 快门速度
快门速度越快,开放时间越短,更少的光进入
* ISO增益/感光度(ISO gain)
可简单理解为后期处理当感光元件感知到某个层级的光后利用ISO后期乘上一个数值(可发生在不同的地方,可发生在硬件,调节传感器灵敏度,还可以生成照片的数字信号上进行调节)
#### 各因素不同的配置
* 下图第一行参数中用F数表示光圈大小黑色为遮挡物白色为光圈大小F数越大光圈越小(点号写成逗号为欧洲写法)
* 第二行参数使用分数表示快门速度(1/1000即为快门开放1/1000秒)
* 第三行参数是ISO不同ISO可简单理解为相乘
![](../../images/exposure_aperture_shutter_gain.png)
#### ISO简单地放大信号会放大噪声
任何一个信号肯定会产生噪声,对整个信号去乘以一个很大的数,在放大信号的同时也会放大噪声,这也是在很暗的环境中使用很小的光圈和快门时间会拍出来一张很暗的图
正常情况下都不会通过调ISO的方式来得到一个更亮的图在小范围内调整无误但调得特别大后一定会出现噪声问题
产生噪声的原因:
将光认为是光子如果快门时间不足那么进入感光元件的光子数就少光子数少就会造成noisy
![](../../images/ISO_gain_vs_noise_in_canon.png)
#### 光圈与F数
* 描述光圈大小常用F-Number
* F数有两种写法FN(F后接一个数字)或F/N
* F数的非正式理解光圈的直径的逆即$\frac{1}{直径}$
* 如图,调光圈可以直接调出曝光度
![](../../images/F-Number_exposure_levels.png)
#### 快门曝光时间对结果的影响
快门
![](../../images/physical_shutter.png)
* 调节曝光度
* 产生运动模糊(motion blur)
常出现在高速运动的物体上,在快门打开的期间物体发生了运动,就意味着在快门开合过程中会记录物体的一段移动,传感器由起到平均作用,所以表现为模糊
更长的快门时间会造成更严重的运动模糊,对于等长的快门时间,物体运动越快,越容易出现运动模糊
![](../../images/side_effect_of_shutter_speed1.png)
但是更短的快门时间曝光度也降低了所以为了达到相同的亮度就要调节ISO或光圈的大小
![](../../images/side_effect_of_shutter_speed2.png)
运动模糊的好处
1. 没有运动模糊会从人的感知上觉得赛车非常慢
2. 对于运动的物体,一帧的拍摄相当于在不同的时间对物体所在的位置进行了一个采样,如果有运动模糊,就相当于做了一个反走样
rolling shutter问题
电子控制的快门可以认为是任何时刻任何位置同步打开但机械快门则需要一个过程如果物体运动比机械快门的速度快就会出现Rolling Shutter问题因为图像上不同位置可能记录的是不同时间进来的光
![](../../images/side_effect_of_shutter_speed.png)
#### 均衡快门和光圈
快门的时间打开得短就会暗那就可以提高光圈的大小用更小的F数。以下的表格上下对应的参数基本可以达到相同的曝光度。但达到的效果并不会一模一样因为大光圈会引起前景深的问题快门时间又会引起运动模糊
![](../../images/f-stop_vs_shutter_speed.png)
-----
### 快速或长曝光摄影
#### 快速摄影
每秒拍摄更多帧数然后按正常帧数播放每张照片的快门时间非常少又需要保证每张都清晰且有正常的曝光度可以用更大的光圈和更高ISO
![](../../images/hight-speed_photography1.png)
#### 超低速(长曝光)摄影
用非常小的光圈慢慢拍,也就是所谓的延迟摄影,摄影界中称为拉丝,也就是长曝光造成的运动模糊
![](../../images/long-exposure_photography1.png)
![](../../images/long-exposure_photography2.png)
![](../../images/long-exposure_photography3.png)
## 镜头
### Thin Lens Approximation
* 真正的镜头设计是高度复杂的
无论相机还是手机,都不使用单个透镜来成像,往往使用一个透镜组
![](../../images/real_lens_dfsigns_are_comples.png)
* 真正的镜头元素是不理想的
如下图,一面是凸的,一面是平的,这样就不可能将光聚在一起
![](../../images/real_lens_elements_are_not_ideal.png)
* 我们研究的是理想的薄透镜(忽略厚度)
理想透镜:
1. 对于平行于透镜的光如果打进来会被集中到一个点上(焦点),定义焦距是焦点到透镜中心的距离
2. 光路有可逆性,如果光线穿过焦点,被透镜折射后会变成平行的一束光
3. 假设薄透镜可以任意改变焦距(透镜焦距固定,相机能改是因为透镜组)
![](../../images/ideal_thin_lens_focal_point.png)
* 透镜满足的物理规律
1. 平行光会被折射成过焦点,以及过焦点的光会被变成平行光出去
2. 任何一个透镜可以假设任何一条光穿过透镜中心,它的方向不会发生改变
3. 对于固定焦距的透镜,如果改变像距,物距一定跟着改变
* 薄透镜公式(Gauss's Ray Tracing Construction/Gaussian Thin Lens Equation)
如下图,左侧物体会经过透镜成像到右侧去,可定义一些参数
定义物距(物体到透镜的垂直距离):$Z_o$
定义像距(成的像到透镜的垂直距离):$Z_i$
透镜的焦距f
$$\frac{1}{f} = \frac{1}{z_i}+\frac{1}{z_o}$$
推导过程
平行光必定过焦点,过焦点的光会变成平行光
![](../../images/gauss_ray_diagrams.png)
忽略中间过透镜中心的光
![](../../images/gauss_ray_tracing_construction.png)
可见如下图的几何关系,左侧在光到达透镜前可形成两个相似三角形,右侧也相同
![](../../images/gauss_ray_tracing_construction1.png)
将两组关系做运算
![](../../images/gauss_ray_tracing_construction2.png)
### 散焦模糊(Defocus Blur)(景深)
#### 弥散圆(Circle of Confusion)
出于解释模糊我们引入CoC的概念
如图左边远处有一个平面(Focal Plane),所有的光经过透镜后都会被聚焦到右边一个平面上(Image)
* 如果物体不在Focal Plane上会出现模糊
![](../../images/computing_circle_of_confusion_size.png)
* 模糊原因
任何地方有一个点,它穿过透镜后,可以根据上面透镜的公式算出像距,但是如果成像平面不在这个地方,而是离得有一段距离,光线就会在原本成像的地方之后继续传播,那被感光元件接收到的时候就不再是一个点了,而是变成了一个圆(CoC)
* CoC大小计算
与Aperture的大小相关
CoC的直径/Aperture的直径 = $d'/Z_i$
$$\frac{C}{A} = \frac{d'}{z_i} = \frac{|z_s - z_i|}{z_i}$$
可见CoC的大小和透镜本身的大小成正比
* 物体是否模糊取决于光圈的大小
下图光圈f数为1.4,为大光圈,可以看到更模糊的效果
![](../../images/coc_vs_aperture_size.png)
#### 光圈大小
之前的光圈定义实际不准确F数拥有明确定义
* F数定义
焦距/光圈直径
$$N = f/A$$
* 常见F数
1.4,2,2.8,4.0,5.6,8,11,16,22,32
* 写法
常写为f/数字
* 例子
![](../../images/example_f-stop_caculations.png)
* CoC的大小和F数成反比
![](../../images/size_of_coc_is_inversely_proportional_to_f-stop.png)
$$C = A\frac{|z_s - z_i|}{z_i} = \frac{f}{N}\frac{|z_s - z_i|}{z_i}$$
### 光线追踪理想的薄透镜(Ray Tracing Ideal Thin Lenses)
之前Ray Tracing和Path Tracing都是从相机往任何一个像素中心连线默认是小孔成像的针孔摄像机的模型
但是我们可以模拟薄透镜给它一个焦距可以将Sensor放置到离镜头有多远然后实际去做光线追踪
* 实例
![](../../images/eg_of_rendering_with_lens_focus.png)
#### 具体实现
* 定义场景
确定sensor大小定义透镜焦距光圈大小
定义透镜和某个平面的距离$Z_o$
根据物距$Z_o$和焦距,可计算像距$Z_i$
![](../../images/ray_tracing_for_defocus_blur.png)
* 使用光线追踪算法渲染
找一些光线能够穿过透镜,打到场景中
在成像平面(感光元件,胶片)上选一些点X'
在透镜上另选X"两点连线便可知道其方向且感光元件上的X'处会记录这条线上的Radiance
![](../../images/ray_tracing_for_defocus_blur1.png)
* 景深(Depth of Field)
如下两图,一个用大光圈,一个用小光圈
过大的光圈对应大的CoC一个点会变成更大的圆所以就会更模糊但总归在一些地方是不模糊的即不同光圈大小会影响模糊范围
![](../../images/depth_of_field.png)
如下图中一个光经透镜会打到一个成像平面该成像平面附近区域都认为CoC足够小
![](../../images/circle_of_confusion_for_depth_of_field.png)
景深实际场景中有一段深度该深度经透镜后会在成像平面附近形成一段区域区域内认为CoC是足够小的
因此计算景深就是计算CoC在这个很小的一段范围内认为对应场景是清晰的
可简单认为成像平面中的许多像素不是一个点存在各自的大小CoC的大小和像素大小差不多或比像素小都可认为结果是锐利的
计算DOF
如下图,考虑景深的最远和最近处,分别让它们穿过透镜,到某一地方可以得到右边的范围
![](../../images/depth_of_filed_fyi.png)
DOF参数效果
![](../../images/DOF_demonstration_fyi.png)
* 修改焦距
焦距越大DOF越浅只有焦点上的成像是清晰的焦点之前的清晰范围叫前景深之后的叫后景深
* 改变F数
光圈越小景深越大光圈越小意味着越接近小孔DOF清晰的范围越大
* 调CoC
更大的CoC对应的景深就更深
F-stop可简单理解为光圈大小又是透镜大小本质是遮挡透镜动态改变透镜大小