现代数字图像传感器已经非常复杂,涉及到半导体等知识,所以我们在本课中只能涉及基础,
什么是数字图像传感器?
下图中的“桶”就是像素阵列,
整个拍照过程如下,快门打开,曝光开始,由像素阵列(桶)持续接收这些光子直到曝光结束,曝光结束后,传感器将这些光子转换为数字信号,
术语“感光器件(photosite)”可以用于指代整个像素,也可以仅指感光区域。
感光单元的响应几乎是线性的
我们可以通过HDR成像来解决这种问题,
- 满阱容量:在饱和前势阱容纳的电子的数量,是成像传感器的另外一个重要的性能指标,
- 满阱容量并不是越大越好,因为满阱容量越大则需要的像素尺寸也越大,
- 满阱容量越大,则能提高信噪比和动态范围(更广的亮度范围),动态范围是指一幅图像的传感器能同时捕获并显示最暗和最亮的能力,
- 将光线汇聚到感光像素区域来帮助感光器件收集更多的光线
- 提升有效填充因子
- 通过实现像素大小的2D Box滤波器对图像进行空间低通滤波,以防止混叠伪影
- 有时还会在传感器前面放置一个附加的光学低通滤波器(OLPF),以改进前置滤波效果
如下右图下面的图像传感器中的微透镜和感光器件有一个斜移,是为了使光线更好地被感光器件接收,
什么是混叠伪影,如下右图灰色衬衫上的波纹(又叫摩尔纹)就是混叠伪影,
混叠伪影的原因:
图像传感器不足以处理高频信息
有2种方法可以防止混叠伪影:
1、通过实现像素大小的2D Box滤波器对图像进行空间低通滤波,以防止混叠伪影
2、有时还会在传感器前面放置一个附加的光学低通滤波器(OLPF),以改进前置滤波效果
更多参考:了解什么叫混叠伪影:5. 数码相机内的图像处理-图像采样与金字塔
- 在许多传感器前面,通常会有一块作为OLPF的玻璃片,也被称为光学抗混叠滤波器,
OLPF通常由两层双折射材料和红外滤波器组成。- 光线具有不同的振动方向,进入如下图左一的晶体后,就会分成不同的方向(振动方向不同)进行传播,所以会造成字的重影,
- 然而,OLPF意味着降低分辨率,因为高频信号被滤除了
- 随着现在像素数量变大,OLPF变得不再是必要的。所以摄影师经常破解他们的相机来移除OLPF,以避免分辨率的损失
- 也有相机制造商提供带和不带OLPF的相机版本
- 同时,OLPF在处理相干光(杂散条纹)时也可能存在问题
需要用到OLPF的场景,
不必要用OLPF的场景,
两种主要的图像传感器,现在主要使用CMOS,CCD逐渐退出历史舞台,
两类传感器的伪影现象,
传感器泛光是一个像素在图像传感器上接收过多的光子导致的,也会溢出到相邻的像素里面去,涂抹伪影发生在CCD中,因为CCD是逐行读取,速度相对较慢,对于移动的物体或快速变化的光线就会在图像中留下“痕迹”,
CCD和CMOS的更多区别,
CMOS传感器简图,
远离中心的像素接收到的光较少,
四种渐晕产生的原因:
• 机械原因: 光线被遮光罩、过滤器和其他物体阻挡
• 镜头原因:类似,但光线被镜头元件阻挡
• 自然原因:由于辐射定律(“余弦四次衰减”)。
• 像素原因:感光元件的角度相关灵敏度。
当相机快门打开时,传感器:
直到相机快门关闭。 然后,模拟前端:
“颜色”不是光(电磁辐射)的客观物理属性,波长才是,
- 任何光传感器(数字或非数字)对不同波长都有不同的灵敏度。
- 这是通过传感器的光谱灵敏度函数来描述的()
- 当测量某个 SPD为()的光时,传感器会产生标量响应
- 人眼包含所谓视锥细胞的光传感器的集合
- 有三类具有不同光谱灵敏度的细胞
- 人类的颜色感知是三维的(三原色)
- CFA使得数字图像传感器可以模仿人类视觉系统的视锥细胞来感知颜色
- 不同颜色的滤波器有不同的光谱灵敏度函数,模拟不同的视锥细胞
CFA的两种设计考虑:
- 对每种颜色滤波器采用什么样的光谱灵敏度函数f(λ)
- 如何在空间中排布不同的颜色滤波器(Mosaic – 马赛克)
不同的CFA马赛克排布:
每台相机或多或少都有其独特的SSF,而且大多数时候被相机厂商保密,这使得正确再现传感器测量的颜色变得非常困难,
相机图像信号处理器 (Image Signal Processor - ISP) 应用一系列图像处理操作,将 RAW 图像转换为“传统”图像。
人类视觉系统具有色度适应性(chromatic adaptation):
- 在不同的光源下,我们可以正确地感知白色(和其他颜色)
- 但相机不行——相机是没有感知
如下图中的下图,虽然在这个光源下,我们看到的颜色和在上图看到的颜色是一致的,
白平衡:让我们感知到的白色在最终的图像中也渲染为白色的方法,
相机预置的白平衡设置:
如今的相机有大量的预设白平衡设置:你可以选择在哪种光线下拍摄图像,并应用相应白平衡,
摄影时的手动和自动白平衡:
手动白平衡:
- 根据照明情况选择相机上的白平衡设置,
- 手动选择照片中颜色中性的对象,并使用它进行对图像的颜色进行归一化,
自动白平衡:
- 灰色世界假设:强制场景的平均颜色为灰色
- 白色世界假设:强制场景中最亮的物体为白色
- 复杂的基于直方图的算法(大多数现代相机都是这样做的)
灰色世界假设:
- 计算每个通道的平均值
- 通过平均值对每个通道进行规格化
- 通过绿色通道平均值进行归一化
白世界假设:
- 计算每个通道的最大值
- 按每个通道的最大值规格化每个通道
- 按绿色通道最大值规格化
自动白平衡示例:
相机图像信号处理器 (Image Signal Processor - ISP) 应用一系列图像处理操作,将 RAW 图像转换为“传统”图像。
CFA(颜色滤波阵列)去马赛克:
从马赛克传感器输出中生成完整的RGB图像,需要借助邻域插值,
双线性插值去马赛克:
双线性插值:只需求4个邻域像素的平均值。
不同通道的邻域不一致,
相机图像信号处理器 (Image Signal Processor - ISP) 应用一系列图像处理操作,将 RAW 图像转换为“传统”图像
图像中的噪声:
在低光照下噪声特别明显,也就是势阱未装满光子,
几种传感器的噪声:
(1) 散粒噪声:光子到达率是一个随机过程(泊松分布),场景越亮,分布的方差就越大。
(2) 暗噪声:由于热活动而发射的电子(随着传感器越来越热而变得更糟)
(3) 读取噪声:由电子设备(例如增益、A/D转换器)引起。在明亮的场景和以及大像素传感器:散粒噪声是主要的噪声源,
参考资料:
https://zhuanlan.zhihu.com/p/397873289
邻域插值(与去马赛克类似),
人眼感知亮度与测量亮度是有区别的,下图中“视网膜颜色”是眼睛感知到的颜色,“感知颜色”是大脑处理后的颜色,
- 我们已经看到传感器响应是线性的,人眼的响应也是线性的(测量亮度),
- 然而视觉感知,也就是大脑(感知亮度)是非线性的:我们对深色调更敏感,近似一个 γ \gamma γ 函数,
- 下图中,Eyes实际上是大脑感知的颜色,
Gamma编码:
色调重建也可以是Gamma编码的过程,我们的目标是使用少量的比特位来压缩编码图像的亮度信息,比如从12位压缩到8位应用非线性曲线可以更好地编码人类视觉更敏感的信息,
下图中,横坐标是实际亮度,纵坐标是感知到的亮度,
Gamma编码 vs 线性编码 —— 一个简化的例子
- 使用线性编码(5比特,32阶)会把人眼就能区分的亮度差异变成一个亮度,也会把人眼看不出明显差别的亮度变成有亮度差异,所以线性编码有较大的缺点,
- 而采用Gamma编码会在感知上更加平滑,
色调重建流程:
通过Gamma编码和Gamma校正得到的净效应还是线性曲线,
- 真实场景是线性的,经过人的大脑对线性场景的非线性响应,最终感知到的图就是下图左一,
- 经过相机Gamma编码,人眼看到的图片就是下图左二,
- 相机Gamma编码后,再经过Gamma校正,就得到显示器正常显示的图像,如下图右一,
如果没有Gamma编码会如何?
Gamma编码的历史缘故
- CRT显示器过去的响应曲线(几乎)完全等于人类灵敏度曲线的倒数。因此,CRT显示器可以跳过Gamma校正并直接显示Gamma编码的图像,
- 反过来说,以前在CRT显示器时代,我们执行Gamma编码的一个重要目的是抵消显示器的响应曲线。但在液晶显示器时代就不是了——我们现在依旧执行Gamma编码的原因就是确保最终图像的8个比特在感知上更加均匀,
Gamma编码曲线
确切的gamma编码曲线取决于相机制造厂商的设定,
可以近似的用Lγ描述,而不同设定的γ值不同,比较好的默认值是 γ = 1 / 2.2 \gamma=1/2.2 γ=1/2.2,
重要:Gamma编码后亮度值和场景的辐照度之间不再是线性关系,
相机图像信号处理器 (Image Signal Processor - ISP) 应用一系列图像处理操作,将 RAW 图像转换为“传统”图像,
是的!
每次使用基于物理的计算机视觉算法时,都需要对辐射进行线性测量。
例如:光度立体、从阴影到形状、基于图像的重新照明、照明估计、与光传输和反向渲染有关的任何事情等。将算法应用于非线性(即非RAW)图像将产生完全无效的结果。
即便不研究计算机视觉算法,摄影师们也喜欢在RAW格式上进行图像编辑,
存储和处理RAW格式图像的负担,
- 图像巨大,对存储空间占用很大,不管是相机还是电脑都需要大量的存储空间
- 相机本身的处理负担加大,特别是在快速连拍模式
- 大多数专业相机、甚至卡片相机都提供存储RAW格式图像的选项
- 一些高端的手机,例如Iphone也提供了存储RAW格式图像的选项
如果拍摄前未设置存储为RAW格式,有办法通过RGB格式逆向得到RAW图像吗?
- 很不幸,你无法简单逆向得到RAW图像
- 图像处理管道是有损的:在所有步骤之后,关于原始图像的信息都会丢失。
- 除非如果我们确切地知道相机流程中各个组件的作用(例如,通过使用来自其他类似RAW图像的信息),我们才有可能反转相机的部分图像处理流程。
- 将PNG/JPG转换回RAW被称为“逆渲染(Derendering)”,这是一个活跃的研究领域。
逆渲染-Derendering
如下图,RAW是最大的几何体(颜色空间),而jpg是最大几何体里面的小的几何体,所以想从jpg还原RAW是较困难的,
我们讲述的相机内图像处理的流程是一个猜测的公有流程
相机图像信号处理器 (Image Signal Processor - ISP) 应用一系列图像处理操作,将 RAW 图像转换为“传统”图像。
实际的ISP流程可能非常复杂,
我们所讲的模拟前端也是一个通用而假设的流程,实际传感器复杂得多
Gamma编码曲线也因相机的不同而有很大变化
这些情况都使得严肃的研究非常困难,在管道的中间阶段很难获得真实数据,很难评估新算法对特定管道阶段的效果,
- Frankencamera
- Android Camera2 API
- https://github.com/cruxopen/openISP
照片中的像素值和相机传感器输出的值是两个非常不同的东西,两者之间的关系是复杂而未知的,
参考资料:
基础阅读资料:
- Szeliski, Computer Vision: Algorithms and Applications, Section 2.3. https://szeliski.org/Book/
- Michael Brown, “Understanding the In-Camera Image Processing Pipeline for Computer Vision,” CVPR 2016,
slides available at: http://www.comp.nus.edu.sg/~brown/CVPR2016_Brown.html
进一步阅读资料:
- Adams et al., “The Frankencamera: An Experimental Platform for Computational Photography,” SIGGRAPH 2010.
第一个图像处理管道的开放架构,也是Android Camera API的先驱.- Heide et al., “FlexISP: A Flexible Camera Image Processing Framework,” SIGGRAPH Asia 2014.
讨论如何实现单阶段图像处理管道.- Buckler et al., “Reconfiguring the Imaging Pipeline for Computer Vision,” ICCV 2017.
- Diamond et al., “Dirty Pixels: Optimizing Image Classification Architectures for Raw Sensor Data,” arXiv 2017.
这两篇论文都讨论了如何自适应地改变传统的图像处理流程,使其更好地适应各种计算机视觉问题.- Chakrabarti et al., “Rethinking Color Cameras,” ICCP 2014.
讨论不同的 CFA,包括具有白色滤镜的 CFA,以及如何对其进行去马赛克.
-Gunturk et al., “Demosaicking: Color Filter Array Interpolation,” IEEE Signal Processing Magazine 2005
对去马赛克算法的精彩回顾.- Kim et al., “A New In-Camera Imaging Model for Color Computer Vision and Its Application,” PAMI 2012.
- Chakrabarti et al., “Probabilistic Derendering of Camera Tone-mapped Images,” PAMI 2014.
两篇论文详细讨论了如何建模和校准图像处理管道、如何渲染已经通过管道的图像以及如何在不同相机的管道下重新渲染图像