[英]Rescaling vegetation index in R
我在为栅格计算植被指数的 function 中集成重新缩放方法时遇到了一些麻烦。 我尝试使用此解决方案中的公式。 代码会运行,但我会收到两条警告消息,并且我的图像会是空白的。 我检查了栅格最小值和最大值,它们分别读取“-Inf”“Inf”。 我还尝试了使用这篇文章中的RPMG
库的另一种方法,但遇到了另一个错误。 这次是在运行VARI
变量之后。 我希望将重新缩放方法保持为“平淡无奇”,以便可以将其集成到其他指数中,例如三角绿色指数 (TGI)。 有什么建议么?
方法一:
# Visable Atmospherically Resistant Index
VARI.Overlay <- function(b1, b2, b3){
VARI.Calc <- (b1 - b3) / (b1 + b3 -b2)
VARI.Scale <- ((VARI.Calc - min(VARI.Calc)) / (max(VARI.Calc) - min(VARI.Calc)) - 0.5 ) * 2
return(VARI.Scale)
}
VARI <- overlay(img[[1]], img[[2]], img[[3]], fun = VARI.Overlay)
image(VARI, main = 'VARI')
方法一错误:
1: In min(x) : no non-missing arguments to min; returning Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
方法二:
# Visable Atmospherically Resistant Index
VARI.Overlay <- function(b1, b2, b3){
VARI.Calc <- (b1 - b3) / (b1 + b3 -b2)
VARI.min <- min(VARI.Calc)
VARI.max <- max(VARI.Calc)
VARI.Scale <- RESCALE(VARI.Calc, -1, 1, VARI.min, VARI.max)
return(VARI.Scale)
}
VARI <- overlay(img[[1]], img[[2]], img[[3]], fun = VARI.Overlay)
方法二错误:
Error in (function (x, fun, filename = "", recycle = TRUE, forcefun = FALSE, :
cannot use this formula, probably because it is not vectorized
你可以做这样的事情
示例数据
library(raster)
d <- brick(system.file("external/rlogo.grd", package="raster"))
Function。 注意.is.finite
。 这是为了捕捉(b1 + b3 - b2) == 0
的情况。 发生这种情况时,最大值变为Inf
,结果不好。
varifun <- function(b1, b2, b3){
x <- (b1 - b3) / (b1 + b3 -b2)
x[!is.finite(x)] <- NA
x
}
v <- overlay(d, fun=varifun)
现在计算最小值和最大值。 您不能在上面的 function 中这样做,因为这将对数据集的块进行操作,因此每个块可能会获得不同的最小值和最大值。 大概您希望这些用于整个数据集。
vmn <- cellStats(v, "min", na.rm=TRUE)
vmx <- cellStats(v, "max", na.rm=TRUE)
现在结合
vari <- 2 * ((v - vmn) / (vmx - vmn) - 0.5)
vari
#class : RasterLayer
#dimensions : 77, 101, 7777 (nrow, ncol, ncell)
#resolution : 1, 1 (x, y)
#extent : 0, 101, 0, 77 (xmin, xmax, ymin, ymax)
#crs : +proj=merc +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0
#source : memory
#names : layer
#values : -1, 1 (min, max)
顺便说一句,您从方法 1 中获得的消息不是错误。 这些消息源于仅计算NA
的最小值或最大值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.