其实,我们在2013年的一篇paper里就已经探讨过这个问题。
数码和胶片色彩的本质不同,在于记录方式。数码的记录方式,是在sensor前放上三种滤光片,把滤光片所对应频率的光强记录到sensor的不同点上。在显示的时候,把三个值分别用RGB表示出来。这里,RGB之间是完全独立的,没有重合的部分。
胶片是用材料感光的方法记录三层,每一层对应一个频谱映射函数。在需要显示的时候,是用白光照上去,相当于是拿全光谱去点乘那个映射函数,得到RGB的颜色。在冲洗的过程中,也可以调整这个映射函数,达到自己的要求。
而人眼看东西的原理,用的也是类似胶片那样的频谱映射函数:
很明显可以看出,RGB之间不是完全分开的,R和G有很大的重合,甚至R和B也有一些重合。人眼看到的R或者G或者B,是全光谱点乘人眼频谱映射函数得到的。
有了这个原理基础,就可以考虑如何用数码的方式“完美”重现胶片了。
首先,只有RGB三个通道不行。需要采集全光谱。我们的实验是采集了400nm到1000nm这个波长范围内的50个不同频率下物体的黑白图像。所以这里涉及到了窄带滤镜和黑白数码监控摄像头。因为在不同波长下,光的折射程度有所不同。我们在更换了窄带滤镜后,都需要重新对焦才能很好地拍摄。我们没做自动系统,全是手工操作,所以这样一组图往往要花费几十分钟才能拍好。把这50张图都采集到之后,就可以插值出全光谱的响应了。同个物体在不同频率下长得很不一样。
有了全光谱的图像,我们就可以在显示过程中任意的修改映射函数,达到我们想要的效果。如果把胶片的映射函数得到,就能很好地恢复出胶片的效果。
最后放一个美颜相机都做不好的能力:任意调节不同年龄的肤质。不同频率的光能深入皮肤的不同层面,反射出来的也不同。所以通过全频谱拍摄,就能选择某一波长的图像为亮度,把普通拍摄出来的RGB图像的色度结合进去,得到粗糙或者细嫩地皮肤效果。