I need an "R" code to calculate the coefficient of variation for a moving window of pixels in a raster image.
I made a code but I have doubts if it is actually calculating. Some pixels the values are correct, others are close to what they should give.
code:
Importar as bibliotecas necessárias
library(raster)
Carregar a imagem
img <- raster("CH05.tif")
Definir o tamanho da janela móvel
window_size <- 5
Criar uma função para calcular o coeficiente de variação
cv <- function(x) {
Verificar se há valores ausentes
if (any(is.na(x))) {
return(NA)
}
Calcular o coeficiente de variação
mean_value <- mean(x, na.rm = TRUE)
Evitar divisão por zero
if (mean_value == 0) {
return(NA)
}
sd_value <- sd(x, na.rm = TRUE)
if (sd_value == 0) {
return(NA)
}
return((sd_value / mean_value) * 100)
}
Calcular o coeficiente de variação de cada pixel da imagem usando a função focal
cv_image <- focal(img, w = matrix(1, nrow = window_size, ncol = window_size), fun = cv)
Certifique-se de ter executado o código para calcular cv_image usando a função focal
Verifique se cv_image foi corretamente criado
if (!exists("cv_image")) {
print("cv_image não foi encontrado. Execute o código para calcular cv_image primeiro.")
} else {
Ajustar a extensão da nova imagem para ser igual à da imagem original
extent(cv_image) <- extent(img)
#Plotar a imagem antes
plot(cv_image, main = "Coeficiente de Variação")
Gere o histograma
hist(cv_image, main = "Histograma do Coeficiente de Variação", xlab = "Coeficiente de Variação")
}
Salvar a nova imagem
writeRaster(cv_image, "cv_image2.tif", overwrite = TRUE)