GDAL python教程基础篇(9)GDAL读取遥感影像

1.打开已有的GeoTIF文件

通过Open函数可以打开影像。

from osgeo import gdal
dataset = gdal.Open("/gdata/geotiff_file.tif")

通过Open函数将一个GeoTIFF文件打开为一个GDAL可操作的对象。Python提供了 dir() 内省函数, 可以快速查看一下当前对象可用的操作。它可以返回传递给它的任何对象的属性名称经过排序的列表。 如果不指定对象,则 dir() 返回当前作用域中的名称。

2.获取影像信息

2.1影像元数据

常用的GeoTIFF文件的元数据信息。 GDAL可以作为数据集级别的元数据来处理下面的基本的TIFF标志。
在这里插入图片描述
使用Python来访问一下:

>>> from osgeo import gdal
>>> dataset = gdal.Open("/gdata/geotiff_file.tif")
>>> dataset.GetMetadata()
{'AREA_OR_POINT': 'Area', 'PyramidResamplingType': 'NEAREST'}

GetMetadata() 方法可以访问数据的元数据信息,元数据信息对于每个数据都是不一样的。 比如再打开另外一个文件:

>>> ds = gdal.Open('/gdata/lu75c.tif')
>>> ds.GetMetadata()
{'AREA_OR_POINT': 'Area',
 'TIFFTAG_XRESOLUTION': '1',
 'TIFFTAG_YRESOLUTION': '1'}

这个文件只对两个TIFF标志进行了定义,还有一个并不是TIFF标志定义的。

2.2GetDescription() 获得栅格的描述信息

 dataset.GetDescription()
'/gdata/geotiff_file.tif'

看来这里的图像描述是图像的路径名, 但是这是和各种不同数据集相关的, 不同数据集有不同的描述。

2.3获取栅格数目

栅格数据集是由多个数据构成的,在GDAL中,每一个波段,都是一个数据集; 不仅如此,栅格数据集还可能包含有子数据集,每子数据集又可能包含有波段。

>>> dataset.RasterCount
3

这是一个由7个波段构成的Landsat遥感影像。

2.4影像大小

栅格数据的大小指出了影像以像元为单位的宽度与高度。

>>> dataset.RasterXSize,dataset.RasterYSize
(1500, 900)

2.5获得空间参考

从栅格数据集中获取其投影与空间参考信息。
GetGeoTransform() 地理仿射变换参数。

对于遥感影像来说,它需要在地理空间中进行定位。 在GDAL中,这有两种方式,其中一种是使用六个参数坐标转换模型。 这个模型的具体实现在不同的软件中是不一样的。 在GDAL中,这六个参数包括左上角坐标,像元X、Y方向大小,旋转等信息。 要注意,Y方向的像元大小为负值。

>>> ds.GetGeoTransform()
(1852951.7603168152, 30.0, 0.0, 5309350.360150607, 0.0, -30.0)

2.6获得投影信息

使用 GetProjection() 函数,可以比较容易地获取数据集的投影信息。

>>> ds.GetProjection()

2.7 使用GDAL获取栅格数据波段信息

获取数据集的波段GetRasterBand() 函数,可以获得栅格数据集的波段。这是函数的参数使用波段的索引值。

>>> from osgeo import gdal
>>> dataset = gdal.Open('/gdata/lu75c.tif')
>>> dataset.RasterCount
1
>>> band = dataset.GetRasterBand(1)

这里获取了第一个波段(红色值组成的表)。 注意!这里的波段获取和通常的C数组获取不一样,开始是1不是0。

2.7.1查看波段的基本信息

与操作数据集一样,GDAL同样提供了查看波段基本信息的函数。

band = dataset.GetRasterBand(1)

2.7.2获取波段大小
>>> band.XSize, band.YSize, band.DataType
(6122, 4669, 3)

执行以上代码得到了波段图像的宽和高(像元为单位)。 对于我们所使用的影像, 这个与 dataset 中使用 RasterXSize() 与 RasterYSize() 获取的值一致。DataType是图像中实际数值的数据类型,表示8位无符整型。

2.7.3获取波段数据的属性
>>> band.GetNoDataValue()
>>> band.GetMaximum()
>>> print(band.GetMinimum())
None
>>> band.ComputeRasterMinMax()
(-1.0, 66.0)

Maximum 是表示在本波段数值中最大的值,当然 Minimum 就是表示本波段中最小的值。 通过运行结果,我们可以看到在一开始RasterXSize()和RasterYSize()都没有值。 因为对于文件格式不会有固有的最大最小值。 所以我们可以通过函数ComputeRasterMinMax() 计算得到。 注意!这里的最大最小值不包括“无意义值”! 也就是上面显示的 NoDataValue 。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Python使用GDAL进行遥感影像配准,您可以使用以下代码示例: ```python from osgeo import gdal def image_registration(input_image_path, reference_image_path, output_image_path): # 打开需要配准的影像 src_ds = gdal.Open(input_image_path) # 打开参考影像 ref_ds = gdal.Open(reference_image_path) # 获取需要配准影像的地理转换信息 src_geo_transform = src_ds.GetGeoTransform() # 获取参考影像的地理转换信息 ref_geo_transform = ref_ds.GetGeoTransform() # 创建一个空的输出影像,用于存储配准结果 out_ds = gdal.GetDriverByName('GTiff').Create(output_image_path, src_ds.RasterXSize, src_ds.RasterYSize, src_ds.RasterCount, src_ds.GetRasterBand(1).DataType) # 设置输出影像的地理转换信息为参考影像的地理转换信息 out_ds.SetGeoTransform(ref_geo_transform) # 设置输出影像的投影信息为参考影像的投影信息 out_ds.SetProjection(ref_ds.GetProjection()) # 进行影像配准 gdal.ReprojectImage(src_ds, out_ds, src_ds.GetProjection(), ref_ds.GetProjection(), gdal.GRA_NearestNeighbour) # 关闭数据集 src_ds = None ref_ds = None out_ds = None # 调用函数进行影像配准 input_image_path = 'input_image.tif' reference_image_path = 'reference_image.tif' output_image_path = 'output_image.tif' image_registration(input_image_path, reference_image_path, output_image_path) ``` 请确保将`input_image.tif`替换为需要配准的影像路径,`reference_image.tif`替换为参考影像路径,`output_image.tif`替换为输出影像路径。 这个示例代码中的`image_registration`函数接受三个参数,分别是需要配准的影像路径、参考影像路径和输出影像路径。函数会打开需要配准的影像和参考影像,并根据参考影像的地理转换信息和投影信息创建一个空的输出影像。然后使用最近邻插值方法进行影像配准,最后关闭数据集。 希望这能对您有所帮助!如果您还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值