Радиометрическая коррекция изображения ландшафта с использованием 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)), если (! Is.null(names(x))) list(names(x),: длина 'dimnames') [1] не равно экстенту массива)

1 ответ

Если вы хотите выполнить радиометрическую калибровку для всех полос только в одном исполнительном блоке, вам также необходимо загрузить файл метаданных. Поэтому вы можете сделать это в нескольких формах. Но следующий код может легко решить вашу проблему.

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

Когда вы установите bandSet на "full", все полосы в солнечной области будут обработаны.

Другие вопросы по тегам