gpt4 book ai didi

r - 如何选择具有特定值的光栅像素?

转载 作者:行者123 更新时间:2023-12-05 04:11:44 24 4
gpt4 key购买 nike

我希望在其他地方没有问到同样的问题,因为即使这是一个基本练习,我也找不到其他问题...

我有一个栅格,它是从矢量的栅格化中派生出来的;在这个光栅中,对应于多边形的像素被分配了一个数字(例如,属于多边形 A 的所有像素被分配了数字 53;属于多边形 H 的像素被分配了数字 102)。请注意原始矢量中的多边形没有 ID 代码(因此,多边形“A”或“H”是我现在发明的东西)。这是我得到的栅格结构:

> structure(lodi_C00)
class : RasterLayer
dimensions : 1994, 1932, 3852408 (nrow, ncol, ncell)
resolution : 30, 30 (x, y)
extent : 516000, 573960, 4990200, 5050020 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
data source : C:\Users\Laura\Desktop\MSc thesis\Dati\3_Segmentation\Lodi_segmented\lodi_single_classes_rasterized\lodiC00.tif
names : lodiC00
values : 1, 152 (min, max)
attributes :
ID category
from: 0
to : 152 M158200079

现在我只需要从这个栅格中选择与某些多边形对应的像素,即具有特定值的像素。我有一个要选择的像素值列表(有 106 个值):

> C00_trainingrows
[1] 152 62 74 40 102 36 14 78 79 31 35 12 9 137 7 8 43 101 52 133 59 123 23 28 49 93 11 63 72 125 1 69 86
[34] 100 112 145 128 135 32 99 34 44 61 66 47 50 131 129 95 108 76 38 109 39 64 37 53 122 57 21 55 111 113 33 91 77
[67] 132 51 88 10 13 107 24 65 105 60 87 71 147 149 17 139 25 120 124 114 27 45 103 6 84 29 144 141 22 26 5 16 75
[100] 2 41 42 126 118 54 110

所以,我想要一个新的光栅,其中只保留值为“152”、“62”等的像素。

我知道当只选择一个值(例如 152)时,这是可行的:

lodi_C00_training <- lodi_C00 == 152
writeRaster(lodi_C00_training, "lodi_C00_training", format="GTiff", progress="text", overwrite=TRUE)

但是,我需要拥有所有 106 个值。有什么建议吗?

最佳答案

如果你的光栅不是太大你可以试试这个:

#Dummy data start
lodi_C00 <- raster(matrix(1:9))
C00_trainingrows <- c(1,5,9)

#copy your raster
lodi_C00_training <- lodi_C00

#set all pixels that are not contained in your vector to NA
lodi_C00_training[!(lodi_C00[] %in% C00_trainingrows)] <- NA

评论后编辑:

你可以尝试这样的事情:

#define function 
#(setting C00_trainingsrows as a fixed paramater might not be the best practice)

selectPixels <- function(x) {
if(!is.na(x)) {
if(!(x %in% C00_trainingrows)){
x <- NA
}
}
return(x)
}


#Set up a cluster with two cores
beginCluster(2)
lodi_C00_training <- clusterR(lodi_C00,
fun=calc,
args=list(fun=selectPixels),
export='C00_trainingrows')
endCluster()

关于r - 如何选择具有特定值的光栅像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42161011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com