从RAW文件到可观察的照片,中间有着好几个复杂的过程。我准备撰写一些文章,教大家一步步用Python实现这个过程。接下来,我们会在此基础上,学习如何编程(尽量基于Python,不排除部分高级算法需要用C++等别的语言)实现基于RAW文件的图像后期处理。我希望这系列文章不仅仅包含科学的内容,甚至还能有一些艺术的内容~
目前我心里的计划包括下面这些内容,我也欢迎你提出建议,提出自己想要了解和交流的信息:
这系列文章我会放在计算摄影学知识星球,如果你对这个主题感兴趣,请扫文末二维码,支持我的创作😃
先来看看解析各种各样RAW文件这个主题吧~
我在文章2.从入射光到JPEG相片-数码相机内部的秘密中介绍了相机是如何把入射光线变为我们平常可见的图像的。如下图所示,这个过程中相机的内部的处理分为两个阶段。在模拟前端之前,我们得到的是原始线性的数字图像信息,而在之后则是一系列的相机内的图像处理,执行这些处理操作的系统被称为ISP(Image Signal Processor)。
ISP执行很多操作,包括相机校正、白平衡、去马赛克、颜色转换、色调映射等等。最终压缩为我们平时可见的JPEG一类的图像。
现在的大部分单反相机、一些高端的手机(例如Iphone 12Pro之后的手机), 都可以在存储最终的JPEG图像的同时,存储原始RAW图像。厂家会将原始的未经任何压缩和处理的原始数字数据和一些定义数据含义的元数据封装在一起,存储为RAW图像文件。而不同的厂商会采用不同的编码方式存储,所以不同厂商的RAW图像文件的格式和后缀名也不同。
比如,佳能相机的RAW格式文件后缀名是“CR2”,尼康相机的RAW格式文件后缀名是“NEF”,索尼相机的RAW格式文件后缀名是“ARW”。而iPhone从12Pro之后的几款手机均支持存储所谓的ProRaw图像,这种图像文件被存储为后缀名为DNG的文件。而DNG则是由Adobe公司定义的一种公开的RAW图像格式,非常便于导入到包括Photoshop在内的很多图像工具里面进行处理。
我们需要知道的是,很多时候由相机ISP处理后生成的最终图像并没有完全达到我们的需求,它们可能在画质和几何构图、畸变等多种方面都没能满足我们的需求,这时候摄影师会希望在原始的RAW图像数据上进行自己需要的处理。
我从现在开始准备撰写一系列文章,描述基于RAW图像文件进行的一系列数字图像处理方法。特别的是,我会用描述如何用包括Python在内的计算机语言来实现这些处理,必要的情况下我还会介绍一些方便使用的工具来辅助这些处理。
相机图像的处理不仅仅是一个科学问题。当我们获取的图像用于计算机视觉,进行类似目标检测、跟踪、识别等机器视觉的应用时,我们对图像进行高级处理的需求还不那么强烈。但很多时候,相机图像处理的受众是人。我们要把美带给欣赏相片的人,这时候相机图像的处理就会有更多主观和艺术的成分在里面。比如,下面对同一个RAW文件进行不同处理的两张图像,哪一个更好呢?这就涉及到艺术和审美的判断:
我的这些文章会更多的介绍这个过程中科学的部分,但在必要的时候我也会涉及到对图像后处理过程中艺术部分的介绍。
由于不同厂商存储的RAW文件格式不同,且都不是人类可以直接观察的。因此我首先介绍的,是如何用Python实现加载和解析RAW文件为可见图像的过程。这个过程包括了:
有了这些基础,后续我们就能够更加方便的进行基于RAW图像的图像后期处理了。