Радиометрическая коррекция изображения ландшафта с использованием 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", все полосы в солнечной области будут обработаны.