【发布时间】:2018-05-04 00:12:24
【问题描述】:
我有两个光栅图像。一个带有值(img)和另一个分段索引(segmentation):
library(raster)
img=raster(t(matrix(c(1,3,1,2,1,11,11,10,NA,NA,2,12,13,14,2,3,1,2,2,1,2,13,NA,12,0,1,2,20,21,2,3,12,13,14,3,2,21,22,21,1,1,2,3,2,2,1,1,NA,NA,1,NA,NA,13,14,NA,NA,27,6,6,5,NA,NA,NA,12,22,28,7,8,5,6,NA,NA,23,24,22,5,NA,NA,5,8,1,2,1,1,2,5,NA,NA,NA,NA,1,2,1,2,2,7,6,5,NA,NA),10,10)))
segmentation=raster(t(matrix(c(1,1,1,1,1,4,4,4,4,4,1,7,7,7,1,5,5,5,5,5,1,7,7,7,1,5,5,6,6,5,1,7,7,7,1,5,6,6,6,5,1,1,1,1,1,5,5,5,5,5,9,9,9,8,8,3,3,3,3,3,9,9,9,8,8,3,3,3,3,3,8,8,8,8,8,3,3,3,3,3,2,2,2,2,2,3,3,3,10,10,2,2,2,2,2,3,3,3,10,10),10,10)))
我需要获取一个向量列表,其中,列表的每一行代表包含NA值的段索引,每个向量包含图像值。
我可以使用 for 循环来做到这一点。但是,当使用更大的图像时,这会使我的处理速度非常慢。有没有一种方法可以在没有 for 循环或更优化的方法的情况下执行此操作?
segNumber = length(freq(segmentation)[,1]) #obtain the number of segments
NAPixels <- which(is.na(img[])) #pixels that are NA in img
segsWithNA <- vector() #initializing
segsWithNA <- unique(segmentation[NAPixels]) #segmentation index that contains NA
listOfSegmentValues <- list() #initializing
for (i in 1:length(segsWithNA)){ #For each segment that contains NA
listOfSegmentValues[[i]] = which(segmentation[] == segsWithNA[i])
}
【问题讨论】:
标签: r list loops vector raster