R语言多波段栅格镶嵌异常:仅输出单波段图像求助
问题根源
raster()函数默认仅加载栅格的第一个波段,你遍历读取的所有多波段TIFF都被转换成了单波段对象,最终合并结果自然是单波段。
修复方案(基于raster包)
1. 完整读取多波段栅格
把读取栅格的raster()换成brick(),它会加载栅格的所有波段:
library(sp) library(raster) library(rgdal) setwd("C:\\Projects\\Rice-fallow_4_states\\Bihar\\S1") x <- list.files(".\\", pattern='tif$', full.names = TRUE) allrasters1 <- lapply(x, brick) # 读取完整多波段栅格
2. 执行多波段镶嵌
merge()更适配单波段场景,多波段镶嵌建议用mosaic(),同时指定重叠区域的处理规则(比如取第一个非NA值、均值等):
# 定义多波段镶嵌函数 mosaic_multiband <- function(...) { mosaic(..., fun = function(x) x[!is.na(x)][1]) # 取重叠区第一个非NA值,可替换为mean/max } x.mosaic <- do.call(mosaic_multiband, allrasters1) # 验证结果 names(x.mosaic) x.mosaic plot(x.mosaic)
更高效的替代方案(terra包)
raster包已逐步被terra包取代,后者处理多波段栅格更高效、语法更简洁:
library(terra) setwd("C:\\Projects\\Rice-fallow_4_states\\Bihar\\S1") x <- list.files(".\\", pattern='tif$', full.names = TRUE) allrasters1 <- lapply(x, rast) # 自动读取所有波段 x.mosaic <- merge(allrasters1) # 直接支持多波段镶嵌 # 查看结果 names(x.mosaic) x.mosaic plot(x.mosaic)
内容的提问来源于stack exchange,提问作者Payel Ghosh Dastidar IRRI IN
相关产品推荐
相关产品推荐

