DNG格式解析

Author:Maddock

Date:2015.04.22

转载请注明出处:http://www.cnblogs.com/adong7639/p/4446828.html

DNG格式基本概念

DNG格式是在TIFF的基础上扩展出来的,要了解DNG,需要清楚TIFF, TIFF/EP, DNG,RAW之间的关系。

TIFF/EP

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

TIFF/EP的全称是"Tag Image File Format / Electronic Photography?"。 它是一个名为"Electronic still-picture imaging – Removable memory – Part 2: TIFF/EP image data format"ISO标准, 标准号为ISO?12234-2。TIFF/EP对TIFF文件扩展部分标记属性。

RAW

RAW文件包含创建一个可视图像所必须的相机传感器数据信息。RAW文件的结构,包括ISO标准的RAW图像格式ISO 12234-2 ,TIFF / EP,往往遵循一个共同的模式,那就是:

  1. 一个短的文件头,它通常包含文件的字节顺序,文件标识符和主数据的文件偏移量摄像传感器元数据,用来描述图像传感器的数据,包括传感器的尺寸, 颜色滤波矩阵(color filter array)的属性和它的颜色配置文件
  2. 列入任何CMS环境或数据库中需要的图像元数据。这些措施包括曝光设定,相机/扫描仪/镜头模型,拍摄/扫描日期(和可选的位置信息),创作信息和其他。一些原始文件包含可交换图像格式的标准化元数据节;
  3. 图像缩略图;
  4. 可选的JPEG格式缩小尺寸的图像,可用于快速预览;
  5. 在电影胶片扫描中,无论是文件序列的时间码,序列码或帧编号都代表在扫描卷轴中的帧顺序。这个项目允许文件被被按帧顺序排列(不依赖于它的文件名?);
  6. 传感器图像数据;

许多RAW格式, 包括 3FR (Hasselblad), DCR, K25, KDC (Kodak), IIQ (Phase One), CR2 (Canon), ERF (Epson), MEF (Mamiya), MOS (Leaf), NEF (Nikon), ORF (Olympus), PEF (Pentax), RW2 (Panasonic) and ARW, SRF, SR2 (Sony), 都是基于TIFF格式。 这些文件可能在许多方面偏离TIFF标准,包括使用一个非标准的文件头,列入额外的图像标记和一些标签的数据加密。

DNG

DNG(Digital Negative)是Adobe开发的一种开放的raw image file format,主要是为了统一不同厂商raw格式。里面使用的tag基本上都定义在TIFF或者TIFF/EP中, 在DNG Sepcification中只是定义或者建议了数据的组织方式,颜色空间的转换等等。

TIFF, TIFF/EP, DNG, RAW之间的关系

  1. TIFF和DNG同为Specification,分别定义了后缀名为.tif/.tiff和.dng的文件格式同时在TIFF Specification也定义个baseline及部分扩展的tag。
  2. TIFF/EP则定义并规范了在电子影像中所使用的TAG。
  3. DNG同时与TIFF和TIFF/EP兼容,并包含了EXIF和XMP信息。DNG实际上就是扩张的TIFF, 把DNG的扩展名改成TIF就可以直接预览图片。

在DNG出现以前,各个数码相机制造商都有自己的格式,比如Canon(cr2/crw), Nikon(nef), Olympus(orf), Pentex(pef)等等。之所以出现这么多格式,一方面的原因是在这之前没有统一的raw格式, 但更重要的是,各个厂商希望用这个只对自己公开的数据格式来保护自己的私密信息。Adobe推出DNG希望能一统raw的天下。

DNG格式的结构

TIFF6.0格式结构

TIFF文件中的三个关键词是:图像文件头Image File Header(IFH); 图像文件目录Image File Directory(IFD)和目录项Directory Entry(DE)。每一幅图像是以8字节的IFH开始的, 这个IFH指向了第一个IFD。IFD包含了图像的各种信息, 同时也包含了一个指向实际图像数据的指针。

IFH的构成

Byte 0-1: 字节顺序标志位, 值为II或者MM。II表示小字节在前, 又称为little-endian。MM表示大字节在前,又成为big-endian。在解析DNG文件时,读取图像数据需要根据ByteOrder来正确获取数据。

Byte 2-3: TIFF的标志位,一般都是42,表示该图像为tiff格式。

Byte 4-7: 第一个IFD的偏移量。可以在任意位置, 但必须是在一个字的边界,也就是说必须是2的整数倍。

?

IFD的构成(0代表此IFD的起始位置)

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

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

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

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

图2-1 IFH的结构

图2-2 IFD与DE的结构

DE的构成

简单说,一个DE就是一幅图像的某一个属性。例如图像的大小、分辨率、是否压缩、像素的行列数、一个像素由几位 表示(1位代表黑白两色,8位代表256色等等)等。其中:tag成员是该属性的编号,在图像文件目录中,它是按照升序排列的。我们可以通过读 这些编号,然后到TIF格式官方白皮书中查找相应的含义。属性是用数据来表示的,那么type就是代表着该数据的类型。每个DE共12个字节:

Byte 0-1: 此TAG的唯一标识

Byte 2-3: type数据类型。

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

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

???? 对于valueOffset,这里有几个比较特殊的情况:

  1. 占用的字节对于4个,那么valueOffset存储的是文件指针的偏移量,通过文件指针可以索引到该属性的具体值。真正的数据,存储是按照文件顺序存储。

  1. 占用的字节不大于4字节,分为两种情况:
  2. 对于图像的真实数据,这里存放的是图像真实数据的偏移量,占4个字节,要通过索引才能正确访问图像数据。
  3. 对于其他的数据,如该type类型占用1个字节,lengths为4,那么总的字节为4个,这里有4个值,每个值占用1各字节,存储是按照文件顺序存储。

如果type类型占用2个字节,lengths为1,那么总的字节为2个,这里有1个值,存储按照文件顺序存储,后面的数据为空。

Value1 0

对于type的数据类型,TIF官方指定的有5种数据类型。

type=1就是BYTE类型(8位无标记整数)

type=2是ASCII类型(7位ASCII码加1位二进制0)

type=3是SHORT类型 (16位无标记整数)

type=4是LONG 类型(32位无标记整数)

type=5是RATIONAL类型(2个LONG,第一个是分子,第二个是分母)。

之后新增了7种类型:

6 = SBYTE An 8-bit signed (twos-complement) integer.

7 = UNDEFINED An 8-bit byte that may contain anything, depending on

the definition of the field.

8 = SSHORT A 16-bit (2-byte) signed (twos-complement) integer.

9 = SLONG A 32-bit (4-byte) signed (twos-complement) integer.

10 = SRATIONAL Two SLONG‘s: the first represents the numerator of a

fraction, the second the denominator.

11 = FLOAT Single precision (4-byte) IEEE format.

12 = DOUBLE Double precision (8-byte) IEEE format.

TIFF的基本tags属性

表中的tags可以在http://www.awaresystems.be/imaging/tiff/tifftags/tileoffsets.html中查询。也可以参看TIFF6.0规范和adobe 提供的dng文档。

比较重要的Tag属性:

SubIFDs

DNG规范中推荐使用子IFD的属性结构

IFD0 {

SubIFD0

SubIFD1

}

IFD0通常是提供一个低分辨便于预览的缩略图,NewSubfileType = 1

SubIFD通常提供高分辨的图像,如RAW数据或者YUV数据NewSubfileType = 0;

Adobe的DNG规范中不支持链式的存储,因此用于预览的IFD中至少要有一个SubIFD

PhotometricInterpretation

????颜色空间 SHORT 长度为1

0 = WhiteIsZero. 应用于灰度或者二值图像, 0对应最亮灰度.
1 = BlackIsZero. 应用于灰度或者二值图像. 0对应最暗灰度。
2 = RGB. 正常RGB图像,存储顺序为R,G,B.
3 = Palette color. 索引图像, ColorMap必须定义,SamplesPerPixel必须1.

32803 = CFA (Color Filter Array) 表征RAW图像数据

CFA矩阵

Filters 0x16161616:???? 0x61616161:????0x49494949:????0x94949494:

????Bayer模式1 Bayer模式2 Bayer模式3 Bayer模式4

???? 0 1 2 3 4 5???? 0 1 2 3 4 5???? 0 1 2 3 4 5???? 0 1 2 3 4 5

????0 B G B G B G????0 G R G R G R????0 G B G B G B????0 R G R G R G

????1 G R G R G R????1 B G B G B G????1 R G R G R G????1 G B G B G B

????2 B G B G B G????2 G R G R G R????2 G B G B G B????2 R G R G R G

????3 G R G R G R????3 B G B G B G????3 R G R G R G????3 G B G B G B

CFAPlaneColor Default 0, 1, 2 (red, green, blue)

R 0 G 1 B 2

Bayer模式1

B G B G 2 1 2 1

G R G R 1 0 1 0

B G B G 2 1 2 1

CFAPattern利用cfa_pat矩阵来存储R G G B 4个像素点

????cfa_pat[0] cfa_pat[1]

????cfa_pat[2] cfa_pat[3]

????R 0 G 1 B 2

????filters = 0x16161616

????B G 2 1

????G R 1 0

????filters = 0x61616161

????G R 1 0

????B G 2 1

????filters = 0x49494949

????G B 1 2

????R G 0 1

????filters = 0x94949494

????R G 0 1

????G B 1 2

表 2-1 TIFF文件IFD中的tag属性


tag


名称


简短描述


十进制码


十六进制


254


00FE


NewSubfileType


新的子文件类型标识 LONG 长度为1

用比特来标识图像的类型

Bit0如果是1代表缩略图

Bit1如果是1代表多页图像中的某一页

Bit2如果是1代表它是透明度掩码图像

其余的位数暂时没有定义。与SubfileType的是,此Tag用比特位来区分文件类型而不是用值来区分


255


00FF


SubfileType


子文件类型标识 SHORT 长度为1

1 全分辨率图像

2 缩小分辨率的图像

3 多页图像的某一页

过时的Tag,已不再使用。


256


0100


ImageWidth


图像宽度 SHORT或者LONG 长度为1


257


0101


ImageLength


图像高度 SHORT或者LONG 长度为1


258


0102


BitsPerSample


每个分量的Bit数 SHORT 长度为SamplesPerPixel


259


0103


Compression


压缩类型 SHORT 长度为1

随着TIFF的不断扩张,目前支持多达几十种的压缩方式。最需要关注的有以下两个值:

Compression=1:
没有压缩

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


262


0106


PhotometricInterpretation


颜色空间 SHORT 长度为1

0 = WhiteIsZero. 应用于灰度或者二值图像, 0对应最亮灰度.
1 = BlackIsZero. 应用于灰度或者二值图像. 0对应最暗灰度。
2 = RGB. 正常RGB图像,存储顺序为R,G,B.
3 = Palette color. 索引图像, ColorMap必须定义,SamplesPerPixel必须1.

32803 = CFA (Color Filter Array)


263


0107


Threshholding


定义了转换成二值图像的阈值,忽略之


264


0108


CellWidth


The width of the dithering or halftoning matrix used to create a dithered or halftoned bilevel file.


265


0109


CellLength


The length of the dithering or halftoning matrix used to create a dithered or halftoned bilevel file.


266


010A


FillOrder


在同一字节中的逻辑顺序。一般不做定义,要定义的话建议用1


270


010E


ImageDescription


字符串,
对图像的描述


271


010F


Make


字符串,
生产厂商的描述


272


0110


Model


字符串


273


0111


StripOffsets


每个Strip的偏移量 SHORT或者LONG

N = StripsPerImage for PlanarConfiguration equal to 1; N = SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2


274


0112


Orientation


The orientation of the image with respect to the rows and columns.


277


0115


SamplesPerPixel


每个象素的通道数 SHORT 长度为1


278


0116


RowsPerStrip


每个Strip有多少行 SHORT或者LONG 长度为1。Default是无限大

StripsPerImage = floor ((ImageLength + RowsPerStrip - 1) / RowsPerStrip).


279


0117


StripByteCounts


每个Strip的长度 SHORT或者LONG

N = StripsPerImage for PlanarConfiguration equal to 1; N = SamplesPerPixel * StripsPerImage for PlanarConfiguration equal to 2


280


0118


MinSampleValue


The minimum component value used.


281


0119


MaxSampleValue


The maximum component value used.


282


011A


XResolution


The number of pixels per ResolutionUnit in the ImageWidth direction.


283


011B


YResolution


The number of pixels per ResolutionUnit in the ImageLength direction.


284


011C


PlanarConfiguration


How the components of each pixel are stored.


288


0120


FreeOffsets


For each string of contiguous unused bytes in a TIFF file, the byte offset of the string.


289


0121


FreeByteCounts


For each string of contiguous unused bytes in a TIFF file, the number of bytes in the string.


290


0122


GrayResponseUnit


The precision of the information contained in the Gray Response Curve.


291


0123


GrayResponseCurve


For grayscale data, the optical density of each possible pixel value.


296


0128


ResolutionUnit


The unit of measurement for XResolution and YResolution.


305


0131


Software


Name and version number of the software package(s) used to create the image.


306


0132


DateTime


Date and time of image creation.


315


013B


Artist


Person who created the image.


316


013C


HostComputer


The computer and/or operating system in use at the time of image creation.


320


0140


ColorMap


调色板


338


0152


ExtraSamples


Description of extra components.


33432


8298


Copyright


Copyright notice.


下面为扩展的tags(TIFF/EP)


269


010D


DocumentName


The name of the document from which this image was scanned.


285


011D


PageName


The name of the page from which this image was scanned.


286


011E


XPosition


X position of the image.


287


011F


YPosition


Y position of the image.


292


0124


T4Options


Options for Group 3 Fax compression


293


0125


T6Options


Options for Group 4 Fax compression


297


0129


PageNumber


The page number of the page from which this image was scanned.


301


012D


TransferFunction


Describes a transfer function for the image in tabular style.


317


013D


Predictor


A mathematical operator that is applied to the image data before an encoding scheme is applied.


318


013E


WhitePoint


The chromaticity of the white point of the image.


319


013F


PrimaryChromaticities


The chromaticities of the primaries of the image.


321


0141


HalftoneHints


Conveys to the halftone function the range of gray levels within a colorimetrically-specified image that should retain tonal detail.


322


0142


TileWidth


The tile width in pixels. This is the number of columns in each tile.


323


0143


TileLength


The tile length (height) in pixels. This is the number of rows in each tile.


324


0144


TileOffsets


For each tile, the byte offset of that tile, as compressed and stored on disk.


325


0145


TileByteCounts


For each tile, the number of (compressed) bytes in that tile.


326


0146


BadFaxLines


Used in the TIFF-F standard, denotes the number of ‘bad‘ scan lines encountered by the facsimile device.


327


0147


CleanFaxData


Used in the TIFF-F standard, indicates if ‘bad‘ lines encountered during reception are stored in the data, or if ‘bad‘ lines have been replaced by the receiver.


328


0148


ConsecutiveBadFaxLines


Used in the TIFF-F standard, denotes the maximum number of consecutive ‘bad‘ scanlines received.


330


014A


SubIFDs


Offset to child IFDs.


332


014C


InkSet


The set of inks used in a separated (PhotometricInterpretation=5) image.


333


014D


InkNames


The name of each ink used in a separated image.


334


014E


NumberOfInks


The number of inks.


336


0150


DotRange


The component values that correspond to a 0% dot and 100% dot.


337


0151


TargetPrinter


A description of the printing environment for which this separation is intended.


339


0153


SampleFormat


Specifies how to interpret each data sample in a pixel.


340


0154


SMinSampleValue


Specifies the minimum sample value.


341


0155


SMaxSampleValue


Specifies the maximum sample value.


342


0156


TransferRange


Expands the range of the TransferFunction.


343


0157


ClipPath


Mirrors the essentials of PostScript‘s path creation functionality.


344


0158


XClipPathUnits


The number of units that span the width of the image, in terms of integer ClipPath coordinates.


345


0159


YClipPathUnits


The number of units that span the height of the image, in terms of integer ClipPath coordinates.


346


015A


Indexed


Aims to broaden the support for indexed images to include support for any color space.


347


015B


JPEGTables


JPEG quantization and/or Huffman tables.


351


015F


OPIProxy


OPI-related.


400


0190


GlobalParametersIFD


Used in the TIFF-FX standard to point to an IFD containing tags that are globally applicable to the complete TIFF file.


401


0191


ProfileType


Used in the TIFF-FX standard, denotes the type of data stored in this file or IFD.


402


0192


FaxProfile


Used in the TIFF-FX standard, denotes the ‘profile‘ that applies to this file.


403


0193


CodingMethods


Used in the TIFF-FX standard, indicates which coding methods are used in the file.


404


0194


VersionYear


Used in the TIFF-FX standard, denotes the year of the standard specified by the FaxProfile field.


405


0195


ModeNumber


Used in the TIFF-FX standard, denotes the mode of the standard specified by the FaxProfile field.


433


01B1


Decode


Used in the TIFF-F and TIFF-FX standards, holds information about the ITULAB (PhotometricInterpretation = 10) encoding.


434


01B2


DefaultImageColor


Defined in the Mixed Raster Content part of RFC 2301, is the default color needed in areas where no image is available.


512


0200


JPEGProc


Old-style JPEG compression field. TechNote2 invalidates this part of the specification.


513


0201


JPEGInterchangeFormat


Old-style JPEG compression field. TechNote2 invalidates this part of the specification.


514


0202


JPEGInterchangeFormatLength


Old-style JPEG compression field. TechNote2 invalidates this part of the specification.


515


0203


JPEGRestartInterval


Old-style JPEG compression field. TechNote2 invalidates this part of the specification.


517


0205


JPEGLosslessPredictors


Old-style JPEG compression field. TechNote2 invalidates this part of the specification.


518


0206


JPEGPointTransforms


Old-style JPEG compression field. TechNote2 invalidates this part of the specification.


519


0207


JPEGQTables


Old-style JPEG compression field. TechNote2 invalidates this part of the specification.


520


0208


JPEGDCTables


Old-style JPEG compression field. TechNote2 invalidates this part of the specification.


521


0209


JPEGACTables


Old-style JPEG compression field. TechNote2 invalidates this part of the specification.


529


0211


YCbCrCoefficients


The transformation from RGB to YCbCr image data.


530


0212


YCbCrSubSampling


Specifies the subsampling factors used for the chrominance components of a YCbCr image.


531


0213


YCbCrPositioning


Specifies the positioning of subsampled chrominance components relative to luminance samples.


532


0214


ReferenceBlackWhite


Specifies a pair of headroom and footroom image data values (codes) for each pixel component.


559


022F


StripRowCounts


Defined in the Mixed Raster Content part of RFC 2301, used to replace RowsPerStrip for IFDs with variable-sized strips.


700


02BC


XMP


XML packet containing XMP metadata


32781


800D


ImageID


OPI-related.


34732


87AC


ImageLayer


Defined in the Mixed Raster Content part of RFC 2301, used to denote the particular function of this Image in the mixed raster scheme.

?
Private TIFF Tags for raw and DNG TAGS


32932


80A4


Wang Annotation


Annotation data, as used in ‘Imaging for Windows‘.


33445


82A5


MD FileTag


Specifies the pixel data format encoding in the Molecular Dynamics GEL file format.


33446


82A6


MD ScalePixel


Specifies a scale factor in the Molecular Dynamics GEL file format.


33447


82A7


MD ColorTable


Used to specify the conversion from 16bit to 8bit in the Molecular Dynamics GEL file format.


33448


82A8


MD LabName


Name of the lab that scanned this file, as used in the Molecular Dynamics GEL file format.


33449


82A9


MD SampleInfo


Information about the sample, as used in the Molecular Dynamics GEL file format.


33450


82AA


MD PrepDate


Date the sample was prepared, as used in the Molecular Dynamics GEL file format.


33451


82AB


MD PrepTime


Time the sample was prepared, as used in the Molecular Dynamics GEL file format.


33452


82AC


MD FileUnits


Units for data in this file, as used in the Molecular Dynamics GEL file format.


33550


830E


ModelPixelScaleTag


Used in interchangeable GeoTIFF files.


33723


83BB


IPTC


IPTC (International Press Telecommunications Council) metadata.


33918


847E


INGR Packet Data Tag


Intergraph Application specific storage.


33919


847F


INGR Flag Registers


Intergraph Application specific flags.


33920


8480


IrasB Transformation Matrix


Originally part of Intergraph‘s GeoTIFF tags, but likely understood by IrasB only.


33922


8482


ModelTiepointTag


Originally part of Intergraph‘s GeoTIFF tags, but now used in interchangeable GeoTIFF files.


34264


85D8


ModelTransformationTag


Used in interchangeable GeoTIFF files.


34377


8649


Photoshop


Collection of Photoshop ‘Image Resource Blocks‘.


34665


8769


Exif IFD


A pointer to the Exif IFD.


34675


8773


ICC Profile


ICC profile data.


34735


87AF


GeoKeyDirectoryTag


Used in interchangeable GeoTIFF files.


34736


87B0


GeoDoubleParamsTag


Used in interchangeable GeoTIFF files.


34737


87B1


GeoAsciiParamsTag


Used in interchangeable GeoTIFF files.


34853


8825


GPS IFD


A pointer to the Exif-related GPS Info IFD.


34908


885C


HylaFAX FaxRecvParams


Used by HylaFAX.


34909


885D


HylaFAX FaxSubAddress


Used by HylaFAX.


34910


885E


HylaFAX FaxRecvTime


Used by HylaFAX.


37724


935C


ImageSourceData


Used by Adobe Photoshop.


40965


A005


Interoperability IFD


A pointer to the Exif-related Interoperability IFD.


42112


A480


GDAL_METADATA


Used by the GDAL library, holds an XML list of name=value ‘metadata‘ values about the image as a whole, and about specific samples.


42113


A481


GDAL_NODATA


Used by the GDAL library, contains an ASCII encoded nodata or background pixel value.


50215


C427


Oce Scanjob Description


Used in the Oce scanning process.


50216


C428


Oce Application Selector


Used in the Oce scanning process.


50217


C429


Oce Identification Number


Used in the Oce scanning process.


50218


C42A


Oce ImageLogic Characteristics


Used in the Oce scanning process.


50706


C612


DNGVersion


Used in IFD 0 of DNG files.


50707


C613


DNGBackwardVersion


Used in IFD 0 of DNG files.


50708


C614


UniqueCameraModel


Used in IFD 0 of DNG files.


50709


C615


LocalizedCameraModel


Used in IFD 0 of DNG files.


50710


C616


CFAPlaneColor


Used in Raw IFD of DNG files.


50711


C617


CFALayout


Used in Raw IFD of DNG files.


50712


C618


LinearizationTable


Used in Raw IFD of DNG files.


50713


C619


BlackLevelRepeatDim


Used in Raw IFD of DNG files.


50714


C61A


BlackLevel


Used in Raw IFD of DNG files.


50715


C61B


BlackLevelDeltaH


Used in Raw IFD of DNG files.


50716


C61C


BlackLevelDeltaV


Used in Raw IFD of DNG files.


50717


C61D


WhiteLevel


Used in Raw IFD of DNG files.


50718


C61E


DefaultScale


Used in Raw IFD of DNG files.


50719


C61F


DefaultCropOrigin


Used in Raw IFD of DNG files.


50720


C620


DefaultCropSize


Used in Raw IFD of DNG files.


50721


C621


ColorMatrix1


Used in IFD 0 of DNG files.


50722


C622


ColorMatrix2


Used in IFD 0 of DNG files.


50723


C623


CameraCalibration1


Used in IFD 0 of DNG files.


50724


C624


CameraCalibration2


Used in IFD 0 of DNG files.


50725


C625


ReductionMatrix1


Used in IFD 0 of DNG files.


50726


C626


ReductionMatrix2


Used in IFD 0 of DNG files.


50727


C627


AnalogBalance


Used in IFD 0 of DNG files.


50728


C628


AsShotNeutral


Used in IFD 0 of DNG files.


50729


C629


AsShotWhiteXY


Used in IFD 0 of DNG files.


50730


C62A


BaselineExposure


Used in IFD 0 of DNG files.


50731


C62B


BaselineNoise


Used in IFD 0 of DNG files.


50732


C62C


BaselineSharpness


Used in IFD 0 of DNG files.


50733


C62D


BayerGreenSplit


Used in Raw IFD of DNG files.


50734


C62E


LinearResponseLimit


Used in IFD 0 of DNG files.


50735


C62F


CameraSerialNumber


Used in IFD 0 of DNG files.


50736


C630


LensInfo


Used in IFD 0 of DNG files.


50737


C631


ChromaBlurRadius


Used in Raw IFD of DNG files.


50738


C632


AntiAliasStrength


Used in Raw IFD of DNG files.


50740


C634


DNGPrivateData


Used in IFD 0 of DNG files.


50741


C635


MakerNoteSafety


Used in IFD 0 of DNG files.


50778


C65A


CalibrationIlluminant1


Used in IFD 0 of DNG files.


50779


C65B


CalibrationIlluminant2


Used in IFD 0 of DNG files.


50780


C65C


BestQualityScale


Used in Raw IFD of DNG files.


50784


C660


Alias Layer Metadata


Alias Sketchbook Pro layer usage description.

?

DNG数据获取

  1. 利用文件指针打开.DNG文件,读取DNG的IFH信息,获取dng数据的字节顺序byteorder和第一个IFD的字节偏移。
  2. 定位到第一个IFD位置,获取DE的数目。依次遍历DE,获取每一个DE的tags,type,count,valueOffsets.
  3. 根据文档的说明查询对应的tags属性,获取该IFD图像的相关信息。根据需要处理的数据,主要获取以下tags数据:

imagewidth

imagehight

TileOffsets

BitsPerSample

Compaession

PhotometricInterpretation

CFAPlaneColor

SubIFDs

????WhiteBalance

TIFF Tag AsShotNeutral


IFD



Image


Code

?
50728 (hex 0xC628)


Name

?
AsShotNeutral


LibTiff name

?
TIFFTAG_ASSHOTNEUTRAL


Type

?
SHORT or RATIONAL


Count

?
ColorPlanes


Default

?
None

Used in IFD 0 of DNG files.

AsShotNeutral specifies the selected white balance at time of capture, encoded as the coordinates of a perfectly neutral color in linear reference space values. The inclusion of this tag precludes the inclusion of the AsShotWhiteXY tag.

DNG数据的第一个IFD提供了预览图,在这个IFD中包含了其他IFD的偏移位置,存储在SubIFDs的信息中。因此要获取原始大图的RAW数据,需要通过第一个IFD的SubIFDs,索引到大图的IFD。

?

数据处理伪代码

FILE *fp = fopen("test.dng",wb);

byteorder = fread(fp,2);

firstifdpos = fread(fp,4);

firstifd = fseek(fp, firstifdpos);

denum = fread(fp,2);

//解析DNG头文件

for i = 1 : denum

{

????tags = fread(fp,2);

type = fread(fp,2);

????count = fread(fp,4);

????value = fread(fp,4);

????switch(tags)

????{

????????case 256:

????????????get imgwidht;

????????case 257:

????????????get imgheigh;

????????????......

????????Case 324:

????????????Get dataoffsets;

????????…….

????????Case 330:

????????????Process subIFD1 ,subIFD2

????????……

????}

}

?

Rawimg = fread(fp, dataoffsets);

……

//数据后处理

……

原始的RAW数据存储形式

? 主流的数码相机传感器,主要有CCD、CMOS和Foveon X3。CCD或CMOS这些图像传感器都几乎归类为Mosaic Sensor(马赛克感光元件),或称为Color Filter Array(彩色滤镜阵列)元件。Foveon X3成像技术的图像传感器,不属于上述的类别。,这里主要只简单地讲一下CCD/ CMOS的工作方式,对我们使用raw就已经足够了。?
??? 数码相机传感器是由横竖两个方向密集排列的感光元件(CCD或CMOS)组成的一个二维矩阵,常见的有图2-3示的4种Bayer模式的排列方式,每个CCD就对应一个像素。其中R感应红光、G感应绿光、B感应蓝光,而在Bayer模式中G是R和B的两倍(因为我们的眼睛对绿色更敏感)?

图2-3 四种Bayer矩阵排列形式

在矩阵内的每个CCD或CMOS只是用来感受光子的能量,因应进入光线的强度而产生对应比例的电荷,然后将这些电荷信息汇集并经过放大,储存起来,我们可以这样去想象一下充满电荷的CCD/CMOS,就像下图一样:。而应当知道的是,RAW纪录的只是每个像素位置的电荷值,它是没有记录任何的颜色信息的。所以CCD是"色盲"的,也就是说:?RAW文件只是灰度文件而已,如图2-5所示。

当Image Sensor往外逐行输出数据时,像素的序列为GRGRGR.../BGBGBG...(顺序RGB)。这样阵列的Sensor设计,使得RGB传感器减少到了全色传感器的1/3,如下所示。

图 2-4 CMOS光子感应示意图

因此任何一个RAW Converter(如Photoshop的Camera RAW Plugin,Bibble、Phrase One C1 Pro、RawShooter essentials 2005,各厂商自带的Raw转换软件等)的作用就是将这些像素所记录的亮度信息转换成为肉眼所能看见的颜色信息。由于现在的CCD/CMOS与Foveon X3的原理不一样,所以对于CCD/CMOS而言,要获得一个像素上的颜色值,必须从邻近的像素中获取信息来进行一种叫做"反马赛克"的运算?(Foveon X3不需要这样),从而得到该位置的颜色值,如图2-6所示的效果。

图2-5 原始的RaW数据

????????????????????????????????????图2-6 插值颜色后的彩色数据

参考文档

dng_spec_1.4.0.0.pdf

TIFF6.pdf

http://zh.wikipedia.org/wiki/TIFF

http://en.wikipedia.org/wiki/TIFF/EP

http://blog.csdn.net/pkeel/article/details/1490823

http://blog.csdn.net/han_jiang_xue/article/details/8266207

http://www.siliconimaging.com/RGB%20Bayer.htm

http://www.awaresystems.be/imaging/tiff/tifftags/search.html

时间: 2024-11-13 07:59:41

DNG格式解析的相关文章

开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载

OkHttpPlus介绍 项目地址:https://github.com/ZhaoKaiQiang/OkHttpPlus 主要功能:OkHttp封装,支持GET.POST.UI线程回调.JSON格式解析.链式调用.小文件上传下载及进度监听等功能 为什么要写这么一个库呢? 首先,是因为OkHttp在4.4之后已经作为底层的Http实现了,所以OkHttp这个库很强大,值得我们学习. 其次,在我看来,OkHttp使用起来不如Volley方便,OkHttp的回调都是在工作线程,所以如果在回调里面操作V

Python pyc格式解析

简书链接:http://www.jianshu.com/p/03d81eb9ac9b 这篇文章只是纯粹分析python pyc文件格式,主要是关于pyc在文件中的存储方式进行了解析.pyc是python字节码在文件中存储的方式,而在虚拟机运行时环境中对应PyCodeObject对象.关于PyFrameObject以及PyFunctionObject等运行时结构,后续希望学习透彻了能够一并分析. 1.示例文件 源文件test.py s = "hello" def func(): a =

ELF格式解析库之抽象数据类型

抽象?抽谁的象? ELF是一种链接执行格式,它规定了对于一个ELF文件的基本数据类型是什么样的.可是,要解析一个ELF文件,而这个ELF文件或者是32Bits 或者是 64Bits,反正字长是未定的,怎么办?难道我们要定义两套解析的接口,以对应不同的字长的ELF文件吗?如果要这样做,不是不可以,只是那样做为接口的设计增加了太大的负担.这里我们采用"抽象"的方式,将已有的两套基础数据结构封装成一个兼容的数据结构.这样,我们设计解析接口时,可以做到尽量的简化,大大的减轻了工作量. 因此,这

视音频数据处理入门:FLV封装格式解析

===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理入门:PCM音频采样数据处理 视音频数据处理入门:H.264视频码流解析 视音频数据处理入门:AAC音频码流解析 视音频数据处理入门:FLV封装格式解析 视音频数据处理入门:UDP-RTP协议解析 ===================================================

TS格式解析

1.TS格式介绍 TS:全称为MPEG2-TS.TS即"Transport Stream"的缩写.它是分包发送的,每一个包长为188字节(还有192和204个字节的包).包的结构为,包头为4个字节(第一个字节为0x47),负载为184个字节.在TS流里可以填入很多类型的数据,如视频.音频.自定义信息等.MPEG2-TS主要应用于实时传送的节目,比如实时广播的电视节目.MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的.简单地说,将DVD上的VOB文件的前面一截c

ELF格式解析库之提取信息

看,宝藏就在那儿 在上一篇文章中,我们提到用按图索骥比喻库的初始化过程,那么现在有了地图,接下来的事情就是去寻找我们感兴趣的宝藏了.这个宝藏可能是一个ELF文件的程序文本段,也有可能是程序的某个不知名的代码段,这些都取决于你想要什么信息.我建议你去阅读ELF 的官方标准,那里边讲的比较清楚. 我这里只是实现了几个提取诸如:程序的大小端,能执行的CPU位数,程序的入口点,以及获得程序的所有节的编号和根据节的编号获取该节的详细信息. 提取信息:程序的大小端 1: long ELF_GetELFEnd

PES,TS,PS,RTP等流的打包格式解析之PES流

PES,TS,PS,RTP等流的打包格式解析之PES流 版权声明:本文为博主原创文章,未经博主允许不得转载. 因为工作接触到了各种不同的音视频封装格式,常见的国标PS流,onvif的RTP流和TS流等,都说好记性不如烂笔头,抽空总结下,也好在以后能随时查阅,因水平问题,可能会有地方有疏漏和问题,还请指教 一.PES流 PES流是对原始ES流进行的第一层封装,PES流的基本单位是PES包,由包头和payload组成,ES流即音视频裸流,是从编码器里面出来的原始视频音频流:ES流只包含一种内容,里面

ELF格式解析库之初始化

寻宝要先设计路线图 对一个ELF文件来说,它里边装个一个程序的所有信息.我们想要拿的程序信息就在这个ELF文件的某个地址处.可是我们根本就不知道这个具体的地址是哪个,怎么办?举个较形象的例子来描述我们将要的做的事情.峨眉山的山道上放着一大箱金子,我们想搞到这箱黄金.所以在动手之前,我们应该先搞清楚这箱黄金具体位置在哪条山路上,然后设计出几条可行的路线图,接着才是沿着先前设计好的路线去找宝藏.只不过,在这里我们要找的黄金变成了程序某个部分的信息,而那座峨眉山则变成了一个ELF文件. 所以,寻宝要先

ELF格式解析库之基本数据类型

ELF格式简介 ELF是现代linux/unix流行的程序可执行链接格式,它有官方定义文档,具体的资料在Tool Interface Standard Executable and Linking Format Specification version 1.2 有其对应的详细描述.我在这里不会讲述关于这个格式详细描述,如果我叙述的有什么不对的地方,欢迎指正出来.当然一切都以官方的参考文档为标准,建议您在阅读本文的时候,手边最好有一份官方定义文档参考. ELF由三个头表描述:ELF header