如何在 R 中为栅格进行最近邻插值?

How to do nearest neighbour interpolation in R for a raster?

我有一张光栅图像,我想为其插入仅适用于 NA 的值。缺失的 NA 通常位于图像的边界。我是 R 的新手,所以我不确定该怎么做。这些值的精度不必更高,我只想进行最近邻插值。任何帮助和建议或欢迎。我已经添加了一个简化的代码来生成一个栅格,它在边界上有 NA 值,但理想情况下,这个 NA 值应该在栅格的所有 4 个边上。我发现 post 类似于填充 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

我认为您可以为此使用焦点功能。如果你在边界和其他地方有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 个角单元格)。