将栅格像元大小与另一个栅格相匹配

时间:2019-03-02 15:17:29

标签: python image-resizing gdal resampling rasterio

我一直在使用张贴在here上的代码来将栅格的像元大小与另一个栅格匹配。更具体地说,我的哨兵2波段(jp2格式)波段的像元/像素大小为20m,我想将其拆分/重采样/调整为10m。到目前为止,最有效的方法是使用添加的链接中的脚本,在其中输入两个栅格:20m波段和另一个10m波段。它们都具有相同的空间范围和相同的crs。我现在遇到的怪异问题是该脚本仍然可以工作,但是输出栅格大小约为500mb,而原始大小约为1000kb。我不明白为什么会发生这种情况。有任何想法吗?我在Win 10机器上使用python 3。如果您有另一种使用gdalrasterio或其他python库来拆分单元格大小的方法,它也可能会有所帮助。我只想将每20m像素分割成4个10m像素,每个像素具有相同的值,即每个新的10m单元将具有与20m单元相同的值。我仍在发布我正在使用的代码:

from osgeo import gdal, gdalconst

# Source
src_filename = r'C:\SN2 sr\T36SXB_20180406T081601_B05_20m.jp2'
src = gdal.Open(src_filename, gdalconst.GA_ReadOnly)
src_proj = src.GetProjection()
src_geotrans = src.GetGeoTransform()

# We want a section of source that matches this:
match_filename = r"C:\SN2 sr\T36SXB_20180406T081601_B04_10m.jp2"
match_ds = gdal.Open(match_filename, gdalconst.GA_ReadOnly)
match_proj = match_ds.GetProjection()
match_geotrans = match_ds.GetGeoTransform()
wide = match_ds.RasterXSize
high = match_ds.RasterYSize

# Output / destination
dst_filename = r'C:\SN2 sr\try5.jp2'
dst = gdal.GetDriverByName('Gtiff').Create(dst_filename, wide, high, 1, gdalconst.GDT_Float32)
dst.SetGeoTransform( match_geotrans )
dst.SetProjection( match_proj)

# Do the work
gdal.ReprojectImage(src, dst, src_proj, match_proj, gdalconst.GRA_NearestNeighbour)

del dst # Flush

print ("finish")

2 个答案:

答案 0 :(得分:0)

奇怪的问题,因为代码看起来不错。我猜这两个原始的sentinel-2文件也都是Float32,因此可能不是问题。我所做的一件事是,当您创建新文件时,正在使用“ Gtiff”驱动程序指定“ .jp2”扩展名。 jp2的驱动程序是“ JPEG2000”。这可能是您的问题吗? 希望对您有帮助

答案 1 :(得分:0)

我相信此问题与文件生成过程中使用的压缩方法有关。使用'compress':'lzw'可能有助于减小文件大小。当我尝试使用lzw压缩的代码时,我得到的文件大小类似于较大的输入文件(高分辨率文件)。但是,它本身的gig-res文件约为700 mb。