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是一个灵活适应性强的文件格式。通过在文件标头中使用TAG"标签",它能够在一个文件中处理多幅图像和数据。标签能够标明图像的如图像大小这样的基本几何尺寸,或者定义图像数据是如何排列的,或者是否使用了各种各样的图像压缩选项。并且标签可扩展。
一个ISO标准,定义了TIFF中的TAG属性。
2、TIFF6.0结构
Tiff格式由三部分构成 IFH,IFD,DE。UE打开文件切取的部分数据。
从FE 00的红色框选开始都表示Tag的ID。
l 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个字节,lengths为4,那么总的字节为4个,这里有4个值,每个值占用1各字节,存储是按照文件顺序存储。
IFD与DE的结构示意图:
l NewSubfileType (ID: 0xFE)
NewSubfileType = 1 提供低分辨率的缩略图
NewSubfileType = 0 高分辨率图像,RAW。第一个tag就是这个属性。一般都等于0。
l ImageWidth (ID: 0x100)
图形宽
l ImageLength (ID: 0x101)
图形高
l BitsPerSample (ID: 0x102)
每个像素点的采样位数。
l Compression (ID: 0x103)
需要关注的有以下两个值:
Compression=1:没有压缩
Compression=7:JPEG压缩。如果是RGB图像并且SamplesPerPixel=3,则是标准的有损JPEG压缩。如果是CFA图像,则是Lossless JPEG。
l 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
l StripOffsets (ID: 0x111)
图像数据起始字节相对于文件开始处的位置
l RowsPerStrip (ID: 0x116)
表示图像有几行扫描线,实际上等于图像高度
l StripByteCounts(ID: 0x117)
图像数据字节总数
4、方案
通过修改adobe的sdk把我们相机的原始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
来源:CSDN
作者:Linuxxulin
链接:https://blog.csdn.net/Linuxxulin/article/details/54645691