我有一个处理图像的问题。我从栅格中剪下一些多边形,然后提取波段值:
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
答案 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
是一个堆栈,这似乎也可以正常工作。