terra包进行遥感数据处理(3)

欢迎查看terra包进行遥感数据处理(1)(2)

library(terra)

## terra version 0.9.11

rfiles <- paste0('data/rs/LC08_044034_20170614_B', 1:11, ".tif")
landsat <- rast(rfiles)
landsatRGB <- landsat[[c(4,3,2)]]
landsatFCC <- landsat[[c(5,4,3)]]

定义植被指数函数

vi <- function(img, k, i) {
  bk <- img[[k]]
  bi <- img[[i]]
  vi <- (bk - bi) / (bk + bi)
  return(vi)
}
ndvi <-
vi(landsat, 5, 4)
plot(ndvi, col=rev(terrain.colors(10)),
     main = "Landsat-NDVI")

ndvi直方图

NDVI值是标准化的,并且范围在-1到+1之间。较高的值表示更多的绿色覆盖。

#从直方图可看到峰值在0.25-0.3之间
hist(ndvi,
     main = "Distribution of NDVI values",
     xlab = "NDVI",
     ylab= "Frequency",
     col = "wheat",
     xlim = c(-0.5, 1),
     breaks = 30,
     xaxt = 'n')
axis(side=1, at = seq(-0.5,1, 0.05),
     labels = seq(-0.5,1, 0.05))

#NDVI值大于0.4的栅格认为是植被,
#可通过classify函数提取植被栅格。
veg <- classify(ndvi, cbind(-Inf, 0.4, NA))
plot(veg, main='Vegetation')

m <- c(-Inf, 0.25, NA0.25,
       0.3, 10.3, Inf, NA)
rcl <- matrix(m, ncol = 3, byrow = TRUE)
land <- classify(ndvi, rcl)
plot(land, main = 'NDVI值为0.25-0.3')

plotRGB(landsatRGB, r=1, g=2, b=3,
        axes=TRUE, stretch="lin",
        main="Landsat False Color Composite")
plot(land, add=TRUE, legend=FALSE)

主成分

为了降低数据的维数和噪声,有时需要对多光谱数据进行变换。主成分变换是一种通用的数据降维方法,它可以从一组较大的相关波段中创建几个不相关波段。

set.seed(1)
sr <- spatSample(landsat, 10000)
#植被和土壤线图
plot(sr[,c(4,5)], main = "NIR-Red plot")

pca <- prcomp(sr, scale = TRUE)
pca

screeplot(pca)

# function to restrict prediction to the
# first two principal components
pca_predict2 <- function(model, data, ...) {
  predict(model, data, ...)[,1:2]
}
pci <-
predict(landsat, pca, fun=pca_predict2)
plot(pci)

# quick look at the histogram of second component
hist <- pci[[2]]
m <- c(-Inf,-3,NA, -3,-2,0, -2,-1,
       1, -1,0,2, 0,1,3, 1,2,4,
       2,6,5, 6,Inf,NA)
rcl <- matrix(m, ncol = 3, byrow = TRUE)
rcl

##      [,1] [,2] [,3]
## [1,] -Inf   -3   NA
## [2,]   -3   -2    0
## [3,]   -2   -1    1
## [4,]   -1    0    2
## [5,]    0    1    3
## [6,]    1    2    4
## [7,]    2    6    5
## [8,]    6  Inf   NA

pcClass <- classify(pci[[2]], rcl)
par(mfrow=c(1,2))
plotRGB(landsatFCC, r = 1, g = 2, b = 3, stretch = "lin", axes=TRUE, main = "False Color")
plot(pcClass, main="PCA")

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值