通过gdal合并多个波段...正确

问题描述 投票:2回答:1

我在python中使用了一些Sentinel-2卫星图像。现在我使用新版本没有问题(2016年)。但我需要使用2016年的一些。这些都不是欧洲航天局以同样的方式预处理的!

通常,当您下载磁贴时,通常会为每个卫星频段获取一个.jp2文件。但在较新的版本中,他们会为您和正常乐队预处理RGB版本。这个版本在python中对我很有用。但是,为了创建较旧图像的RGB版本,我需要将三个波段(4,3,2-R,G,B)组合成1个文件。 Gdal_merge起初处理得很好。当我打开图像时,它看起来很棒!但是在读到python之后,我立即注意到有些东西已经关闭了。图像显示为纯白色图片,上面有一些蓝色条纹。现在我去了gdalinfo更新的工作示例和我自己拼接的旧版本,这就是输出。

enter image description here

正如您可能注意到的那样,尺寸最初似乎很好。但是乐队的类型不正确,也没有正确的颜色。所以当我合并文件时,我显然做错了。

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

gdal_merge.py -o outfile.jp2 -separate B04.jp2 BO3.jp2 BO2.jp2

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

这是python导入的screendump。

img是ESA预处理图像。

img1是我的bastardized gdal_merge导入。 enter image description here

这是失败的形象:p enter image description here

现在在我看来,我对这种图像处理缺乏一些基本的了解。因此,结合Stackoverflow的智慧 - 我可以做些什么来将我的乐队正确拼接成一个性感的RGB,rasterio模块可以正确读取。

提前致谢 :)

python gdal rasterio
1个回答
5
投票

似乎正在发生的是你正在从原始的uint16数据中创建一个uint8堆栈,所以你的所有值基本上变成255,uint8的最大值。

要解决此问题,只需将-ot uint16添加到您的通话中,一切都应该正常工作。

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

gdalbuildvrt -separate stack.vrt B04.jp2 BO3.jp2 BO2.jp2

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

如果你想要一个真正的GeoTIFF,只需通过gdal_translate运行它:

gdal_translate stack.vrt stack.tif

再次,gdal_translate有很多很酷的选择,只需看看documentation

© www.soinside.com 2019 - 2024. All rights reserved.