Matlab解析DNG格式图像

DNG是一种很灵活的图像格式,是在Tiff基础上拓展来的,随着传感器技术、后期图像处理能力的增强,我们很多时候直接将ISP采集的图像数据直接Dump下来,不做任何处理,这就是RAW图,同时我们把处理RAW图需要必要信息存下来(Bayer Pattern、白平衡、噪声水平等),然后我们就可以进行后期处理了。总之,DNG是一种RAW图格式,其中除了数据段之外,有很多标签信息。

DNG格式不断迭代,目前DNG的格式标准是1.5.0(如果还发现有标签字段没有找到,那就说明格式已经更新了,核对下版本)

Adobe对DNG格式定义的文档:https://www.adobe.com/content/dam/acom/en/products/photoshop/pdfs/dng_spec_1.5.0.0.pdf

所参考的源码有两份:

第二份源码摘自博客:http://forum.xitek.com/thread-1677216-1-1-1.html

以上第一份源码比较简洁,没有使用DNG中提供的光源信息,可以处理大部分图,但是偶尔有些格式中光源信息不一样的,就会出现色彩一场。第二份源码按照格式Pipline处理出来,颜色基本正确(不过感觉还是比正常处理出来更加鲜艳一些),并且处理速度比较慢,对Matlab来说,我们就不苛求速度了。

另外,Adobe也有专门的RAW处理工具,如果已经安装了Adobe Photoshop,那么再安装这个插件就会增强对RAW图的处理,我们可以以Adobe的结果作为参考:https://helpx.adobe.com/cn/camera-raw/kb/camera-raw-plug-in-installer.html

如果是从相机采集的图,那么可以用过Adobe DNG Converter来对图像转换到DNG格式,这个工具和上面的工具一样,也是通过插件的方式进行安装。

关于DNG解码,上面引用的那片博客已经把DNG处理的大致流程讲的比较清楚了,这里就简单概括下。

1. RAW数据处理:线性校准、黑色补偿、归一化,把数据归一化到0-1

2. 解码赛克:把CFA pattern插值出三通道的RGB数据

3. 激活区域剪裁:RAW存储的是整个CMOS的数据,有用的部分可能比CMOS稍微小一点点

4. 色彩转换:这部分处理比较负载,DNG中存储有参考色温,转换矩阵需要根据白点和白平衡色温内插计算出来

5. HSV校准:如果DNG存在HSV映射表,就需要做HSV校正。把XYZ(D50)转换到ProPhoto RGB,再把RGB转换到HSV,然后计算索引号,查表修正,之后根据需要再转换到ProPhoto RGB线性空间,或者XYZ(D50)空间

6. 曝光校准:大部分相机都为保护RAW数据高光不溢出,就在曝光时减少一点儿曝光量,在RAW解码时补回来。根据曝光量EV,可以直接换算 Photo = Photo*2EV

7. HSV色彩增强:与HSV校准的算法相同,作用是色彩增强。

8. 影调曲线:影调曲线要早ProPhoto RGB的线性空间进行转换,不同相机的曲线大致相同。

9. Gamma校准:人眼视觉是在Gamma空间的,所以按照Adobe sRGB的Gamma对数据进行校准,这个是Adobe RGB标准规定好的,照做即可

10. Opcode List Processing: 这一步是处理坏点、噪声、镜头校正等等

如果只是想简单处理,不需要很精确的颜色,那么可以follow:

大致梳理了下,希望能有帮助。

留下评论