【发布时间】:2021-12-30 13:58:02
【问题描述】:
我想将一个函数应用于 RGB 栅格,首先使用公式 DNstd = (DN-mean(DN)/sd(DN) 标准化原始值,然后是标准化过程,但现在使用公式 DNnor = 255*(DNstd-min(DNstd)/(max(DNstd)-min(DNstdmin)) 没有成功。我不想逐层应用,而是在单个函数中应用于所有栅格 (r)。在我的例子中:
# Create a RBG raster
library(raster)
r1 <- raster(ncol=10, nrow=10)
values(r1) <- rpois(100, 150)
r2 <- raster(ncol=10, nrow=10)
values(r2) <- rpois(100, 200)
r3 <- raster(ncol=10, nrow=10)
values(r3) <- rpois(100, 150)
r <- stack(r1, r2, r3)
names(r)=c("R","G","B")
r
# class : RasterStack
# dimensions : 10, 10, 100, 3 (nrow, ncol, ncell, nlayers)
# resolution : 36, 18 (x, y)
# extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
# crs : +proj=longlat +datum=WGS84 +no_defs
# names : R, G, B
# min values : 124, 170, 126
# max values : 183, 235, 181
# Standardized the values using the first DNstd = (DN-DNmean)/DNstd
#and second Normalized the values using now DNnor = 255*(DNstd-DNstdmin)/(DNstdmax-DNstdmin)
DNnor <- function(img, i, j, k) {
bi <- img[[i]]
bj <- img[[j]]
bk <- img[[k]]
bi_std <- (bi-mean(bi))/sd(bi)
bj_std <- (bj-mean(bj))/sd(bj)
bk_std <- (bk-mean(bk))/sd(bk)
bi_nor <- 255*(bi_std-min(bi_std))/(max(bi_std)-min(bi_std))
bj_nor <- 255*(bj_std-min(bj_std))/(max(bj_std)-min(bj_std))
bk_nor <- 255*(bk_std-min(bk_std))/(max(bk_std)-min(bk_std))
return(bi_nor, bj_nor, bk_nor)
}
normalized_image <- DNnor(r, 1, 2, 3)
# Error in as.double(x) :
# cannot coerce type 'S4' to vector of type 'double'
请问有什么帮助吗?
【问题讨论】: