首页 > 解决方案 > 如何在 R 中对栅格进行最近邻插值?

问题描述

我有一个光栅图像,我只想插入 NA 的值。缺失的 NA 通常位于图像的边缘。我对 R 相当陌生,所以我不确定该怎么做。值的准确性不必更高,我只想做最近邻插值。任何帮助和建议或欢迎。我添加了一个简化的代码来生成一个在边界上具有 NA 值的栅格,但理想情况下,这个 NA 值将在栅格的所有 4 个边上。我发现了一个类似于填充 NA 间隙的帖子使用邻域分析填充栅格中 NA 值的间隙(例如,不是单个单元格),但它对我不起作用。

rast <- raster(nrow=10, ncol=10, crs='+proj=utm +zone=1 +datum=WGS84', xmn=0, xmx=1, ymn=0, ymx=1)
values(rast) <- 1:ncell(rast)
values(rast)[1:20] <- NA

标签: rinterpolationnearest-neighbor

解决方案


我认为您可以为此使用焦点功能。如果您在边境和其他地方有 NA,我认为以下是最简单的方法

我使用了一些更复杂的示例数据。前两行是NA,中间也有NA

library(raster)

r <- raster(nrow=10, ncol=10, crs='+proj=utm +zone=1 +datum=WGS84', xmn=0, xmx=1, ymn=0, ymx=1)
values(r) <- 1:ncell(r)
r[c(1:2, nrow(r)), ] <- NA
r[, 1] <- NA
r[3:5, 3:5] <- NA
plot(r)

w <- matrix(1, 3, 3)  #c(0,1,0,1,0,1,0,1,0), nrow=3)
x <- focal(r, w, mean, na.rm=TRUE, NAonly=TRUE, pad=TRUE)
plot(x)

因为第一行没有任何不是 NA 的邻居,我们需要再次运行最后一行

xx <- focal(x, w, mean, na.rm=TRUE, NAonly=TRUE, pad=TRUE)

plot(xx)
text(r, cex=.8)
text(mask(xx, r, inverse=TRUE), col="red", cex=.8)

在此处输入图像描述

请注意,在具有方形像元的栅格上,有四个(车箱)最近的邻居和其他 4 个在对角线上附近。对于边界行,您可以使用此值w来获取未定义的车

w <- matrix(c(0,1,0,1,0,1,0,1,0), nrow=3)

#     [,1] [,2] [,3]
#[1,]    0    1    0
#[2,]    1    0    1
#[3,]    0    1    0

但这不适用于其他单元格(也不适用于 4 个角单元格)。


推荐阅读