理解色彩与相机内图像处理流程——常见错误及相关工作介绍


本文来自ICCV 2019的tutorial:“Understanding color & the in-camera image processing pipeline for computer vision”,引子请见这里。

算不上翻译,演绎了不少,希望大家能够结合原pdf甄别地看,欢迎提出疑问。

前一篇介绍了相机内部图像的处理流程,这篇作为最后一篇,会介绍常见错误及相关工作介绍。

3 关于色彩常见的错误

【在错误的色彩空间工作】

这样的错误来自于对色彩空间的忽视,在描述时不能仅仅说“RGB”,而应该指定是哪个RGB(raw RGB、sRGB、NTSC、P3等等),如果图片是直接从网页上保存的,那么很可能是sRGB空间的。对于某些研究问题,特定的色彩空间会比其他的更合适。

大多数相机都可以得到两种图像,raw RGB空间下的未处理的传感器图片,和sRGB下的处理完成的图片。

raw格式的好处在于它的像素值和场景的物理光线强度是线性对应的,一些CV问题需要这样的假设,如光度学重现(shape from shading)、图像去模糊等等。

考虑图像去模糊,我们的假设是场景光强在模糊核的卷积作用下得到模糊图片。然而如果是sRGB空间的图片,在这之后还会经过非线性的调整,这就和假设的模型不再符合了。下图中f指代的就是线性变换。
在这里插入图片描述
在这里插入图片描述
再看一个实际的例子,可以看到sRGB空间上进行去模糊效果并不好(可以看看右边的叶子)。
在这里插入图片描述

sRGB确实是“标准的”,但这是说它是一种表示颜色的国际标准,并不是指它在物理意义上是标准的,这样的空间被称为“显示相关的”(display referred)色彩空间。sRGB上的颜色仅仅是照片的颜色,仅此而已。

如果应用场景依赖于颜色,如“通过颜色分析疾病”之类的问题,对于色彩空间就更是要多加小心了。

【认为从sRGB可以估算场景光照】在这里插入图片描述

这是一个彩色图转灰度图的心理学公式,流传甚广,但它会带来颜色比例的混乱。如果想要得到单通道的图像,可以只用绿色通道,或者其他合理的脱色方案。具体可以参考论文Nguyen R M, Brown M S. Why You Should Forget Luminance Conversion and Do Something Better[C]. computer vision and pattern recognition, 2017: 5920-5928.

【对白平衡的矫正】

另一个误解是可以通过后期处理来矫正由于参数设置带来的色彩错误

举个例子,拍摄时没有选择正确的白平衡,于是就先进行一个逆的伽马变换,将错误的白平衡去除,矫正为正确的白平衡,再伽马变换回来。
听起来似乎很有道理,也确实有很多资料说这样是对的,但其实这是完全行不通的,甚至会让事情更糟。

如前面所说,图像处理中有着大量的非线性操作(尤其是【颜色操作】步骤)而不仅仅是伽马变换,早期犯下的错误会在处理过程中越传越远,想要矫正必须把所有的过程逆转,这很难实现。

下图就是一个错误的示范,可以看到,这样实现不了白平衡的矫正。
在这里插入图片描述

【忽略空间地解释图像】

前面说过,raw RGB并不是标准的色彩空间,而我们的显示设备会以标准色彩空间的方式去显示,因此显示器上看到的raw图片并没有视觉含义,从而依赖于raw的视觉效果进行解释是完完全全错误的。
下图来自一篇论文展示白平衡效果的部分。这些图片都是在raw RGB空间下的,因此这一展示毫无意义

在这里插入图片描述

4 相关工作介绍

警告差不多就是这些,最后介绍一下这方面相关的工作**(原pdf里这部分列举了很多论文,如果感兴趣可以去自行查看)。**

【开放相机处理流程相关的研究】

大多数相机内部的处理流程是封闭的,这使得很难做到研究其中的某一个步骤,同时也很难得到流程中间的图片(如CIE XYZ图像)。不过现在有一些不错的库可以进行raw RGB空间图像的处理,如libRaw、Adobe DNG SDK,谷歌的相机还开放了接口从而可以控制相机流程中的参数。

软件相机的流程包括:
1 相机rawRGB
2 黑电平减法和线性化+缺陷像素遮罩
3 镜头矫正 不均匀的增益
4 去马赛克 降噪
5 白平衡 色彩空间转换(CIE YXZ/pro-photo
6 色相饱和度调整
7 曝光补偿
8 色彩渲染
9 sRGB转换
10 sRGB 伽马变换

这样我们就可以分析流程的每一步了。
在这里插入图片描述在pdf中有每个步骤结果的大图。

【深度学习和相机处理流程的关联】

深度学习的能力很强,因此可以用于啃那些较难完成的任务,比如去马赛克、降噪、自动白平衡。

处理自动白平衡问题时,可以在图像中指定白点(或者说中性区),将图像作为数据而白点作为label进行训练,而测试和验证集则可以用一个mask遮蔽掉图中的中性区。
在这里插入图片描述在这里插入图片描述
在处理降噪问题时,可以将低ISO下拍摄的图片作为ground truth,而高ISO的图片作为数据进行训练。这方面有很多人制作了数据集。
此外还可以运用于低光视觉、去马赛克、白平衡矫正等领域,也都出现了一些论文。

【对jpeg的研究】

前面提到raw RGB的各种好处。但它也有使用上的弊端,raw RGB图片和jpeg比起来往往较大(前者25-80 MB,后者5-10 MB),此外对raw格式图片的支持也较少。
但如果我们可以将raw RGB图像的内容编码进jpeg,在需要时可以取出来,这会是一件很方便的事。有篇论文讲的就是这件事:RAW Image Reconstruction Using a Self-Contained sRGB-JPEG Image with Only 64 KB Overhead。

此外还有论文在研究新的压缩方案以代替jpeg,同时也能够满足线性数据的要求:Learning Raw Image Reconstruction-Aware Deep Image Compressors

到此,总算是结束了。

5 最后

【这里准备了一份“外带知识”】

1 消费级相机并不致力于重现场景颜色!

2 sRGB是标准色彩空间,但并不是说它的颜色是和物理场景对应的。
那些像素值是由相机调整过的,他们不代表物理世界,他们仅仅代表照片。

3 raw RGB图像是和场景光辐射线性相关的。
如果需要度量物理世界,请使用raw RGB,但要注意的是raw RGB是非标准的、依赖于设备的。

感谢主讲人Dr. Michael S. Brown和他的小组~