У меня есть растр группы 34 (.tif), размером примерно 10 МБ каждая, со значениями 1 и 0 присутствия или отсутствия эвкалипта, соответственно, продукта контролируемой классификации той же области и идентичной.Каждый растр представляет год оценки (i) с 1985 по 2018. Я хочу найти сумму двух типов последовательностей пикселей в группах из трех изображений:
- стабильных пикселей: значение пикселяравно 1 в году (i), (i + 1) e (i-1) и соответствует последовательности 111. То есть, для последовательных лет это эвкалипт.
- нестабильные пиксели: это 1 в год i и 0 в год i + 1 и год i-1 (последовательность 010).То есть это поочередно эвкалипт, а в другие годы это не так, что может быть ошибкой классификации.
В обоих случаях цель состоит в том, чтобы проверить, является ли классификация устойчивой, за пределамивысокие показатели каппа в результате классификации.Мои вопросы:
- Как я могу реализовать этот процесс в R?
- Я читал, что, возможно, цикл с "for" не лучший вариант для работы с большими растрами, этоесть другая альтернатива?Потому что мне приходится реализовывать другие процессы с похожей логикой.
Я попробовал несколько альтернатив на основе: Функция для суммирования каждой ячейки сетки стека растра с использованием других растров в качестве индикатора или здесь Условно вычисляя разницу между макс (растром) и каждым растровым слоем растрового стека , но я не очень хорошо понимаю его логику.Та же проблема, которую я мог решить с помощью QGIS с помощью «Калькулятора полей», и он работает хорошо (это утомительно и возможно с ошибками) следующим образом:
Стабильный пиксель = ("img1985 @ 1" = 1 И"img1986 @ 1" = 1 И "img1987 @ 1" = 1) + ... + ("img2016 @ 1" = 1 И "img2017 @ 1" = 1 И "img2018 @ 1" = 1)
Нестабильный пиксель = ("img1985 @ 1" = 0 И "img1986 @ 1" = 1 И "img1987 @ 1" = 0) + ... + ("img2016 @ 1" = 0 И "img2017 @ 1" =1 AND "img2018 @ 1" = 0)
Где imgYear: каждый растр каждого года;1985 ... 2018: год
```
library(raster)
# Initial sample data + result
r1 <- r2 <- r3 <- r4 <- r5 <- rUns <- rSta <- raster(matrix(0, 10, 10))
# Create some "stable pixels" of example.
for (i in seq(from=10, to=50, by=10)) {
r1[(i+6):(i+10)] <- 1
r2[(i+6):(i+10)] <- 1
r3[(i+6):(i+10)] <- 1
r4[(i+6):(i+10)] <- 1
r5[(i+6):(i+10)] <- 1
}
# Create some "unstable pixels" of example.
r2 [c(60,70,80)] <- 1
r3 [1] <- 1
r4 [c(60,70,80)] <- 1
# Stack raster
r <- stack(r1, r2, r3, r4, r5)
# *** Expected results ***
# Sum of stable pixels (Sta)
for (i in 2:nlayers(r)) {
pixelSta <- ((r[[i-1]] == 1) * (r[[i]] == 1) * (r[[i+1]] == 1))* 1
}
# Don't work: Error in .local(x, ...) : not a valid subset
# *** Result Expected (rSta): sequence 111. Manually.
for (i in seq(from=10, to=50, by=10)) {
rSta[(i+6):(i+10)] <- 3
}
as.matrix(rSta)
# Sum of unstable pixels (Uns)
for (i in 2:nlayers(r)) {
pixelUns <- ((r[[i-1]] == 0) * (r[[i]] == 1) * (r[[i+1]] == 0))* 1
}
# Don't work: Error in .local(x, ...) : not a valid subset
# *** Result Expected (rUns): sequence 010. Manually.
rUns [c(60,70,80)] <- 2
rUns [1] <- 1
as.matrix(rUns)
```
Ожидаемые результаты в коде (*** Ожидаемый результат, вручную) .`
Заранее большое спасибо, и я надеюсь, что ябыло ясно.