通过gdal正确合并多个乐队...正确

Mar*_*ars 4 python gdal rasterio

我在python中使用了一些Sentinel-2卫星图像。现在,使用更新的版本没有问题(过去2016)。但是我需要使用2016年的一些。欧洲航天局并没有以相同的方式对它们进行预处理!

通常,当您下载图块时,通常会为每个卫星频段获得一个.jp2文件。但是在较新的版本中,它们会在正常频段的基础上为您预处理RGB版本。这个版本在python中对我来说很棒。但是,为了创建较旧图像的RGB版本,我需要将三个波段(4、3、2-R,G,B)组合为1个文件。首先,Gdal_merge处理得很好。当我打开图像时,它看起来很棒!但是在将其读入python后,我立即发现有些问题。图像显示为纯白色的图片,上面有一些蓝色条纹。现在,我自己到新的工作示例和旧版本中访问了gdalinfo,这是输出。

在此处输入图片说明

您可能会注意到,尺寸乍一看似乎还不错。但是乐队的类型不正确,颜色也不正确。因此,合并文件时我显然做错了。

这是我用来将3个波段合并为1个.jp2文件的命令。

gdal_merge.py -o outfile.jp2 -separate B04.jp2 BO3.jp2 BO2.jp2
Run Code Online (Sandbox Code Playgroud)

现在如上所述。这将创建一个文件,当我在QGIS中打开该文件时,文件看起来很漂亮。但是它对我在python中没用。

这是python导入的屏幕转储。

img是ESA预处理的图像。

img1是我的混蛋gdal_merge导入。 在此处输入图片说明

这是失败的图片:p 在此处输入图片说明

现在,在我看来,我对这种图像处理方式缺乏基本的了解。因此,借助Stackoverflow的综合智慧-我该怎么做才能将我的乐队正确地缝合到一个性感的RGB中,而rasterio模块可以正确地读取它们。

提前致谢 :)

Val*_*Val 7

似乎正在发生的事情是您正在使用原始uint16数据创建uint8堆栈,因此所有值基本上都变为255,这是uint8的最大值。

要解决此问题,只需将其添加-ot uint16到您的通话中,一切便会正常进行。

关于组合频段,我通常使用的方法是使用gdalbuildvrt输入文件创建虚拟数据集。该.vrt文件只有kb的大小,可以随后用于任何进一步的GDAL处理(并且可能被读取rasterio):

gdalbuildvrt -separate stack.vrt B04.jp2 BO3.jp2 BO2.jp2
Run Code Online (Sandbox Code Playgroud)

您可以指定许多其他选项,例如通用分辨率(例如,您要堆叠10米和20米波段),无数据,目标范围等。

如果您想要一个实际的GeoTIFF,只需通过gdal_translate以下命令运行它:

gdal_translate stack.vrt stack.tif
Run Code Online (Sandbox Code Playgroud)

同样,gdal_translate有很多不错的选择,只需看一下文档即可