如何从 R 中的多边形值中删除光栅图像的像素

时间:2021-06-08 00:28:10

标签: r raster mask

我有一个处理图像的问题。我从栅格中剪下一些多边形,然后提取波段值:

library(raster)
library(sf)

#Read raster
EX1<-raster::stack("ueg.tif")

#Plot raster
plotRGB(EX1, r = 1, g = 2, b = 3)

#Read shapefile
cxs <- sf::st_read("polygons_cx.shp")

#Clip polygon in raster
rr <- mask(EX1, cxs)

#Extract values RGB
ex <- raster::extract(rr, cxs, sp=T)

我想从图像中删除多边形 26 和 19 的像素值(因为它们代表我在分析中用作控制的颜色)。但我不确定我会怎么做...我想到了像在 NA 中转换这些值然后应用一个新的掩码,但我不知道怎么做,有人可以提供任何提示吗?

ex[c(26,19)] <- NA

1 个答案:

答案 0 :(得分:0)

如果没有可重现的示例,我不确定 ex 是单层栅格还是多层栅格。但基本原则是用NA替换与您要替换的值匹配的值。它是基本 R 向量中相同内容的扩展:

> Z = c(1,2,3,4,5)
> Z[Z %in% c(2,5)] = -999
> Z
[1]    1 -999    3    4 -999

使用由矩阵制成的微小 3x3 栅格进行测试:

> m = matrix(c(1,2,3,26,26,5,NA,19,9), 3,3)
> m
     [,1] [,2] [,3]
[1,]    1   26   NA
[2,]    2   26   19
[3,]    3    5    9
> ex = raster(m)
> as.matrix(ex)
     [,1] [,2] [,3]
[1,]    1   26   NA
[2,]    2   26   19
[3,]    3    5    9

并用 NA 替换所有 26 和 19:

> ex[ex %in% c(26, 19)]  = NA

看看我们得到了什么:

> as.matrix(ex)
     [,1] [,2] [,3]
[1,]    1   NA   NA
[2,]    2   NA   NA
[3,]    3    5    9
> 

如果 ex 是一个堆栈,这似乎也可以正常工作。