乐于分享
好东西不私藏

GeoAI切片介绍

GeoAI切片介绍

geoai 库提供了一套完整的地理空间数据处理工具,其中影像切片(Tile)功能是其核心能力之一。本文档详细介绍 geoai 库中与切片相关的主要方法及其使用场景。

核心切片方法

geoai.export_geotiff_tiles

功能定位:将大型GeoTIFF影像切割成固定大小的瓦片,用于深度学习训练样本生成。

方法签名:

geoai.export_geotiff_tiles(    in_raster: str,    out_folder: str,    in_class_data: str = None,    tile_size: int = 512,    stride: int = 256,    skip_empty_tiles: bool = False,    buffer_radius: int = 0,    all_touched: bool = True,    create_overview: bool = False,    apply_augmentation: bool = False,    augmentation_count: int = 2,    quiet: bool = False)

参数说明:

参数
类型
默认值
说明
in_raster
str
-
输入栅格影像路径(GeoTIFF格式)
out_folder
str
-
输出瓦片保存目录
in_class_data
str
None
分类矢量数据路径(用于标签生成)
tile_size
int
512
瓦片尺寸(像素),常见值:256、512、1024
stride
int
256
滑窗步长(像素),决定重叠率
skip_empty_tiles
bool
False
是否跳过无目标对象的空瓦片
buffer_radius
int
0
多边形缓冲区半径(像素)
all_touched
bool
True
是否包含接触边界的像素
create_overview
bool
False
是否创建概览图
apply_augmentation
bool
False
是否应用数据增强
augmentation_count
int
2
每个瓦片的增强数量
quiet
bool
False
是否静默运行(抑制日志输出)

返回值:无返回值,直接将瓦片写入输出目录。

输出结构:

out_folder/├── images/           # 影像瓦片目录│   ├── tile_000000.tif│   ├── tile_000001.tif│   └── ...├── labels/           # 标签瓦片目录(当提供in_class_data时)│   ├── tile_000000.tif│   ├── tile_000001.tif│   └── ...├── annotations/      # 标注文件目录(可选)│   ├── tile_000000.xml│   └── ...└── overview.png      # 概览图(当create_overview=True时)

使用示例:

import geoai# 基础用法:生成训练样本geoai.export_geotiff_tiles(    in_raster="./data/image.tif",    out_folder="./output",    in_class_data="./data/buildings.geojson",    tile_size=512,    stride=256,    skip_empty_tiles=True,    apply_augmentation=True,    augmentation_count=2)

geoai.read_raster_metadata

功能定位:读取栅格影像的元数据信息,为切片前的预处理提供依据。

方法签名:

metadata = geoai.read_raster_metadata(raster_path: str)

返回值结构:

属性
类型
说明
driver
str
文件格式驱动(如GTiff)
width
int
影像宽度(像素)
height
int
影像高度(像素)
count
int
波段数量
crs
str
坐标参考系(如EPSG:3857)
transform
Affine
仿射变换矩阵
bounds
BoundingBox
地理边界
resolution
tuple
分辨率(x, y)
nodata
float
无数据值

使用示例:

import geoaimetadata = geoai.read_raster_metadata("./data/image.tif")print(f"影像尺寸: {metadata.width} x {metadata.height}")print(f"坐标系: {metadata.crs}")print(f"分辨率: {metadata.resolution}")

geoai.get_raster_info

功能定位:获取栅格影像的详细信息,包含统计数据。

方法签名:

info = geoai.get_raster_info(raster_path: str)

返回值结构:

{'driver': 'GTiff','width': 1024,'height': 1024,'count': 4,'crs': 'EPSG:3857','resolution': (0.5, 0.5),'bounds': {'left': 120.0,'bottom': 30.0,'right': 121.0,'top': 31.0    },'band_stats': {1: {'min': 0, 'max': 255, 'mean': 128.5, 'std': 50.0},2: {'min': 0, 'max': 255, 'mean': 130.2, 'std': 48.0},3: {'min': 0, 'max': 255, 'mean': 125.8, 'std': 52.0}    }}

geoai.get_vector_info

功能定位:获取矢量数据的基本信息。

方法签名:

info = geoai.get_vector_info(vector_path: str)

返回值结构:

属性
类型
说明
driver
str
文件格式(如GeoJSON、ESRI Shapefile)
feature_count
int
要素数量
crs
str
坐标参考系
geometry_type
str
几何类型(Polygon、Point等)
columns
list
属性字段列表
bounds
list
空间范围 [minx, miny, maxx, maxy]

切片策略与参数选择指南

瓦片尺寸选择

场景
推荐tile_size
说明
小目标检测
256
适合检测小尺寸地物
通用场景
512
平衡细节与计算效率
大目标识别
1024
适合建筑物、道路等大目标

滑窗步长策略

An Upscaling–Downscaling Optimal Seamline Detection Algorithm for Very Large Remote Sensing Image Mosaicking | MDPI

重叠率计算公式:overlap_ratio = 1 - stride / tile_size

重叠率
适用场景
0% (stride=tile_size)
无重叠切片,适合快速预览
25%
轻度重叠,平衡速度与边界完整性
50% (stride=tile_size/2)
标准重叠,推荐用于训练
75%
高度重叠,用于精细边界检测

数据增强选项

当 apply_augmentation=True 时,支持以下增强方式:

  • • 水平翻转 (Horizontal Flip)
  • • 垂直翻转 (Vertical Flip)
  • • 旋转 (Rotation)
  • • 亮度调整 (Brightness Adjustment)
  • • 对比度调整 (Contrast Adjustment)

标准训练样本生成

import geoaifrom pathlib import Path# 配置路径BASE_DIR = Path("./data")RASTER_PATH = BASE_DIR / "image.tif"VECTOR_PATH = BASE_DIR / "buildings.geojson"OUTPUT_DIR = BASE_DIR / "training_samples"# 读取元数据metadata = geoai.read_raster_metadata(str(RASTER_PATH))print(f"准备切割影像: {metadata.width}x{metadata.height}")# 生成训练样本geoai.export_geotiff_tiles(    in_raster=str(RASTER_PATH),    out_folder=str(OUTPUT_DIR),    in_class_data=str(VECTOR_PATH),    tile_size=512,    stride=256,    skip_empty_tiles=True,    all_touched=True,    create_overview=True,    apply_augmentation=True,    augmentation_count=2,    quiet=False)print(f"切片完成,输出目录: {OUTPUT_DIR}")

批量处理多个影像

import geoaifrom pathlib import Pathinput_dir = Path("./images")output_dir = Path("./tiles")# 遍历所有tif文件for raster_file in input_dir.glob("*.tif"):print(f"处理: {raster_file.name}")# 创建对应输出目录    tile_dir = output_dir / raster_file.stem    tile_dir.mkdir(parents=True, exist_ok=True)# 执行切片(无标签模式)    geoai.export_geotiff_tiles(        in_raster=str(raster_file),        out_folder=str(tile_dir),        tile_size=512,        stride=512,  # 无重叠        skip_empty_tiles=False,        create_overview=True    )

内存优化

  1. 1. 分块读取:对于超大影像,geoai内部自动采用分块读取机制
  2. 2. 跳过空瓦片:设置 skip_empty_tiles=True 减少无效计算
  3. 3. 合理设置tile_size:避免一次加载过大的瓦片

并行处理

geoai内部已实现多线程并行处理,可通过环境变量控制:

export GEOAI_NUM_THREADS=8  # 设置并行线程数

输出格式选择

格式
优点
缺点
GeoTIFF
支持地理信息,无损压缩
文件较大
PNG
无损压缩,兼容性好
无地理信息
JPEG
文件小,加载快
有损压缩

切片后坐标信息丢失?

原因:输出格式不支持地理信息或未保留元数据。

解决方案:

  • • 使用GeoTIFF格式输出
  • • 确保输入影像包含正确的地理参考信息

标签与影像不匹配?

原因:矢量数据与栅格数据坐标系不一致。

解决方案:

# 切片前确保坐标统一import geopandas as gpdgdf = gpd.read_file(vector_path)with rasterio.open(raster_path) as src:    raster_crs = src.crsif gdf.crs != raster_crs:    gdf = gdf.to_crs(raster_crs)    gdf.to_file(aligned_vector_path)

内存不足错误?

原因:tile_size设置过大或影像尺寸超出内存限制。

解决方案:

  • • 减小tile_size(如从1024改为512)
  • • 使用分块处理
  • • 增加系统内存

geoai 提供了一套完整的影像切片工具链,核心方法包括:

  1. 1. export_geotiff_tiles:核心切片方法,支持训练样本生成
  2. 2. read_raster_metadata:读取栅格元数据
  3. 3. get_raster_info:获取栅格详细信息(含统计)
  4. 4. get_vector_info:获取矢量数据信息

合理选择参数(tile_size、stride、数据增强等)可显著提升训练样本质量和模型性能。

相关学习资料