重采样是指根据一类象元的信息内插出另一类象元信息的过程。在遥感中,重采样是从高分辨率遥感影像中提取出低分辨率影像的过程。常用的重采样方法有最邻近内插法、双线性内插法和三次卷积法内插。
ReadAsArray函数可以重采样读取的数据,并且指定输出缓冲区大小或传递一个已有的缓冲区数组。
band.ReadAsArray([xoff], [yoff], [win_xsize], [win_ysize], [buf_xsize], [buf_ysize], [buf_obj])
xoff是开始阅读的专栏,默认值为0。
yoff是开始阅读的行,默认值为0。
win_xsize是要读取的列数,默认为全部读取。
win_ysize是要读取的行数,默认为全部读取。
buf_xsize是输出数组中的列数,默认值为使用win_xsize的值。
buf_ysize是输出数组中的行数,默认值为使用win_ysize的值。
buf_obj是一个NumPy数组,用于将数据放入其中,而不是创建一个新数组。如果需要,数据将被重新采样以适合此数组,对应的值也将转换为该数组的数据类型。
import os from osgeo import gdal os.chdir(r'D:\modis') in_ds = gdal.Open('.tif') in_band = in_ds.GetRasterBand(1) # 计算输出行列数 # 输入数翻倍,因为我将像素大小减半 out_rows = in_band.YSize * 2 out_columns = in_band.XSize * 2 # 创建输出数据集 gtiff_driver = gdal.GetDriverByName('GTiff') out_ds = gtiff_driver.Create('band_resampled.tif', out_columns, out_rows) # 编辑地理变换 # 像素变为原来的 1/4 out_ds.SetProjection(in_ds.GetProjection()) geotransform = list(in_ds.GetGeoTransform()) geotransform[1] /= 2 geotransform[5] /= 2 out_ds.SetGeoTransform(geotransform) # 读取数据时,指定一个较大的缓冲 data = in_band.ReadAsArray( buf_xsize=out_columns, buf_ysize=out_rows) # 将数据写入输出光栅 out_band = out_ds.GetRasterBand(1) out_band.WriteArray(data) # 为较大的图像构建合适的概视图 out_band.FlushCache() out_band.ComputeStatistics(False) out_ds.BuildOverviews('average', [2, 4, 8, 16, 32, 64]) del out_dsView Code
标签:band,python,win,ysize,栅格,计算器,buf,ds,out From: https://www.cnblogs.com/shiningleo007/p/18029707