使用R对辐射图像进行辐射校正

时间:2018-04-19 17:25:47

标签: r landsat

我想使用以下方法对景观图像进行辐射校正:

radiocorr(x, gain, offset, Grescale, Brescale, sunelev, satzenith, edist, Esun, 
    Lhaze, method = "apparentreflectance")

我对每个乐队进行了修正,如下所示:

B1 <- readGDAL("_X20060509_B_1.tif")  
B1.ar<-radiocorr(x = B1, Grescale = 0.76583, Brescale = -2.28583, sunelev = 43.99853366, 
   satzenith = 0, edist = 1.0095786, Esun = 1983, method = "apparentreflectance")
writeGDAL(B1.ar, "C:/Users/Documents/ Reflectance/B1.tif", drivername="GTiff")

如何使一个功能自动执行六个波段的校正? 我试过这个功能:

atmcor <- function(img, i) {
  x<-img[[i]]
  Grescale<-gain[i,2]
  Brescale<-bias[i,2]
  sunelev<-sunelevation[i,2]
  satzenith=0
  edist<-edistance[i,2]
  Esun<-Esun[1,2]
  method = "apparentreflectance"
  B.ar<-radiocorr(x, Grescale, Brescale, sunelev, satzenith, edist, Esun, method)
  return(B.ar)
}

ATMCOR <- atmcor(landsat_stack, 1)

但是,我收到了这个错误: (数组中的错误(x,c(length(x),1L),if(!is.null(names(x)))list(names(x),:   长度&#39; dimnames&#39; [1]不等于数组范围)

1 个答案:

答案 0 :(得分:0)

如果您只想在一个执行块中对所有波段进行辐射校准,您还需要加载元数据文件。 因此,您可以采用多种形式。但以下代码可以轻松解决您的问题。

 radCor(img, metaData, method = "apref", bandSet = "full", hazeValues,
 hazeBands, atmosphere, darkProp = 0.01, clamp = TRUE, verbose)

当您将bandSet设置为“full”时,将处理太阳区域中的所有波段。