У меня есть два растровых изображения. Один со значениями (img), а другой с индексами сегментации (сегментация):
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])
}