-1

我想使用以下方法对陆地卫星图像进行辐射校正:

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(长度(x),1L),if(!is.null(names(x)))list(names(x),:'dimnames'的长度[1] 不等于数组范围)

4

1 回答 1

0

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

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

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

于 2018-05-12T18:10:46.870 回答