【问题标题】:How to do nearest neighbour interpolation in R for a raster?如何在 R 中对栅格进行最近邻插值?
【发布时间】:2021-06-02 22:01:37
【问题描述】:

我有一个光栅图像,我只想插入 NA 的值。缺失的 NA 通常位于图像的边缘。我对 R 相当陌生,所以我不确定该怎么做。值的准确性不必更高,我只想做最近邻插值。任何帮助和建议或欢迎。我添加了一个简化的代码来生成一个在边界上具有 NA 值的栅格,但理想情况下,这个 NA 值将在栅格的所有 4 个边上。我发现了一个类似于填补 NA 空白 Fill in gaps (e.g. not single cells) of NA values in raster using a neighborhood analysis 的帖子,但它对我不起作用。

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

【问题讨论】:

    标签: r interpolation nearest-neighbor


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。这对我有用。对我不起作用,我的意思是它正在平滑我的整个光栅。我不确定这是什么原因。但这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2019-11-08
    相关资源
    最近更新 更多