羽化镶嵌:实现栅格数据无缝镶嵌的方案

羽化镶嵌

这个 Python 脚本提供了一种高性能解决方案,可将大量栅格瓦片镶嵌成无缝、网格对齐的数据集。

主要功能

  • 高效空间索引:为所有输入瓦片创建空间索引,以便快速查询,从而显著加快大面积区域的处理速度。
  • 无缝羽化:采用加权平均算法融合重叠瓦片,消除明显的接缝。
  • 基于网格处理:基于用户提供的网格 shapefile 文件进行瓦片镶嵌。
  • 可配置重叠:为每个输出网格瓦片添加指定的重叠区域。
  • 自动化工作流程:扫描多个输入目录并自动处理所有网格。

核心算法

1. 空间索引(R树)

为了避免遍历每个输入文件来处理每个网格单元,脚本首先构建一个空间索引。

  • 处理过程:它读取每个源 .tif 文件的地理边界,并使用 GeoPandas 将其存储在 GeoPackage 文件中。对于大型数据集,这是最关键的性能优化。

2. 无缝拼接(羽化)

为了消除瓦片重叠处的接缝,使用基于加权平均的羽化技术。

  • 流程
  1. 为每个图块生成一个“权重图”,中心像素的权重为 1.0,边缘像素的权重平滑过渡到 0。

  2. 拼接时,会累积两个缓冲区:一个用于存储“像素值 * 权重”之和,另一个用于存储“权重”之和。

  3. 最终像素值计算为“总加权值 / 总权重”。

3. 自定义和可扩展性

此脚本针对大规模处理进行了优化,尤其适用于源数据集过大而无法作为单个文件处理的情况。在处理海量数据集(例如,数十万个图块)时,基于网格的方法至关重要,因为它将问题分解成易于管理的小块。

单个大型镶嵌图(无网格)

如果只有少量瓦片,并且希望创建一个单独的 GeoTIFF 输出文件而不是瓦片网格,可以修改主执行块。移除网格逻辑和多路径输入的相关部分,仅保留羽化镶嵌图的相关部分。

代码

代码地址:https://github.com/wqlin08/Feathering-mosaic