光谱数据的多项式拟合

时间:2015-05-25 11:23:25

标签: r curve-fitting raster polynomials

我想在我的所有光谱带(Landsat 1-7)上的每个栅格单元上拟合多项式函数(最大3阶),创建表示系数的新栅格(堆栈)。 我在6层(Landsat Band 1-7 [不包括6])的堆栈中得到了我的数据(包括NA值)。

我猜我应该告诉多项式函数关于频带所在的光谱波长

  1. Landsat7波长(微米)
    • 乐队1 0.45-0.52
    • 乐队2 0.52-0.60
    • 乐队3 0.63-0.69
    • 乐队4 0.77-0.90
    • 乐队5 1.55-1.75
    • 乐队7 2.09-2.35
  2. 以便它可以正确地适应它。 有谁知道如何对每个单元格进行多项式拟合并提取R中的系数?谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

你的问题不是很明确,因为你没有说明你的选择。我猜它是乐队号码。你可以做这样的事情。

library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
b[[2]][125:225] <- NA
s <- stack(b, flip(b, 'y'))
names(s) <- paste0('b', 1:6)
bands <- 1:6
f <- function(x) {
    # in case of NAs; match the number of coefficients returned
    if (any(is.na(x))) return(c(NA, NA, NA))
    m <- lm(x ~ bands + I(bands^2))
    coefficients(m)
}
z <- calc(s, f)
z
plot(z)

如果您需要加快速度,可以按照以下示例进行操作: https://gis.stackexchange.com/questions/144211/want-cell-linear-regression-values-for-a-netcdf-or-multi-band-raster/144408#144408