首页 > 解决方案 > 如何将孤立的栅格值添加到周围的类?

问题描述

给定的是一个初始栅格

    r <- raster(ncol=10, nrow=10)
values(r) <- c(1,1,2,1,1,1,1,1,3,3, 1,1,1,1,1,1,1,3,3,3, 1,1,1,1,1,3,3,3,3,3, 1,1,1,2,2,3,3,3,3,3, 1,2,2,2,2,3,3,2,3,3, 3,2,2,2,2,3,3,3,3,1, 2,2,2,2,2,2,3,2,3,1, 2,2,2,3,3,3,3,3,3,3, 2,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,1)
plot(r)

在此处输入图像描述

丛中有几个“岛屿”。我正在寻找一种将这个孤立像素添加到主要周围类的方法。所以我收到以下栅格:

r1 <- raster(ncol=10, nrow=10)
values(r1) <- c(1,1,1,1,1,1,1,1,3,3, 1,1,1,1,1,1,1,3,3,3, 1,1,1,1,1,3,3,3,3,3, 1,1,1,2,2,3,3,3,3,3, 1,2,2,2,2,3,3,3,3,3, 2,2,2,2,2,3,3,3,3,3, 2,2,2,2,2,2,3,3,3,3, 2,2,2,3,3,3,3,3,3,3, 2,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,3)
plot(r1)

在此处输入图像描述

孤立的像素被添加到主要的周围类中,但如果至少一个相邻单元具有相同的值,则保留。

如何达到这个结果?

标签: raggregaterasterspatial

解决方案


您可以使用focal自定义函数参数。像下面这样的东西。

f <- function(i) {
    if (is.na(i[5])) return(NA)
    s <- sum(i[5] == i, na.rm=TRUE)
    if (s == 1) {
        b <- table(i)
        m <- max(b, na.rm=TRUE)
        if (m > 1) {
            b <- as.numeric( names(which.max(b)[1]) )
            return(b)
        } 
    } 
    i[5]
}

r[3,6]您在下面的示例数据,但请注意,我更改了一个值以使其与您的绘图c(0,1,0,1)(单元格已连接,并且您会为一个单元格获得不同的结果。您还可以指定平面 CRS。

library(raster)
r <- raster(ncol=10, nrow=10, xmn=0, xmx=1, ymn=0, ymx=1)
values(r) <- c(1,1,2,1,1,1,1,1,3,3, 1,1,1,1,1,1,1,3,3,3, 1,1,1,1,1,2,3,3,3,3, 1,1,1,2,2,3,3,3,3,3, 1,2,2,2,2,3,3,2,3,3, 3,2,2,2,2,3,3,3,3,1, 2,2,2,2,2,2,3,2,3,1, 2,2,2,3,3,3,3,3,3,3, 2,3,3,3,3,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,1)
plot(r)

rr <- focal(r, matrix(1,3,3), f, pad=TRUE)
plot(rr)

在此处输入图像描述

这与您为右下边缘的 2 个灰色单元格显示的内容不同,因为根据您指定的规则,您显示的内容不正确。这些单元格都具有相同值的邻居。


推荐阅读