上面我们介绍数据集操作的主要函数。 但是如果需要更多信息, 我们就需要看一下遥感图像处理中更常用到的波段操作的函数。
GetRasterBand 获得栅格数据集的波段
>>> from osgeo import gdal
>>> dataset = gdal.Open("/bk/gdata/img_landsat_subset_index.img")
>>> dataset.RasterCount
1
>>> band = dataset.GetRasterBand(1)
这里我们获取了第一个波段(红色值组成的表)。 注意!这里的 波段获取和通常的C数组获取不一样,开始是1不是0。获取了波 段,我们就可以在下面的操作中读取这个波段的所有数值。
下面我们现在来看看刚才读取出来的那个band有些什么东西可 以供我们操作的。
与操作数据集一样,GDAL同样提供了查看波段基本信息的函数。
>>> from osgeo import gdal
>>> dataset = gdal.Open("/bk/gdata/img_landsat.tif")
>>> band = dataset.GetRasterBand(1)
>>> dir(band)
['Checksum', 'ComputeBandStats', 'ComputeRasterMinMax', 'CreateMaskBand', 'DataType', 'Fill', 'FlushCache', 'GetBlockSize', 'GetColorTable', 'GetDefaultHistogram', 'GetDefaultRAT', 'GetDescription', 'GetHistogram', 'GetMaskBand', 'GetMaskFlags', 'GetMaximum', 'GetMetadata', 'GetMetadataItem', 'GetMetadata_Dict', 'GetMetadata_List', 'GetMinimum', 'GetNoDataValue', 'GetOffset', 'GetOverview', 'GetOverviewCount', 'GetRasterCategoryNames', 'GetRasterColorInterpretation', 'GetRasterColorTable', 'GetScale', 'GetStatistics', 'ReadAsArray', 'ReadRaster', 'SetColorTable', 'SetDefaultHistogram', 'SetDefaultRAT', 'SetDescription', 'SetMetadata', 'SetMetadataItem', 'SetNoDataValue', 'SetRasterCategoryNames', 'SetRasterColorInterpretation', 'SetRasterColorTable', 'SetStatistics', 'WriteArray', 'WriteRaster', 'XSize', 'YSize', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__get_array_interface__', '__getattr__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__swig_getmethods__', '__swig_setmethods__', '__weakref__', '_s', 'this']
看一下常用的操作。这些也是来获取波段的属性信息。
>>> band.XSize
4688
>>> band.YSize
4631
>>> band.DataType
1
得到波段图像的宽和高(像元为单位)。 这个与dataset中使 用RasterXSize与RasterYSize获取的值一致。DataType是图 像中实际数值的数据类型,表示8位无符整型。 在 [subsec:banddatatype]节有更进一步的解释。
>>> band.GetNoDataValue()
>>> band.GetMaximum()
>>> band.GetMinimum()
>>> band.ComputeRasterMinMax()
(0.0, 255.0)
Maximum 是表示在本波段数值中最大的值,Minimum当然 就是表示本波段中最小的值啦。 我们可以看到在一开始这 两个都没有值。因为对于文件格式不会有固有的最大最小值。 所以我们通过函数ComputeRasterMinMax()计算得到了。 注意!这里的最大最小值不包括"无意义值"! 也就是上面 显示的 NoDataValue。用ComputeRasterMinMax()算出的 最大最小值, 是排除了无意义值后计算出来的最大最小值。
返回目录:Python与开源GIS