GRASS GIS:r.resamp.filter执行错误及高斯滤波重采样需求
解决GRASS GIS r.resamp.filter高斯滤波重采样错误
问题背景
需将15m分辨率栅格通过sigma=0.5的高斯滤波重采样至460m,用于地理加权面到点回归克里金法(GWATPRK)降尺度流程(要求先将精细影像升采样至粗分辨率匹配GWR像素尺寸)。操作流程为:
- 用
r.external导入栅格 - 用
g.region基于原始精细影像设置区域,修改2D分辨率为460m - 运行
r.resamp.filter时触发两类错误:- 使用
gauss+box双内核时:ERROR: Differing number of values for filter= and [xy_]radius= - 仅使用
gauss单内核时:ERROR: At least one filter must be finite
- 使用
错误原因分析
- 双内核参数不匹配:当
filter=指定多个滤波内核时,radius=(或xy_radius=)必须为每个内核对应设置半径值,参数数量需完全一致。若仅输入单个半径值,会触发参数数量不匹配错误。 - 单高斯内核窗口无效:提示“至少一个滤波器必须有限”,是因为设置的滤波窗口半径过小,未覆盖足够的输入精细分辨率像素,导致高斯权重计算无有效样本支撑。
解决方案
1. 确保区域设置正确
先确认g.region的设置,保证区域范围与原始15m栅格完全一致,且分辨率精准对齐460m:
g.region raster=your_15m_raster_name res=460 -a
-a参数自动对齐分辨率与区域边界,避免出现非整数像素的异常问题。
2. 单高斯内核正确命令(满足sigma=0.5需求)
针对核心需求,使用单高斯内核即可,需指定sigma=0.5,同时设置合理的滤波窗口半径(建议取0.5*460=230m,或扩大至3倍sigma对应的690m,确保覆盖足够输入像素):
r.resamp.filter input=your_15m_raster_name output=resampled_460m_gauss filter=gauss sigma=0.5 radius=230
sigma=0.5:直接匹配需求的高斯标准差radius=230:设置滤波窗口的地理半径(单位:米),确保窗口覆盖约15个15m输入像素,保证权重计算有效
3. 双内核错误的修正(若需使用)
如果确实需要结合多个滤波内核,需保证filter=和radius=的参数数量一致,例如:
r.resamp.filter input=your_15m_raster_name output=resampled_460m_dual filter=gauss,box radius=230,460 sigma=0.5
此处gauss对应radius=230,box对应radius=460,参数数量完全匹配,可避免报错。
验证步骤
- 用
r.info resampled_460m_gauss查看输出栅格的分辨率,确认已设置为460m - 用
r.univar input=your_15m_raster_name,resampled_460m_gauss对比输入输出栅格的统计值,验证高斯滤波的平滑效果符合预期
内容的提问来源于stack exchange,提问作者Nikos
相关产品推荐
相关产品推荐

