Python绘制同区域Geotiff影像无法对齐匹配问题咨询
问题根本成因
两幅影像坐标系、左上角原点坐标完全一致,无法对齐的核心原因是空间采样规则完全不统一,具体差异:
- 像素分辨率不同:影像1为非正方形像素,东西向单像素宽89.63m、南北向单像素高21.28m;影像2为25m×25m正方形像素
- 影像尺寸不同:影像1为640列×7368行,影像2为2294列×6273行
- 覆盖范围存在微差:受像素尺寸、行列数差异影响,两幅影像的边界、右下角地理坐标存在数米到十余米的偏差
如果绘制时直接按像素行列号叠加、未做地理坐标映射和重采样,必然出现空间错位。
解决方法
统一两幅影像的空间采样网格即可实现对齐,直接用rasterio库完成重采样配准:选择其中一幅作为参考基准,将另一幅重采样到和参考影像完全一致的分辨率、地理范围、网格对齐规则。
以下是可直接运行的代码,以25米分辨率的影像2为参考,将影像1重采样到匹配网格:
import rasterio from rasterio.warp import reproject, Resampling # 路径配置 ref_path = "ch2_sar_ncxl_20191017t234531221_d_sli_xx_fp_hh_d18_wrp.tif" # 参考影像(影像2) src_path = "sli_hh_ML_I_221.tif" # 待配准影像(影像1) out_path = "sli_hh_ML_I_221_aligned.tif" # 配准后输出路径 # 读取参考影像空间参数 with rasterio.open(ref_path) as ref: dst_crs = ref.crs dst_transform = ref.transform dst_width = ref.width dst_height = ref.height dst_nodata = ref.nodata # 执行重采样 with rasterio.open(src_path) as src: with rasterio.open( out_path, "w", driver="GTiff", width=dst_width, height=dst_height, count=src.count, dtype=src.dtypes[0], crs=dst_crs, transform=dst_transform, nodata=src.nodata if src.nodata is not None else dst_nodata ) as dst: for band_idx in range(1, src.count + 1): reproject( source=rasterio.band(src, band_idx), destination=rasterio.band(dst, band_idx), src_transform=src.transform, src_crs=src.crs, dst_transform=dst_transform, dst_crs=dst_crs, resampling=Resampling.bilinear # 浮点型SAR数据用双线性重采样,分类数据换为Resampling.nearest )
重采样完成后,两幅影像的每个像素对应完全一致的地理坐标范围,按地理坐标或统一行列号绘制即可完全对齐。
若要以影像1的分辨率为基准,只需互换代码中参考影像和待配准影像的路径即可。影像2为双波段数据,若仅需HH极化波段,读取时取第1波段即可,不影响配准逻辑。
内容的提问来源于stack exchange,提问作者Nidhi Verma
相关产品推荐
相关产品推荐

