5

我在 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

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

这是 python 导入的屏幕转储。

img 是 ESA 预处理后的图像。

img1 是我的混蛋 gdal_merge 导入。 在此处输入图像描述

这是失败的图像:p 在此处输入图像描述

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

提前致谢 :)

4

1 回答 1

11

似乎正在发生的事情是您正在从原始 uint16 数据中创建一个 uint8 堆栈,因此您的所有值基本上都变成了 255,即 uint8 的最大值。

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

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

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

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

如果你想要一个实际的 GeoTIFF,只需运行它gdal_translate

gdal_translate stack.vrt stack.tif

同样,gdal_translate有很多很酷的选项,只需查看文档即可。

于 2018-09-15T09:29:12.437 回答