Archie osgEarth Step By Step③tif及geotiff文件格式简明分析

来源:互联网 发布:ipad app下载软件 编辑:程序博客网 时间:2024/06/07 08:43

转自:http://blog.csdn.net/archielau/article/details/8480061

简介

TIF(TIFF)是可扩充标记的文件,为图像文件格式。  百度链接  

  endian翻译为“字节序”,又称端序尾序。在计算机科学领域中,字节序是指存放多字节数据的字节(byte)的顺序,典型的情况是整数在内存中的存放方式和网络传输的传输顺序。Endianness有时候也可以用指位序(bit)。

  一般而言,字节序指示了一个UCS-2字符的哪个字节存储在低地址。如果LSByte在MSByte最高有效位(MSB, Most Significant Byte)的前面,即LSB为低地址,则该字节序是小端序;反之则是大端序

  BIG ENDIAN:最低位地址存放高位字节,可称高位优先,内存从最低地址开始按顺序存放(高数位数字先写)。最高位字节放最前面。表示Motorola结构。

  LITTLE ENDIAN:最低位地址存放低位字节,可称低位优先,内存从最低地址开始按顺序存放(低数位数字先写)。最低位字节放最前面。Intel体系。

TIF图像格式概览

TIFF 文件分为文件头、标识信息区( IFD) 以及图像数据区 . 在T IFF6. 0的文件中, 所有的标签必须以升序排列, 应通过这些标签信息来处理文件中的图像数据。

 

.TIF图由四个部分组成:
1、图像文件头(Image File Header简称IFH):

 IFH数据结构包含3个成员共计8个字节,

Byte order成员可能是“MM”(0x4d4d)或“II”(0x4949),0x4d4d表示该TIFF图是摩托罗拉整数格式 0x4949表示该图是Intel整数格式

Version成员总是十进制42(0x2a),它用于进一步校验该文件是否为TIF格式,42这个数并不是一般人 想象中的那样认为是tif软件的版本,实际上,42这个数大概永远不会变化;

第三个成员是IFD(接下来要说的第二个数据结构)相对文件开始 处的偏移量。

图像文件目录(Image File Directory简称IFD)

 IFD是TIF图中最重要的数据结构,它包含了一个TIF文件中最重要的信息,一个TIF图可能有多个IFD,这说明文件中有多个图像,每个IFD标识1个图像的基本属性。 IFD结构中包含了三类成员,

Directory Entry Count指出该结构里面有多少个目录入口

接下来就是N个线性排列的DE序列,数量不定(这就是 为什么称TIF格式文件为可扩充标记的文件,甚至用户可以添加自定义的标记属性),每个DE标识了图像的某一个属性;

最后就是一个偏移量,标识下一个文件目录相对于文件开始处的位置,当然,如果该TIF文件只包含了一幅图像,那么就只有一个IFD,显然,这个偏移量就等于0.

TIFF 文件由许多标签( T ag) 组成. 在Adobe 的有关TIFF6. 0 的说明中, 将Tag 解释为各种标签所对应的数值, 而在文件中各个标签的实际入口称为域( Field) ,也就是实际存放的信息.

目录入口(Directory Entry简称DE)
  共12个字节,见图二。简单说,一个DE就是一幅图像的某一个属性。例如图像的大小、分辨率、是否压缩、像素的行列数、一个像素由几位 表示(1位代表黑白两色,8位代表256色等等)等。其中:

tag成员是该属性的编号,在图像文件目录中,它是按照升序排列的。我们可以通过读这些编号,然后到TIF格式官方白皮书中查找相应的含义。

type 属性是用数据来表示的,那么type就是代表着该数据的类型,TIF官方指定的有5种数据类型。 type=1就是BYTE类型(8位无标记整数

type数据类型

1

BYTE

(8位无符号整数)

2

ASCII

8位字符(7位ASCII码加1位二进制0)

3

SHORT

16位无符号整数(2个字节)

4

LONG

32位无符号整数

5

RATIONAL

2个LONG,第一个是分子,第二个是分母

6

SBYTE

8位有符号整数

7

UNDEFINED

8位字符,可包含任意字符

8

SSHORT

16位有符号整数

9

SLONG

32位有符号整数

10

SRATIONAL

两个有符号长整型,第一个代表分数的分子,第二个代表分母

11

FLOAT

单精度(4字节)

12

DOUBLE

双精度(8字节)

      

length成员是数据的数量而不是数据类型的长度。

valueOffset很重要,它是tag标识的属性代表的变量值相对文件开始处的偏移量。如果变量值占用的空间小于4个字节,那么该值就存放在 valueOffset中即可,没必要再另外指向一个地方了。
1. 0. GeoTiff 支持Tiff 格式的所有标准,它新增的6个GeoTag标志信息

GeoTagPixelScale

GeoTagTiePoint (控制点)

GeoTagTransMatrix (变换矩阵)

GeoTagDirectory (地理信息目录表)、

GeoTagDoubleParams (双精度参数) 、

GeoTagASCIIParams (ASCII 参数)

也存放在Tiff 图像的文件目录( IFD) 中,用来描述图像的地理坐标信息与投影信息。 

GeoTiff格式

看了好几篇文献,结果越看越懵了,还是自己记录一下。点击打开链接
Geotiff 使 用 “MetaTag" (元标签),也称为"GeoKeY"(地理关键字)的方法,把众多的信息元素编 码到6个标签中,
GeoTagPixelScale
GeoTagTiePoint (控制点)
GeoTagTransMatrix (变换矩阵) :
GeoTagDirectory (地理信息目录表)
GeoTagDoubleParams (双精度参数) ::存储dou2ble 型的GeoKey 值. 该域ID 号为34736 ,保存不定个数double 型GeoKeys.
GeoTagASCIIParams (ASCII 参数) :存储ASCII型的GeoKey 值. 该域ID 号为34737 ,保存不定长度的ASCII 型GeoKeys.
标签定义于TIFF中的一样,也是12个字节
一个标签由连续的12 个字节组成, 如下所示:
OFFSET : 0~ 1,  TA G ID 标签所对应的数字编号( T ag) , 用于定义该标签所存放的信息,
OFFSET : 2~ 3, TA G IN FO DATA TYPE 标签中数据的类型,
OFFSET : 4~ 7, VALUE COU NT 2~ 3 中说明的数据类型的数目,
OFFSET : 8~ 11, VALUE OFFSET 相对于文件的该标签值的偏移量, 必须开始于字。
Key在GeoT IFF 里称为GeoKey. GeoKey 与格式化的T ag( 标签) 值一起共存, 处理其它图像数据. 和T ag 一样, GeoKey 也有ID 号, 范围从0 到65 535, 但不同于Tag 的是, 所有GeoKey的ID 号都可以用于GeoTIFF 的参数定义上. 这样使用很少的标识信息来存储大量的地理信息, 使得标识信息与地理信息在两个不同的域上而不相互冲突, 这就是GeoT IFF 可扩展性的特点所在.
每一个GeoTag指向一系列的地理数据相关信息,下面分别说明。

GeoTagPixelScale(像元比例tag=33550)

目录入口(Directory Entry简称DE)结构12个字节

 tag(2字节)                                     33550

type (2字节)                                    DOUBLE                

length (4字节)                              N=3

valueOffset                                       相对于文件的该标签值的偏移量, 必须开始于字,指向域

图像中的某一点在栅格空间中的坐标与在模型空间中的坐标的比例.

格式: GeoTagPixelScale = ( Scale X , Scale Y ,Scale Z) . 该域ID 号33550 ,含3 个double 型字段: X 、Y、Z 3 个方向的比例.

Scale Z 在对应非DEM 数据时,一般为0. 根据图像对应的具体时区,3 个比例值所采用的符号规则为东正、西负,北正、南负,同时3个比例值的符号还受图像是否旋转、变形等的影响.

如ModelPixelScaleTag = (                   100. 0 ,                            100. 0 ,                                0. 0)

GeoTagTiePoint (控制点)

目录入口(Directory Entry简称DE)结构12个字节

 tag(2字节)                                     33922

type (2字节)                                    DOUBLE                

length (4字节)                              N=variable

valueOffset                                       相对于文件的该标签值的偏移量, 必须开始于字,指向域

图像中栅格坐标与其对应的模型坐标形成的坐标控制点对. 格式: GeoTagTiePoint = ( ⋯, I , J , K, X , Y , Z , ⋯) . 该域ID号为33922 ,含6 的整数倍个double 型字段. 其中,每6 个数据为一组,前3 个数据为控制点的栅格坐标,后3 个为该控制点的模型坐标.如

ModelTiePointTag = (                      0 ,                       0 ,                  0 ,                  350807. 4 ,                  316081.3 ,                           0. 0)

GeoTagTransMatrix (变换矩阵)

图像中栅格坐标到模型坐标的变换矩阵. 格式:GeoTagTransMatrix= { a , b , c , d ; e , f , g , h ; i , j , k , l ; m , n , o ,p}该域ID 号为34264 ,含有16 个double 型字段. 它可以实现从栅格坐标到PCS(模型坐标系统的投影坐标系) 坐标的直接转化. 如果对二维的非DEM 数据, m= n = o = 0 , p = 1. 若图像没有给出变换矩阵,而已知像元比例和一个Tie 点,则可结算出变换矩阵. 具体方法如下:已知像元比例为( sx , sy , sz) ,TiePoint为( I , J , K, X , Y , Z) . 其中, ( Tx , Ty , Tz) 为矩阵的3 个待定的系数,即变换矩阵= { sx , 0 , 0 , Tx ; 0 ,- sy , 0 , Ty ; 0 , 0 , sz , Tz ; 0 , 0 , 0 , 1} ,则Tx = x -I·sx , Ty = Y + J·sy , Tz = Z - K·sz (如果sz 非0) .

GeoTagDirectory (地理信息目录表tag=34 735)

此tag目录入口(Directory Entry简称DE)结构(12个字节)

GeoKeyDirecto ryTag(别名: ProjectionInfoTag, CoordSystemInfoTag Owner : SPOT Imag e, Inc.)GeoKeyDirector用来存储GeoKey(也称“地理关键字”)目录和部分内容。
),
:
 tag(2字节)                                     34 735 ( 87AF. H)

type (2字节)                                    SHORT                   ( 16位无符号整数(2个字节)) ,
length (4字节)                              N= v ariable, > = 4,length成员是数据的数量而不是数据类型的长度.

valueOffset                                       相对于文件的该标签值的偏移量, 必须开始于字,指向数据域也即GeoKeys。

其中GeoKeyDirectoryTag域用来存储GeoKey(也称“地理关键字”)目录和部分内容,。这个标签是一个SHORT无符号整数的阵列,每四个一组。

第一组中的4个的值很特殊,包含了GeoKey地理关键字目录的头信息(Header)

Header = {版本号,主版本号,副版本号,GeoKey的个数}.

这个头信息之后紧跟的就是关键字项的列表,每一项也包括4个整型变量。关键字项是按照TIFF目录头中的目录项DE的格式构建的。

KeyEntry = { KeyID , TiffTagLocation ,Count ,ValueOffset}.

KeyID 为本Key 的ID 号

在关键字项的定义中,可能还会包括一些其它的值。例如,如果一个关键字需要多个SHORT(整型)值,那么这些值就会放在标签(域)的末尾,关键字项就会设置TIFFTagLocation=GeoKeyDirectorytag,偏移量的值就会指向这些值的位置。

 GeoDoubleParamsTag(tag=34736)

 tag(2字节)                                     34 736

type (2字节)                                    DOUBLE 双精度(8字节)

length (4字节)                              N= v ariable,

valueOffset                                       相对于文件的该标签值的偏移量, 必须开始于字,指向GeoDoubleParamsTag域

其中GeoDoubleParamsTag域存储所有的DOUBLE(双精度)类型的地理关键字的值,这个标签中的双精度阵列中的任何值的含义都是由GeoKeyDirectoryTag
中指向这个值的关键字项决定的。单精度的值必须先转换为双精度才能存储。

GeoDoublePar amsTag( 34 736) → ( 1. 5    365.7      782.34)

GeoAsciiParamsTag( tag=34737)

 tag(2字节)                                     34 737

type (2字节)                                    ASCII(8位字符)

length (4字节)                              N= v ariable,

valueOffset                                       相对于文件的该标签值的偏移量, 必须开始于字,指向GeoASCIIParamsTag域

 

GeoASCIIParamsTag域用来存储所有ASCII类型的GeoKeyDirectoryTag中涉及的GeoKey 值(地理关键字的值)。既然关键字使用的是标签内的偏移量,因此在标签的开头就可以放置其他特殊的注释。

  描述投影和数据等的文献或参考资料. 由于大量的ASCII 型的值都存储在这一个Tag里面, 每一个GeoKey 的值的空定界符用“| ”来代替, 以此能更清晰地区分和读取各GeoKey 的值, 就像下面这样.GeoAsciiParamsTag = f irst_value| second_value| etc. . . . . . . last_value|

如GeoAsciiPar amsTag( 34737) → ( Custom File| My Geographic| )

 示例

举一个例子来具体说明GeoTiff 的编码过程:
ModelTiePointTag = (0 , 0 , 0 , 350807. 4 , 316081.3 , 0. 0)
ModelPixelScaleTag = (100. 0 , 100. 0 , 0. 0)
GeoKeyDirectoryTag :
GTModelTypeGeoKey = 1
GTRasterTypeGeoKey = 1
ProjectedCSTypeGeoKey = 32660
PCSCitationGeoKey = ”UTM Zone 60 N withWGS84”
上述编码说明,这幅GeoTiff 图像含有一个TiePoint = (0 , 0 , 0 , 350807. 4 , 316081. 3 , 0. 0) ,

像元比例为(100. 0 , 100. 0 , 0. 0 ) ,

栅格坐标空间采用的是PixelIsArea ,

模型坐标空间采用了投影坐标系. 类型为PCS-WGS84-UTM- ZONE-60 N ,即使用北60 时区的WGS84 的UTM投影.


0 0
原创粉丝点击