dataset中获取图像的名字_访问栅格数据中的像元

  1. GDAL中的栅格数据类型

    计算机中存储的栅格数据的像元都有数据类型,如整型,浮点型。不同的数据类型定义在gdalconst模块里。

    首先看一下具体的用法以及返回的结果。

from osgeo import gdalconstdir(gdalconst)

957c9733244ac4b04d0a8eaf82bbedee.png

    在全部的结果中以GDT开头的就是数值的数据类型。想要查看栅格数据中某一波段的数据类型,只需要查看波段的DataType属性即可。

from osgeo import gdalrds = gdal.Open("C:/Users/WangTianli/Desktop/GDAL/Landsat/Washington/geotiff_file.tif")band=rds.GetRasterBand(1)band.DataType

1

    其返回结果为整型。但是1代表什么含义呢?下表列出gdalconst与整型的对应值。

  • 未知或未指定类型 gdalconst.GDT_Unknown 0

  • 8位无符号整型 gdalconst.GDT_Byte 1

  • 16位无符号整型 gdalconst.GDT_UInt16 2

  • 16位整型 gdalconst.GDT_Int16 3

  • 32位无符号整型 gdalconst.GDT_UInt32 4

  • 32位整型值 gdalconst.GDT_Int32 5

  • 32位浮点型 gdalconst.GDT_Float32 6

  • 64位浮点型 gdalconst.GDT_Float64 7

  • 16位复数整型 gdalconst.GDT_CInt16 8

  • 32位复数整型 gdalconst.GDT_CInt32 9

  • 32位复数浮点型 gdalconst.GDT_CFloat32 10

  • 64位复数浮点型 gdalconst.GDT_CFloat64 11

2.访问数据集的数据

    为了对遥感影像进行处理,需要进一步访问遥感影像中的数据, 即影像中像元的灰度值。

GDAL提供了下面两个函数来访问影像的数值。

  • ReadRaster() 读取图像数据(以二进制的形式)

  • ReadAsArray() 读取图像数据(以数组的形式)

    这是两个非常重要的函数,它们可以直接读取图像的数据, 从而对栅格数据进行分析。可以看到两个函数的帮助中有许多的参数。解释一下:

  • xoff,yoff :指定想要读取的部分原点位置在整张图像中相对于全图原点的位置(以像元为单位)。

  • xsize,ysize :指定要读取部分图像的矩形的长和宽(以像元为单位)。

  • buf_xsize,buf_ysize :可以在读取出一部分图像后进行缩放。那么就用这两个参数来定义缩放后图像最终的宽和高,gdal将帮你缩放到这个大小。

  • buf_type :可以对读出的数据的类型进行转换(比如原图数据类型是short,你要把它们缩小成byte)。

  • band_list :适应多波段的情况。可以指定要读取的波段。

dataset = gdal.Open("C:/Users/WangTianli/Desktop/GDAL/Landsat/gdata/lu75c.tif")help(dataset.ReadRaster)
Help on method ReadRaster in module osgeo.gdal:

ReadRaster(xoff=0, yoff=0, xsize=None, ysize=None, buf_xsize=None, buf_ysize=None, buf_type=None, band_list=None, buf_pixel_space=None, buf_line_space=None, buf_band_space=None, resample_alg=0, callback=None, callback_data=None) method of osgeo.gdal.Dataset instance

    上面的 help() 函数查看gdal方法

help(dataset.ReadAsArray)
Help on method ReadAsArray in module osgeo.gdal:
ReadAsArray(xoff=0, yoff=0, xsize=None, ysize=None, buf_obj=None, buf_xsize=None, buf_ysize=None, buf_type=None, resample_alg=0, callback=None, callback_data=None, interleave='band') method of osgeo.gdal.Dataset instance
Reading a chunk of a GDAL band into a numpy array. The optional (buf_xsize,buf_ysize,buf_type)
parameters should generally not be specified if buf_obj is specified. The array is returned
dataset.RasterCount

1

from numpy import *dataset.ReadAsArray(2500,2500,3,3)
array([[12, 12, 12],
[12, 12, 12],
[12, 12, 12]], dtype=int16)
dataset.ReadRaster(2500,2500,3,3)
b'\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00\x0c\x00'

    我们就把图像左上角位于(2500, 2500),宽高都为3个像元的数据读取出来了。这两个函数返回的结果不一样,其中ReadAsArray()读出的是numpy的数组,类型为int16;而ReadData()读出的是二进制型。

    3.访问波段中的数据

    使用了 ReadAsArray() ,返回的是numpy模块定义的Array。

rds.RasterCount

3

band = rds.GetRasterBand(1)band.ReadAsArray(100,100,5,5,10,10)
array([[236, 236, 237, 237, 237, 237, 237, 237, 227, 227],
[236, 236, 237, 237, 237, 237, 237, 237, 227, 227],
[235, 235, 232, 232, 233, 233, 234, 234, 225, 225],
[235, 235, 232, 232, 233, 233, 234, 234, 225, 225],
[242, 242, 235, 235, 232, 232, 233, 233, 224, 224],
[242, 242, 235, 235, 232, 232, 233, 233, 224, 224],
[254, 254, 244, 244, 238, 238, 237, 237, 229, 229],
[254, 254, 244, 244, 238, 238, 237, 237, 229, 229],
[246, 246, 246, 246, 248, 248, 250, 250, 235, 235],
[246, 246, 246, 246, 248, 248, 250, 250, 235, 235]], dtype=uint8)

     前两个100是取值窗口的左上角在实际数据中所处像元的(x, y)位置。 中间两个是取值窗口覆盖的区域大小, 再后面是取值窗口取出数组进行缩放后数组的大小。最后两个参是对取值窗口取出数据进行缩放后的数组的大小。需要注意的是这里的最后两个参数是可选的,如果不指定则和中间两个参数保持一致。

    假如取值窗口大小是20 × 20,取出后数组就可以人工设置大小。让它成为10 × 10的数组,或者是40 × 40的数组。如果设置成20 × 40的数组则取出的数组对于真实图像来说有了变形。

     这里需要注意的是缩的情况(缩的时候是取几个周围点的平均值) 如果是调色板数据就可能引发问题。

    栅格数据范围的处理

band.XSize

1500

band.YSize

500

band.ReadAsArray(1496,896,5,5)

None

    可以看到,出错了。获取数据的时候不能越界, 调用的时候要判断越界没。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值