tiff与GDAL笔记

4 篇文章 0 订阅
3 篇文章 0 订阅

1.tiff格式

**标签图像文件格式(Tag Image File Format,简写为TIFF)**是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。它最初由Aldus公司与微软公司一起为PostScript打印开发。TIFF与JPEG和PNG一起成为流行的高位彩色图像格式。

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

TIFF有一个使用LZW压缩的选项,这是一种减小文件大小的无损技术。与JPEG不同,TIFF文件可以编辑然后重新存储而不会有压缩损失。

TIFF文件以.tif为扩展名。其数据格式是一种3级体系结构,从高到低依次为:文件头、一个或多个称为IFD的包含标记指针的目录和数据。

2.GTiff – GeoTIFF File Format

GeoTIFF利用了TIFF的可扩展性,在其基础上加了一系列标志地理信息的标签(Tag),来描述卫星成像系统、航空摄影、地图信息和DEM等。 GeoTIFF设计使得标准的地图坐标系定义可以随意存储为单一的注册标签。GeoTIFF也支持非标准坐标系的描述,为了在不同的坐标系间转换,可以通 过使用3~4个另设的TIFF标签来实现。GeoTIFF 使用了 GeoKeys 来组织众多空间参数,所有 GeoKeys 由 GeoKeyDirectoryTag 来索引。

GeoTIFF 支持三种坐标空间 : 栅格空间 (Raster Space) 、设备空间 (Device Space) 和模型空间 (Model Space) 。栅格空间是存储图像的行列号的坐标系统。它有 2 种形式 : 一是 PixelIs-Area 型, 主要用于非 DEM 的数据 ; 二是 PixelIsPoint 型, 主要用于 DEM 。设备空间是使用 TIFF 格式中定义的 6 个基本 Tag 来描述图像的分辨率单位及图像定位。模型空间是 GeoTIFF 图像的栅格坐标所对应的实际地图的经纬度坐标或直角坐标。

各个地理标签的具体含义如下 :

( 1)ModelPixelScaleTag( 像元比例 ) : 存放着图像中的某一点在栅格空间中的坐标与在模型空间中的坐标的缩放比例。

( 2)ModelTiepointTag( 控制点 ) : 图像中栅格坐标与其对应的模型坐标形成的坐标控制点对。

( 3)ModelTransformationTag( 变换矩阵 ) : 含有 16 个双精度 ( 4)GeoDoubleParamsTag( 双精度参数 ) : 代表 GeoTIFF 定义的一种数据类型 , 用来存储双精度类型的地理键 (GeoKeys) 。

( 5)GeoAsciiParamsTag(ASCII 参数 ) : 存储字符型的地理键 (GeoKey) 值 , 保存字符型的地理键 (GeoKeys) 。

( 6)GeoKeyDirectoryTag( 地理信息目录 ) : 是 6 个地理标签中最重要、最复杂的一个 , 可分为头和记录两部分 : 头部的结构为 Header={ 目录版本号 , 修订版本号 , 副版本号 , 地理键的个数 }; 每条记录的结构为 KeyEntry={ 地理键 ID, 存放位置 , 元素的个数 , 值 / 索引 } 。 ID 号唯一标识了地理键 , 存放位置表示地理键存放在哪个标签中 ( 主要指 GeoDoubleParamsTag 和 GeoAscii-ParamsTag) 。如果值为 0 表示该键为短整型、个数为 1 则它的值就保存在记录中。否则 , 其类型由 TIFFTagLocation 暗指 , 值即存放在 TIFFTagLocation 指定的标签中 , 第一个元素在标签中的索引为偏移量。

When built with internal libtiff or with libtiff >= 4.0, GDAL also supports reading and writing BigTIFF files (evolution of the TIFF format to support files larger than 4 GB).

3.GDAL读取TIFF高程

GDAL是一个操作各种栅格地理数据格式的库。包括读取、写入、转换、处理各种栅格数据格式。它使用了一个单一的抽象数据模型就支持了大多数的栅格数据。除了栅格操作,这个库还同时包括了操作矢量数据的另一个有名的库OGR,这样这个库就同时具备了操作栅格和矢量数据的能力。

GDAL使用抽象数据模型(abstractdatamodel)来解析它所支持的数据格式,抽象数据模型包括数据集(dataset),坐标系统,仿射地理坐标转换(Affine GeoTransform), 大地控制点(GCPs), 元数据(Metadata),栅格波段(RasterBand),颜色表(ColorTable),子数据集域(Subdatasets Domain),图像结构域(Image_StructureDomain),XML域(XML:Domains)。

GDAL基础类

  • GDALMajorObject类:抽象类,带有元数据的对象。

  • GDALDdataset类:
    通常是从一个栅格文件中提取的相关联的栅格波段集合和这些波段的元数据;
    GDALDdataset也负责所有栅格波段的地理坐标转换(georeferencing transform)和坐标系定义。Dataset的坐标系统由OpenGIS WKT字符串定义。

  • GDALDriver类:文件格式驱动类,GDAL会为每一个所支持的文件格式创建一个该类的实体,来管理该文件格式。

  • GDALDriverManager类:文件格式驱动管理类,用来管理GDALDriver类。

读取某一像素点的值,需要分两步
首先读取一个波段(band):GetRasterBand(),其参数为波段的索引号
然后用ReadAsArray(, , , ),读出从(xoff,yoff)开始,大小为(xsize,ysize)的矩阵。如果将矩阵大小设为1X1,就是读取一个像素了。但是这一方法只能将读出的数据放到矩阵中,就算只读取一个像素也是一样。

例如:
band = ds.GetRasterBand(1)
data = band.ReadAsArray(xOffset, yOffset, 1, 1)

如果想一次读取一整张图,那么将offset都设定为0,size则设定为整个图幅的size,

例如:
data = band.ReadAsArray(0, 0, cols, rows)

但是要注意,从data中读取某一像素的值,必须要用data[yoff, xoff]。注意不要搞反了。数学中的矩阵是[row,col],而这里恰恰相反!这里面row对应y轴,col对应x轴。

参考:

  1. my coding.net
  2. 定义
  3. https://baike.baidu.com/item/TIFF/2106?fr=aladdin
  4. tiff和geotiff格式分析
  5. GDAL 综合整理
  6. Python的地形三维可视化Matplotlib和gdal使用实例
  7. GDAL python教程(4)——用GDAL读取栅格数据【转】
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baibingql

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值