DNG文件格式详解

馋奶兔 提交于 2019-12-07 18:28:17

DNG文件格式

Author: show Date: 2017/01/12

1、DNG基本概述

DNG(Digital Negative)是Adobe开发的一种开放的raw image file format,主要目的是为了统一不同厂商raw格式DNG格式是在TIFF6.0的基础上扩展出来的,所以DNG必须符合TIFF6.0的所有规则。里面使用的tag基本上都定义在TIFF或者TIFF/EP中。

TIFF

TIFF是一个灵活适应性强的文件格式。通过在文件标头中使用TAG"标签",它能够在一个文件中处理多幅图像和数据。标签能够标明图像的如图像大小这样的基本几何尺寸,或者定义图像数据是如何排列的,或者是否使用了各种各样的图像压缩选项。并且标签可扩展。

TIFF/EP

一个ISO标准,定义了TIFF中的TAG属性。

2、TIFF6.0结构

Tiff格式由三部分构成 IFH,IFD,DEUE打开文件切取的部分数据。

FE 00的红色框选开始都表示TagID

 

IFH, Image File Header图像文件头

每一幅DNG图像是以8字节的IFH开始的。

Byte 0-1: 字节顺序标志位, 值为II或者MM。II表示小字节在前,又称为little-endian。MM表示大字节在前,又成为big-endian。

Byte 2-3: TIFF的标志位,一般都是42。

Byte 4-7: 第一个IFD的偏移量。

l IFD

IFD是TIF图中最重要的数据结构,它包含了一个TIF文件中最重要的信息, IFD结构中包含了三类成员,Directory Entry Count指出该结构里面有多少个DE;接下来就是N个线性排列的DE序列,数量不定(这就是为什么称TIF格式文件为可扩充标记的文件)每个DE标识了图像的某一个属性;最后就是一个偏移量, 标识下一个文件目录相对于文件开始处的位置,如果该TIF文件只包含了一幅图像,那么就只有一个IFD,这个偏移量就等于0所以我们生成的DNG应该只有1个IFD。

Byte 0-1: 表示此IFD包含了多少个DE,假设数目为n

Byte 2-(n*12+1): n个DE

Byte (n*12+2)-(n*12+5): 下一个IFD的偏移量,如果没有则置为0

l DE

一个DE就是一幅图像的某一个属性。例如图像的大小、分辨率按照升序排列每个DE共12个字节:

Byte 0-1: 此TAG的ID编号。可以通过这些编号查找相应的含义。

Byte 2-3: type数据类型。表示数据是short还是long等类型。即一个数据大小。

Byte 4-7: lenghts数量。通过类型和数量可以确定存储此TAG数据需要占据的字节

Byte 8-11: valueOffset是tag标识的属性代表的变量值相对文件开始处的偏移量。如果占用的字节数少于4,那么该值就存放在 valueOffset中即可,没必要再另外指向一个地方了。如果超过4个,则这里存放的是指向实际数据的指针。

占用的字节不大于4字节,分为两种情况:

对于图像的真实数据,这里存放的是图像真实数据的偏移量,占4个字节,要通过索引才能正确访问图像数据

对于其他的数据,如该type类型占用1个字节,lengths4,那么总的字节为4个,这里有4个值,每个值占用1各字节,存储是按照文件顺序存储。

IFD与DE的结构示意图:

 

3、重要的TAG

NewSubfileType  ID: 0xFE

NewSubfileType = 1 提供低分辨率的缩略图

NewSubfileType = 0 高分辨率图像,RAW。第一个tag就是这个属性。一般都等于0。 

ImageWidth ID: 0x100

图形宽

ImageLength ID: 0x101

图形高

BitsPerSample ID: 0x102

每个像素点的采样位数。

Compression ID: 0x103

需要关注的有以下两个值:

Compression=1:没有压缩

Compression=7:JPEG压缩。如果是RGB图像并且SamplesPerPixel3,则是标准的有损JPEG压缩。如果是CFA图像,则是Lossless JPEG。

PhotometricInterpretation   ID: 0x106

0 = WhiteIsZero. 应用于灰度或者二值图像, 0对应最亮灰度。

1 = BlackIsZero. 应用于灰度或者二值图像. 0对应最暗灰度。

2 = RGB. 正常RGB图像,存储顺序为R,G,B。

3 = Palette color. 索引图像。

32803 = CFA (Color Filter Array)  RAW图像数据
四种可设bayer模式,我们相机是GRBG,模式0。验证颜色正确。

GR RG BG GB

BG RB GR RG

StripOffsets ID: 0x111

图像数据起始字节相对于文件开始处的位置

RowsPerStrip ID: 0x116

表示图像有几行扫描线,实际上等于图像高度

StripByteCountsID: 0x117

图像数据字节总数

 

 

 

 

 

4、方案

通过修改adobesdk把我们相机的原始RAW数据转为DNG文件序列。Adobe的剪辑软件Adobe Premiere Pro CC 导入文件序列,转为MXF。通过VLC播放MXF文件。

目前通过SDK转的DNG,修改bit流后没有锯齿,设置CFA模式为GRBR后颜色正常。

存在问题是转后的DNG,可以预览,不能用Adobe Premiere Pro CC导入。

5、参考

http://www.cnblogs.com/adong7639/p/4446828.html

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!