这篇文章要说的当然不是如何用 PS、LightRoom 来处理 Raw 文件,而是一种更加彻底、数据化的办法 -- 利用 Matlab
直接处理数码相机的 CFA(Color Filter Array) 数据。
接触过摄影的人都知道,对于数码相机来说 Raw Data 是原始的、未被处理的数据,相比
JPEG,Raw 文件记录了更多的场景信息,保留了更宽广的色域以及动态范围,也留下了更为自由的后期处理空间。Raw Data
只是一种图像数据的封装形式而并不是一种文件格式,不同厂商的相机一般都拥有自己的 Raw Data 格式,比如常见的
*.CR2、*.NEF、*.ARW、*.ORF(Olympus)、*.RAF(Fuji)、*.DNG(Adobe、Leica)等。
对于大部分人来说,处理 Raw Data 的软件不外乎就那么几种,Camera Raw、LightRoom、Aperture、DxO
以及各厂商自带的处理软件。这些软件虽然通过图形界面提供了简洁易懂的处理流程,但是遗憾的是它们能导出的都并非真正意义上的 “Raw
Data”,即传感器直接记录的、与照度成线性关系的第一手数据。对于摄影、媒体、艺术领域,这些软件已经足够强大,但是在图像处理、计算机视觉等研究领域,我们需要的是把照片中的信息转换为能够通过数字来定量表示的形式,或者通过一些公式、算法直接对图像(或图像的某一部分)进行处理,再或者对两张图片之间的差别进行量化表示,这时候
LightRoom 这些软件就显得有些无能为力了。这篇文章要讲的就是如何通过 Matlab 对 Raw Data
进行处理并从中提取出我们想要的图像信息,这是一种我所了解的最彻底、最根本的获取相机传感器原始信息的方法,并且这些信息都是以数字的形式记录下来,可以很方便地在此基础上进行图像的存储、传输或者进一步操作。实际上
Matlab 本身就提供了非常强大的图像处理功能,正所谓 “普通青年处理图片用 PS,文艺青年处理图片用 LightRoom,2B
青年处理图片用 Matlab”。
由于各家相机厂商对 Raw Data 采取了不同的封装方式,Matlab
并不能一一识别这些文件格式,因此我们需要先利用 Dcraw 将不同扩展名的文件转换为 Matlab 能够读取的图片格式
-- tiff。Dcraw 是一种 Raw Data 解析方案,它能够识别市面上大部分的相机型号,并将相应的 Raw 文件导出为
tiff 或 PGM/PPM/PAM 格式文件。事实上 Dcraw 本身就可以算作一种 Raw Data
的处理程序,它拥有白平衡设置、伽马校正、色彩空间转换、去马赛克、亮度调节等一系列功能,并且提供了 C 源代码,让用户可以在任何操作系统上对其进行编译。关于 Dcraw
更详细的设置可以在其官方文档或这个博客中查看,这里我们仅仅把它作为 Raw Data 到 tiff 的一种媒介,而不对图像做任何的处理 --
把所有的操作都留到 Matlab 里。
0. Dcraw 的预处理
以下操作以 Windows 平台为例,使用的相机为 Nikon D3X。
为了简化流程,我们使用 Dcraw 现成的可执行文件(https://www.cybercom.net/~dcoffin/dcraw/dcraw.exe)而不在本地对其编译。一般将这个
Dcraw.exe 文件放在 C:windows 路径下,这样可以直接从运行(Win + R)中执行。在运行中输入 cmd
进入命令行窗口,这时已经可以直接调用 Dcraw,或者输入 dcraw 查看相关的一些命令。
由于我们不准备用 Dcraw 对 Raw Data 做任何处理,只需要输入
dcraw -4 -T -D -v pathfilename
其中 pathfilename 为图像的绝对路径,比如 E:\photosimg1.NEF 这样。
这里的 -T 表示将图像以 tiff 格式导出,-D 表示不对图像做任何的彩色插值和亮度调节(彩色插值的问题后面会提到),-v 表示在
Dcraw 处理结束后在屏幕上显示相关信息(这一步有没有都无所谓),而 -4 等价于 -6 -W -g 1
1,即表示导出的图像为16位(而不是常见的
JPEG 的8位 )、不进行任何白平衡校正、不进行任何伽马校正。在一些需要获取拍照时白平衡设置的场合也可以使用
-6 -w -g 1 1 -T -D 这样的参数组合,但这里我们使用 -4 -T -D
就好。各参数的意义在上面提到的官方文档页面中有详细的说明。
完成这一步之后在原 Raw 文件同一个文件夹下就会多出了一幅 tiff
格式的图像,这时候大部分图片浏览软件都可以打开它了(一些看图软件在安装插件后能够直接浏览 Raw 文件,比如我的
IrfanView,但实际上它们打开的只是嵌入在 Raw Data 中的经过一系列转码的缩略图而并非 Raw
本身)。但是为了避免各种图像浏览软件不同的解码方式对预览图像造成的影响,下面都使用 Matlab
中的 imshow 函数来浏览图像。
同样是这幅 tiff 图片,如果直接使用 IrfanView 查看,得到的是下面的效果,明显比 Matlab 中的要亮得多。