光谱数据的多项式拟合
polynomial fitting on spectral data
我想在我的所有光谱带(Landsat 1-7)上的每个栅格像元上拟合一个多项式函数(最大三阶),创建一个表示系数的新栅格(堆栈)。
我在 6 层(Landsat Band 1-7 [不包括 6])的堆栈中获取了我的数据(包括 NA 值)。
我想我应该告诉多项式函数这些波段位于哪个光谱波长上
- 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
这样才能合适地贴合。
有谁知道如何对每个单元格进行多项式拟合并提取 R 中的系数?感谢您的帮助!
你的问题不是很清楚,因为你没有说明你适合什么。我猜这是乐队号码。你可以这样做。
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
我想在我的所有光谱带(Landsat 1-7)上的每个栅格像元上拟合一个多项式函数(最大三阶),创建一个表示系数的新栅格(堆栈)。 我在 6 层(Landsat Band 1-7 [不包括 6])的堆栈中获取了我的数据(包括 NA 值)。
我想我应该告诉多项式函数这些波段位于哪个光谱波长上
- 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
这样才能合适地贴合。 有谁知道如何对每个单元格进行多项式拟合并提取 R 中的系数?感谢您的帮助!
你的问题不是很清楚,因为你没有说明你适合什么。我猜这是乐队号码。你可以这样做。
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