# "C:\percepcionremota\PR\imagenfaca"
getwd()
[1] "C:/percepcionremota/PR/imagenfaca"
####Para realizar procesamiento de imagenes satelitales encontramos diversas alternativas en la actualidad, ya sea con software libre o comercial, se afrima que opciones son altamente competitivas y poseen gran capacidad de procesamiento. Para este estudio se utilizaron R, Rstudio, que permiten realizar una clasificación de imagenes no supervisada y supervisada, ArcGIS para la elaboracion de shape, como otros procesos que se desarrollaran durante este estudio, explorando aspectos aspectos técnicos.
####Dentro del proyecto podemos resaltar algunas fases u operaciones como el preprocesado implementado a la imagen satelital donde se han aplicado una serie de transformaciones, la aplicación de técnicas de clasificación supervisada mediante la realización de entrenamiento y testeo, usando como area de interes el municipio de Facatativa.
library(raster)
# Costera
b1 = raster('./LC08_L1TP_008057_20181230_20190130_01_T1_B1.TIF')
# Azul
b2 = raster('./LC08_L1TP_008057_20181230_20190130_01_T1_B2.TIF')
# Verde
b3 = raster('./LC08_L1TP_008057_20181230_20190130_01_T1_B3.TIF')
# Rojo
b4 = raster('./LC08_L1TP_008057_20181230_20190130_01_T1_B4.TIF')
# Infrarojo cercano (NIR)
b5 = raster('./LC08_L1TP_008057_20181230_20190130_01_T1_B5.TIF')
# Infrarrojo de Onda Corta 1 (SWIR 1)
b6 = raster('./LC08_L1TP_008057_20181230_20190130_01_T1_B6.tif')
# Infrarrojo de Onda Corta 2 (SWIR 2)
b7 = raster('./LC08_L1TP_008057_20181230_20190130_01_T1_B7.tif')
# Pancromatica
b8 = raster('./LC08_L1TP_008057_20181230_20190130_01_T1_B8.tif')
# Cirros (Cirrus)
b9 = raster('./LC08_L1TP_008057_20181230_20190130_01_T1_B9.tif')
# Sensor Térmico Infrarrojo 1 (TIRS 1)
b10 = raster('./LC08_L1TP_008057_20181230_20190130_01_T1_B10.tif')
# Sensor Térmico Infrarrojo 2 (TIRS 2)
b11 = raster('./LC08_L1TP_008057_20181230_20190130_01_T1_B11.tif')
b2
class : RasterLayer
dimensions : 7741, 7581, 58684521 (nrow, ncol, ncell)
resolution : 30, 30 (x, y)
extent : 446685, 674115, 362985, 595215 (xmin, xmax, ymin, ymax)
crs : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
source : C:/percepcionremota/PR/imagenfaca/LC08_L1TP_008057_20181230_20190130_01_T1_B2.TIF
names : LC08_L1TP_008057_20181230_20190130_01_T1_B2
values : 0, 58849 (min, max)
# Sistema de coordenadas de referencia (CRS)
crs(b2)
CRS arguments:
+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
# Numero de celdas, filas, columnas
ncell(b2)
[1] 58684521
# Dimension
dim(b2)
[1] 7741 7581 1
# Resolucion espacial
res(b2)
[1] 30 30
# Numero de badas
nlayers(b2)
[1] 1
# ¿Las bandas tienen la misma extension, numero de filas y columnas, proyeccion, resolucion y origen?
compareRaster(b2,b3)
[1] TRUE
## [1] TRUE
# Creamos el RasterStack
s2015 = stack(b5, b4, b3)
# Revisamos las propiedades del RasterStack
s2015
class : RasterStack
dimensions : 7741, 7581, 58684521, 3 (nrow, ncol, ncell, nlayers)
resolution : 30, 30 (x, y)
extent : 446685, 674115, 362985, 595215 (xmin, xmax, ymin, ymax)
crs : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
names : LC08_L1TP_008057_20181230_20190130_01_T1_B5, LC08_L1TP_008057_20181230_20190130_01_T1_B4, LC08_L1TP_008057_20181230_20190130_01_T1_B3
min values : 0, 0, 0
max values : 65535, 62063, 58803
## class : RasterStack
## dimensions : 7741, 7581, 58684521, 3 (nrow, ncol, ncell, nlayers)
## resolution : 30, 30 (x, y)
## extent : 446085, 673515, 362985, 595215 (xmin, xmax, ymin, ymax)
## crs : ++proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
## names : LC08_L1TP_008057_20180317_20180403_01_T1_B5, LC08_L1TP_008057_20180317_20180403_01_T1_B4, LC08_L1TP_008057_20180317_20180403_01_T1_B3
## min values : 0, 0, 0
## max values : 65535, 65535, 65535
# Primero creamos una lista de los raster layers usando:
filenames = paste0('./LC08_L1TP_008057_20181230_20190130_01_T1_B', 1:7, ".tif")
filenames
[1] "./LC08_L1TP_008057_20181230_20190130_01_T1_B1.tif" "./LC08_L1TP_008057_20181230_20190130_01_T1_B2.tif"
[3] "./LC08_L1TP_008057_20181230_20190130_01_T1_B3.tif" "./LC08_L1TP_008057_20181230_20190130_01_T1_B4.tif"
[5] "./LC08_L1TP_008057_20181230_20190130_01_T1_B5.tif" "./LC08_L1TP_008057_20181230_20190130_01_T1_B6.tif"
[7] "./LC08_L1TP_008057_20181230_20190130_01_T1_B7.tif"
## [1] "./data2015/LC08_L1TP_008057_20150104_20170415_01_T1_B1.tif"
## [2] "./data2015/LC08_L1TP_008057_20150104_20170415_01_T1_B2.tif"
## [3] "./data2015/LC08_L1TP_008057_20150104_20170415_01_T1_B3.tif"
## [4] "./data2015/LC08_L1TP_008057_20150104_20170415_01_T1_B4.tif"
## [5] "./data2015/LC08_L1TP_008057_20150104_20170415_01_T1_B5.tif"
## [6] "./data2015/LC08_L1TP_008057_20150104_20170415_01_T1_B6.tif"
## [7] "./data2015/LC08_L1TP_008057_20150104_20170415_01_T1_B7.tif"
###### no lee la banda 8 porque tiene diferente extension, la banda 9 es cirro, y las bandas 10 y 11 son termales
## [8] "./data2015/LC08_L1TP_008057_20150104_20170415_01_T1_B8.tif"
## [9] "./data2015/LC08_L1TP_008057_20150104_20170415_01_T1_B9.tif"
## [10] "./data2015/LC08_L1TP_008057_20150104_20170415_01_T1_B10.tif"
## [11] "./data2015/LC08_L1TP_008057_20150104_20170415_01_T1_B11.tif"
# Creo el RasterStack de las bandas seleccionadas, es decir de la 1 a la 7 (1:7)
landsatFaca = stack (filenames)
landsatFaca
class : RasterStack
dimensions : 7741, 7581, 58684521, 7 (nrow, ncol, ncell, nlayers)
resolution : 30, 30 (x, y)
extent : 446685, 674115, 362985, 595215 (xmin, xmax, ymin, ymax)
crs : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
names : LC08_L1TP//0_01_T1_B1, LC08_L1TP//0_01_T1_B2, LC08_L1TP//0_01_T1_B3, LC08_L1TP//0_01_T1_B4, LC08_L1TP//0_01_T1_B5, LC08_L1TP//0_01_T1_B6, LC08_L1TP//0_01_T1_B7
min values : 0, 0, 0, 0, 0, 0, 0
max values : 56188, 58849, 58803, 62063, 65535, 45351, 37289
## class : RasterStack
## dimensions : 7741, 7581, 58684521, 7 (nrow, ncol, ncell, nlayers)
## resolution : 30, 30 (x, y)
## extent : 446085, 673515, 362985, 595215 (xmin, xmax, ymin, ymax)
## crs : +proj=utm +zone=10 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
## names : LC08_L1TP//5_01_T1_B1, LC08_L1TP//5_01_T1_B2, LC08_L1TP//5_01_T1_B3, LC08_L1TP//5_01_T1_B4, LC08_L1TP//5_01_T1_B5, LC08_L1TP//5_01_T1_B6, LC08_L1TP//5_01_T1_B7
## min values : 0, 0, 0, 0, 0, 0, 0
## max values : 65535, 65535, 65535, 65535, 65535, 65535, 65535
# Trazando capas indivuduales (aZUL, VERDE, ROJO, INFRAROJO CERCANO) a partir del RasterStack
par(mfrow = c(2,2))
plot(b2, main = "Azul", col = gray(0:100 / 100), axes = FALSE)
plot(b3, main = "Verde", col = gray(0:100 / 100), axes = FALSE)
plot(b4, main = "Rojo", col = gray(0:100 / 100), axes = FALSE)
plot(b5, main = "NIR", col = gray(0:100 / 100), axes = FALSE)
#####Cuando las bandas espectrales de un determinado sensor coinciden exactamente con las longitudes de onda de los colores Rojo, Verde y Azul, la composición resultante se conoce como “color verdadero”. Las composiciones RGB se utilizan para analizar y resaltar de forma visual determinada información de la imagen, como ,o presenta la siguiente imagen:
# Ploteamos la combinacion de bandas 4, 3 y 2 que para L8 es color verdadero
landsatRGBFaca <- stack(b4, b3, b2)
plotRGB(landsatRGBFaca, axes = TRUE, stretch = "lin", main = "Landsat True Color Composite")
# Ploteamos la combinacion de bandas 5, 4 y 3 que para L8 es color falso
par(mfrow = c(1,2))
plotRGB(landsatRGBFaca, axes=TRUE, stretch="lin", main="Landsat True Color Composite")
landsatFCC <- stack(b5, b4, b3)
plotRGB(landsatFCC, axes=TRUE, stretch="lin", main="Landsat False Color Composite")
## solucion a la pregunta 1, ploteamos la combinacion de bandas 5, 6 y 4 que para L8 es color falso
landsatfaca_p1 = stack(b5, b6, b4)
plotRGB(landsatfaca_p1, axes=TRUE, stretch="lin", main="Composicion de color falsa - Agua / Tierra")
# select first 3 bands only
landsatFacasub1 <- subset(landsatFaca, 1:3)
# same
landsatFacasub2 <- landsatFaca[[1:3]]
# Number of bands in the original and new data
nlayers(landsatFaca)
[1] 7
nlayers(landsatFacasub1)
[1] 3
nlayers(landsatFacasub2)
[1] 3
## Eliminando las ultimas cuatro bandas, es decir, seleccionaremos para nuestro ejercicio las bandas de 1 a la 7 (1:7)
landsatFaca <- subset(landsatFaca, 1:7)
# Aca vemos que nombres tienen las bandas
names(landsatFaca) <- c('ultra-blue', 'blue', 'green', 'red', 'NIR', 'SWIR1', 'SWIR2')
names(landsatFaca)
[1] "ultra.blue" "blue" "green" "red" "NIR" "SWIR1" "SWIR2"
plot (landsatFaca)
## [1] "LC08_L1TP_008057_20180317_20180403_01_T1_B1" "LC08_L1TP_008057_20180317_20180403_01_T1_B2"
## [3] "LC08_L1TP_008057_20180317_20180403_01_T1_B3" "LC08_L1TP_008057_20180317_20180403_01_T1_B4"
## [5] "LC08_L1TP_008057_20180317_20180403_01_T1_B5" "LC08_L1TP_008057_20180317_20180403_01_T1_B6"
## [7] "LC08_L1TP_008057_20180317_20180403_01_T1_B7"
# Aca las renombramos y las ploteamos
## [1] "ultra.azuk" "azul" "verde" "rojo" "NIR" "SWIR1" "SWIR2"
## [1] "ultra.azul" "azul" "verde" "rojo" "NIR" "SWIR1" "SWIR2"
# Usando Extension
extent(landsatFaca)
class : Extent
xmin : 446685
xmax : 674115
ymin : 362985
ymax : 595215
## class : Extent
## xmin : 446085
## xmax : 673515
## ymin : 362985
## ymax : 595215
# Cargamos un objeto espacial que se encuentra en un shapefile. Esta extension es el area de faca
Facashape = shapefile('C:/percepcionremota/ShpFaca/coberturatierrafaca18.shp')
e = extent(landsatFaca)
###crop landsat
landsatFacacrop = crop (landsatFaca, e)
plotRGB(landsatFacacrop, axes = TRUE, stretch= "lin", main= "Landsat composicion a falso color faca")
NA
NA
drawExtent y drawPoly para seleccionar un area de interes
# Creacion de un compuesto de color verdadero, para landsat 8 la combinacion de color es 4,3,2
landsatcropfacasolucion = crop(stack(b4, b3, b2), e)
# Ploteamos la combinacion
plotRGB(landsatcropfacasolucion, axes = TRUE, stretch = "lin", main = "imagen faca - Color Verdadero")
# Aca guardanmos nuestro raster de faca y lo imprimimos para ver lo que se ha guardado
x = writeRaster(landsatFaca, filename="faca_banda.tif", overwrite=TRUE)
plot(x)
# Lo guardamos tambien en formato .grd ya que este formato si guarda los nombres de las capas
writeRaster(landsatFaca, filename="faca_banda.grd", overwrite=TRUE)
# Comparacion del reflejo en la longitud de onda Ulta azul vs azul
pairs(landsatFacacrop [[1:2]], main = "ultra=blue vs blue" )
# Comparacion del reflejo en la longitud de onda Roja vs NIR
pairs(landsatFacacrop[[4:5]], main = "Red versus NIR")
numero= length(ptsfacacobert)
numero
[1] 306
df_samples = as (ptsfacacobert, "SpatialPointsDataFrame")
df_samples
class : SpatialPointsDataFrame
features : 306
extent : 564553.6, 581280.3, 526517.1, 541062.1 (xmin, xmax, ymin, ymax)
crs : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
variables : 1
names : Name
min values : artificial
max values : plantacion_forestal
df_samples@data=data.frame(ID=1:numero,size=1)
df_samples
class : SpatialPointsDataFrame
features : 306
extent : 564553.6, 581280.3, 526517.1, 541062.1 (xmin, xmax, ymin, ymax)
crs : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
variables : 2
names : ID, size
min values : 1, 1
max values : 306, 1
plot(landsatFacacrop)
plot(facacobert, add= TRUE)
plot(df_samples,pch=1, cex=(df_samples$size)/4, add=TRUE)
df_samples$Name =over(df_samples,facacobert)$Name
df_samples
class : SpatialPointsDataFrame
features : 306
extent : 564553.6, 581280.3, 526517.1, 541062.1 (xmin, xmax, ymin, ymax)
crs : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
variables : 3
names : ID, size, Name
min values : 1, 1, artificial
max values : 306, 1, plantacion_forestal
df1=raster::extract(landsatFacacrop, df_samples)
ms = aggregate(df1, list(ptsfacacobert$Name), mean)
# En lugar de la primera columna, usamos nombres de fila
rownames(ms) = ms[,1]
ms = ms[,-1]
ms
## ultra.blue blue green red NIR SWIR1 SWIR2
# Agua 8251.053 7501.298 6840.658 6066.404 5762.921 5081.289 5050.825
# Bosque 8026.761 7326.134 6773.410 6172.284 11207.410 7962.134 6412.746
# Cultivos 8417.864 7800.318 7603.682 7197.955 18156.818 14063.045 11198.864
# Fresa 8541.667 7870.667 7464.667 6902.000 13157.667 9832.333 7806.000
# Invernadero 11522.083 11035.833 11442.333 11179.083 18368.333 14785.000 11300.083
# pastos 8481.000 7926.727 8267.909 7331.636 21093.273 12449.000 8507.273
# zona desnuda 10975.500 11035.500 12884.750 14428.000 17930.750 20671.750 16907.500
# Cree un vector de color para las clases de cobertura del suelo para usar en el trazado
mycolor = c('darkred', 'yellow', 'burlywood', 'cyan', 'blue', 'green','magenta', "darkgreen")
# transformar ms de un data.frame a una matriz
ms = as.matrix(ms)
# Primero crea una parcela vacia
plot(0, ylim=c(0,25000), xlim = c(1,7), type='n', xlab="Bandas", ylab = "Reflectancia")
# Agrega las diferentes clases
for (i in 1:nrow(ms)){
lines(ms[i,], type = "l", lwd = 3, lty = 1, col = mycolor[i])
}
# Titulo
title(main="Perfil espectral de Landsat", font.main = 2)
# Leyenda
legend("topleft", rownames(ms),
cex=0.8, col=mycolor, lty = 1, lwd =3, bty = "n")
### solo puedo cargar las bandas de la 1 a la 7 porque la 8 no tiene la misma extension de las demas
raslistp3 = paste0('./LC08_L1TP_008057_20181230_20190130_01_T1_B', 1:7, ".tif")
##raslistp3= practica 3
# Stack de las bandas cargadas
landsatp3 = stack(raslistp3)
plot(landsatp3)
# Combinacion de las bandas 4,3,2
landsatRGBp3 = landsatp3[[c(4,3,2)]]
## landsatRGBp3 = practica 3
plot(landsatRGBp3)
# Combinacion de las bandas en falso color 5,4,3
landsatFCCp3 = landsatp3[[c(5,4,3)]]
## landsatFCCp3 = practica 3
plot(landsatFCCp3)
NA
NA
## vifaca= indice de vegetacion para la imagen 2015
vifaca = function(img, k, i) {
bk = img [[k]]
bi = img [[i]]
vifaca=(bk-bi)/(bk+bi)
return(vifaca)
}
## para landsat NIR = 5, red = 4
## ndvifaca= indice de vegetacion de direfencia normalizada (NDVI) para la imagen landsat 2015
ndvifaca = vifaca(landsatp3, 5, 4)
plot(ndvifaca, col=rev(terrain.colors(9)), main= "Landsat faca - NVDI")
# Seleccionando el shape del area de faca, cargandolo y recortandolo con respecto del NDVI de la imagen Landsat
NDVI1_faca = shapefile('C:/percepcionremota/ShpFaca/coberturatierrafaca18')
eNDVI1_faca = extent(NDVI1_faca)
NDVI_recorte_1 = crop(NDVI1_faca, eNDVI1_faca)
vi2_faca = function(x, y) {
(x-y)/(x+y)
}
ndvi2_faca = overlay(landsatp3[[5]], landsatp3[[4]], fun = vi2_faca)
plot(ndvi2_faca, col=rev(terrain.colors(10)), main = "Landsat faca5 - NDVI v2")
# Seleccionando el shape del area de faca, cargandolo y recortandolo con respecto del NDVI de la imagen Landsat
NDVI2_faca = shapefile('C:/percepcionremota/ShpFaca/coberturatierrafaca18.shp')
eNDVI2_faca = extent(NDVI2_faca)
NDVI_recorte_2 = crop(NDVI2_faca, eNDVI2_faca)
plot(NDVI_recorte_2, col=rev(terrain.colors(10)), main = "Landsat faca - NDVI")
## s1 es solucion 1
ndvifaca_s1 = vifaca(landsatp3, 3, 6)
plot(ndvifaca_s1, col=rev(terrain.colors(10)), main= "Landsat faca - NDWI")
vi2_faca_s1 = function(x, y) {
(x-y)/(x+y)
}
ndvi2_faca_s1 = overlay(landsatp3[[3]], landsatp3[[6]], fun = vi2_faca_s1)
plot(ndvi2_faca_s1, col=rev(topo.colors(10)), main = "Landsat faca - NDWI")
### PARA INDICE DE AGUA DE DIFERENCIA NORMALIZADA - NDWI
# Seleccionando el shape del area de faca, cargandolo y recortandolo con respecto del NDwI de la imagen Landsat
NDWI_faca = shapefile('C:/percepcionremota/ShpFaca/coberturatierrafaca18.shp')
eNDWI = extent(NDWI_faca)
NDWI_recorte = crop(ndvi2_faca_s1, eNDWI)
plot(NDWI_recorte, col=rev(topo.colors(10)), main = "Landsat faca - NDWI")
### PARA INDICE INCORPORADO DE DIFERENCIA NORMALIZADA - NDBI
ndbi1_faca_s1 = overlay(landsatp3[[6]], landsatp3[[5]], fun = vi2_faca_s1)
plot(ndbi1_faca_s1, col=rev(heat.colors(10)), main = "Landsat faca - NDBI")
# Seleccionando el shape del area de faca, cargandolo y recortandolo con respecto del NDBI de la imagen Landsat
NDBI_faca = shapefile('C:/percepcionremota/ShpFaca/coberturatierrafaca18.shp')
eNDBI = extent(NDBI_faca)
NDBI_recorte = crop(ndbi1_faca_s1, eNDBI)
plot(NDBI_recorte, col=rev(heat.colors(10)), main = "Landsat faca - NDBI")
## respuesta a la pregunta 2: ver histograma de datos
hist(NDWI_recorte,
main= "Dsitribucion de valores del NDWI",
xlab= "NDWI",
ylab= "Frecuencia",
col= topo.colors(50),
xlim= c (-0.5,0.3),
breaks = 30,
xaxt= 'n')
axis(side = 1, at=seq(-0.5,1,0.05), labels = seq(-0.5,1,0.05))
## respuesta a la pregunta 2: ver histograma de datos
hist(NDBI_recorte,
main= "Dsitribucion de valores del NDBI",
xlab= "NDBI",
ylab= "Frecuencia",
col= heat.colors(50),
xlim= c (-0.5,0.3),
breaks = 30,
xaxt= 'n')
axis(side = 1, at=seq(-0.5,1,0.05), labels = seq(-0.5,1,0.05))
veg = reclassify(NDBI_recorte, cbind(-Inf, 0.4, NA))
ning昼㹡n argumento finito para min; retornando Infningun argumento finito para max; retornando -Inf
plot(veg, main = "Vegetacion")
ning昼㹡n argumento finito para min; retornando Infningun argumento finito para max; retornando -Inf
land = reclassify(NDBI_recorte, c(-Inf, 0.25, NA, 0.25, 0.3, 1, 0.3, Inf, NA))
plot(land, main = " Que es esto?")
plotRGB(landsatFaca, r=7, g=6, b=4, axes = TRUE, stretch="lin", main = "faca composicion en falso color")
plot(land, add = TRUE, legend= FALSE)
plotRGB(landsatFaca, r=1, g=2, b=3, axes=TRUE, stretch="lin", main="Landsat False Color Composite")
plot(land, add=TRUE, legend=FALSE)
vegc = reclassify(NDBI_recorte, c(-Inf,0.25,1, 0.25,0.3,2, 0.3,0.4,3, 0.4,0.5,4, 0.5,Inf, 5))
plot(vegc, col = rev(terrain.colors(4)), main = 'Umbral basado en NDVI')
# Umbral, en este caso para agua
agua = reclassify(NDBI_recorte, cbind(-Inf, 0.1, NA))
plot(agua, main = "Agua", col= topo.colors(10))
#Reclasifico el Umbral, en este caso para agua
aguac = reclassify(NDBI_recorte, c(-Inf,0.025,1, 0.025,0.03,2, 0.03,0.1,3, 0.1,0.2,4, 0.2,Inf, 5))
plot(aguac, col = rev(topo.colors(10)), main = 'Umbral basado en NDWI')
ANALISIS DE COMPONENTES PRINCIPALES
set.seed(1)
sr = sampleRandom(landsatp3, 100000)
plot(sr[,c(4,5)], main = "NIR - ROJO")
pca = prcomp(sr, scale = TRUE)
pca
Standard deviations (1, .., p=7):
[1] 2.59003689 0.44921866 0.27644178 0.09269922 0.06591655 0.02057198 0.01140578
Rotation (n x k) = (7 x 7):
PC1 PC2 PC3 PC4 PC5
LC08_L1TP_008057_20181230_20190130_01_T1_B1 -0.3828966 0.2384366 -0.13610614 -0.60007235 -0.32922500
LC08_L1TP_008057_20181230_20190130_01_T1_B2 -0.3817989 0.3228502 -0.06913742 -0.24378800 -0.12020857
LC08_L1TP_008057_20181230_20190130_01_T1_B3 -0.3821098 0.3131713 -0.02221730 0.21450895 0.09840963
LC08_L1TP_008057_20181230_20190130_01_T1_B4 -0.3789077 0.4004274 0.13575699 0.58234331 0.17008071
LC08_L1TP_008057_20181230_20190130_01_T1_B5 -0.3695465 -0.4480919 -0.74943217 0.08558584 0.29581948
LC08_L1TP_008057_20181230_20190130_01_T1_B6 -0.3741646 -0.5129561 0.25823666 0.29187454 -0.66453292
LC08_L1TP_008057_20181230_20190130_01_T1_B7 -0.3761344 -0.3414484 0.57396587 -0.32066662 0.55626948
PC6 PC7
LC08_L1TP_008057_20181230_20190130_01_T1_B1 0.127061460 -0.54165739
LC08_L1TP_008057_20181230_20190130_01_T1_B2 -0.488236233 0.65799701
LC08_L1TP_008057_20181230_20190130_01_T1_B3 0.781106318 0.29932697
LC08_L1TP_008057_20181230_20190130_01_T1_B4 -0.361200728 -0.42324897
LC08_L1TP_008057_20181230_20190130_01_T1_B5 -0.068502312 -0.03838947
LC08_L1TP_008057_20181230_20190130_01_T1_B6 0.011655828 0.05709746
LC08_L1TP_008057_20181230_20190130_01_T1_B7 -0.007700369 -0.01330462
screeplot(pca)
pci = predict(landsatp3, pca, index = 1:2)
plot(pci[[1]])
## Recortado a faca
pci_faca = shapefile('C:/percepcionremota/ShpFaca/coberturatierrafaca18.shp')
epci = extent(pci_faca)
pci_rec = crop(pci, epci)
plot(pci_rec, col=rev(terrain.colors(20)), main = "pci faca")
landsatfcfaca = stack(b5, b4, b3)
## recortado a faca
pc2 = shapefile('C:/percepcionremota/ShpFaca/coberturatierrafaca18.shp')
epc2 = extent(pc2)
pc2_rec= crop(landsatfcfaca, epc2)
pc2 = reclassify(pci_rec [[2]], c(-Inf,0,1,0,Inf,NA))
par(mfrow = c(1,2))
plotRGB(pc2_rec, r = 1, g = 2, b = 3, axes = TRUE, stretch = "lin", main = "FFC")
plotRGB(pc2_rec, r = 1, g = 2, b = 3, axes = TRUE, stretch = "lin", main = "FFC")
plot(pc2, legend = FALSE, add = TRUE)
library(raster)
landsat8 = stack(b2,b3,b4,b5,b6,b7)
names(landsat8) = c ('blue', 'green', 'red', 'NIR', 'SWIR1','SWIR2')
plot(landsat8)
landsat8faca_imagen = stack(b5, b6, b4)
plotRGB(landsat8faca_imagen, axes=TRUE, stretch="lin", main="Landsat composicion de color falsa - Agua / Tierra")
# recortando a faca
facaextend = shapefile('C:/percepcionremota/ShpFaca/coberturatierrafaca18.shp')
ext = extent(facaextend)
landsatfcc = crop(landsat8faca_imagen, ext)
plotRGB(landsatfcc, axes = TRUE, stretch = "lin", main = "Landsat True Color Composite")
ndviLandSat8=(landsat8[['NIR']]-landsat8[['red']])/(landsat8[['NIR']]+landsat8[['red']])
plot(ndviLandSat8)
landsat8faca_imagen = stack(b5, b6, b4)
plotRGB(landsat8faca_imagen, axes=TRUE, stretch="lin", main="Landsat composicion de color falsa - Agua / Tierra")
# recortando a faca
facaextend = shapefile('C:/percepcionremota/ShpFaca/coberturatierrafaca18.shp')
ext = extent(facaextend)
landsatfcc = crop(landsat8faca_imagen, ext)
plotRGB(landsatfcc, axes = TRUE, stretch = "lin", main = "Landsat True Color Composite")
NA
NA
NA
ndviLandSat8=(landsat8[['NIR']]-landsat8[['red']])/(landsat8[['NIR']]+landsat8[['red']])
plot(ndviLandSat8)
# Es importante configurar el generador de semillas porque `kmeans` inicia los centros en ubicaciones aleatorias, para eso utilizaremos set.seed
set.seed(99)
# Queremos crear 10 grupos, permitir 500 iteraciones, comenzar con 5 conjuntos aleatorios utilizando el método "Lloyd"
kmncluster = kmeans(na.omit(nr), centers = 10, iter.max = 500, nstart = 5, algorithm="Lloyd")
Error in na.omit(nr) : objeto 'nr' no encontrado
# Use el objeto ndvi (en este caso se llama "landsat8cropfaca") para establecer los valores del cluster en un nuevo raster
knr = setValues(landsatFacacrop, kmncluster$cluster)
# Tambien puedes hacerlo asi
knr= raster(landsatFacacrop)
values(knr) = kmncluster$cluster
knr
landsat8p2 = stack(b6, b3, b2)
#plotRGB(landsat8p2, axes=TRUE, stretch="lin", main="Landsat composicion de color falsa ")
#crop landsat by the extent
landsatfacap2 = crop(landsat8p2, ext)
plotRGB(landsatfacap2, axes = TRUE, stretch = "lin", main = "Landsat FCC - faca")
# convertir el raster a vector / matriz
nr_p2=getValues(landsatfacap2)
str(nr_p2)
int [1:300979, 1:3] 8933 9002 10072 10961 11390 12368 12708 13320 13510 13658 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:3] "LC08_L1TP_008057_20181230_20190130_01_T1_B6" "LC08_L1TP_008057_20181230_20190130_01_T1_B3" "LC08_L1TP_008057_20181230_20190130_01_T1_B2"
# Es importante configurar el generador de semillas porque `kmeans` inicia los centros en ubicaciones aleatorias, para eso utilizaremos set.seed
set.seed (99)
# Queremos crear 10 grupos, permitir 500 iteraciones, comenzar con 5 conjuntos aleatorios utilizando el método "Lloyd"
kmncluster_p2 = kmeans(na.omit(nr_p2), centers = 10, iter.max = 500, nstart = 5, algorithm = "Lloyd")
# kmeans devuelve un objeto de la clase "kmeans"
str(kmncluster_p2)
List of 9
$ cluster : int [1:300979] 9 9 9 6 6 8 8 8 8 8 ...
$ centers : num [1:10, 1:3] 14704 14166 26021 19680 33698 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:10] "1" "2" "3" "4" ...
.. ..$ : chr [1:3] "LC08_L1TP_008057_20181230_20190130_01_T1_B6" "LC08_L1TP_008057_20181230_20190130_01_T1_B3" "LC08_L1TP_008057_20181230_20190130_01_T1_B2"
$ totss : num 1.18e+13
$ withinss : num [1:10] 3.76e+10 9.01e+10 9.30e+10 9.32e+10 1.04e+11 ...
$ tot.withinss: num 6e+11
$ betweenss : num 1.12e+13
$ size : int [1:10] 40372 16656 5230 6859 3016 64330 14028 67531 49945 33012
$ iter : int 115
$ ifault : NULL
- attr(*, "class")= chr "kmeans"
# Use el objeto ndvi (en este caso se llama "landsatfacap2") para establecer los valores del cluster en un nuevo raster
knr_p2 = setValues(landsatfacap2, kmncluster_p2$cluster)
# Tambien puedes hacerlo asi
knr_p2= raster(landsatfacap2)
values(knr_p2) = kmncluster_p2$cluster
knr_p2
class : RasterLayer
dimensions : 511, 589, 300979 (nrow, ncol, ncell)
resolution : 30, 30 (x, y)
extent : 564225, 581895, 526425, 541755 (xmin, xmax, ymin, ymax)
crs : +proj=utm +zone=18 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0
source : memory
names : layer
values : 1, 10 (min, max)
#Defina un vector de color para 10 grupos (mas informacion sobre como configurar el color mas adelante)
#mycolor_p2 = c (topo.colors(10))
plot(knr_p2, main = 'Unsupervised classification', col = rev(topo.colors(10)))
# Directorio de trabajo
setwd("C:/percepcionremota/PR/imagenfaca/")
# Importar las imagenes
B2 = raster("LC08_L1TP_008057_20181230_20190130_01_T1_B2.TIF")
B3 = raster("LC08_L1TP_008057_20181230_20190130_01_T1_B3.TIF")
B4 = raster("LC08_L1TP_008057_20181230_20190130_01_T1_B4.TIF")
B5 = raster("LC08_L1TP_008057_20181230_20190130_01_T1_B5.TIF")
B6 = raster("LC08_L1TP_008057_20181230_20190130_01_T1_B6.TIF")
B7 = raster("LC08_L1TP_008057_20181230_20190130_01_T1_B7.TIF")
# Datos imagen MTL
dia <- 004
SUN_ELEVATION = 51.89134539
RADIANCE_MULT_BAND_2 = 1.3298E-02
RADIANCE_MULT_BAND_3 = 1.2254E-02
RADIANCE_MULT_BAND_4 = 1.0333E-02
RADIANCE_MULT_BAND_5 = 6.3236E-03
RADIANCE_MULT_BAND_6 = 1.5726E-03
RADIANCE_MULT_BAND_7 = 5.3006E-04
RADIANCE_ADD_BAND_2 = -66.49141
RADIANCE_ADD_BAND_3 = -61.27126
RADIANCE_ADD_BAND_4 = -51.66738
RADIANCE_ADD_BAND_5 = -31.61786
RADIANCE_ADD_BAND_6 = -7.86307
RADIANCE_ADD_BAND_7 = -2.65028
REFLECTANCE_MAXIMUM_BAND_2 = 1.210700
REFLECTANCE_MAXIMUM_BAND_3 = 1.210700
REFLECTANCE_MAXIMUM_BAND_4 = 1.210700
REFLECTANCE_MAXIMUM_BAND_5 = 1.210700
REFLECTANCE_MAXIMUM_BAND_6 = 1.210700
REFLECTANCE_MAXIMUM_BAND_7 = 1.210700
RADIANCE_MAXIMUM_BAND_2 = 805.01141
RADIANCE_MAXIMUM_BAND_3 = 741.81116
RADIANCE_MAXIMUM_BAND_4 = 625.53699
RADIANCE_MAXIMUM_BAND_5 = 382.79742
RADIANCE_MAXIMUM_BAND_6 = 95.19823
RADIANCE_MAXIMUM_BAND_7 = 32.08690
# Conversion
SUN_ELEVATION_R <- SUN_ELEVATION*pi/180 # radianes
d <- 1+0.0167*(sin((2*pi*(dia-93.5))/365)) # distancia del sol a la tierra
# Determinacion ESUN
ESUN2 <- pi*(d^2)*RADIANCE_MAXIMUM_BAND_2/REFLECTANCE_MAXIMUM_BAND_2
ESUN3 <- pi*(d^2)*RADIANCE_MAXIMUM_BAND_3/REFLECTANCE_MAXIMUM_BAND_3
ESUN4 <- pi*(d^2)*RADIANCE_MAXIMUM_BAND_4/REFLECTANCE_MAXIMUM_BAND_4
ESUN5 <- pi*(d^2)*RADIANCE_MAXIMUM_BAND_5/REFLECTANCE_MAXIMUM_BAND_5
ESUN6 <- pi*(d^2)*RADIANCE_MAXIMUM_BAND_6/REFLECTANCE_MAXIMUM_BAND_6
ESUN7 <- pi*(d^2)*RADIANCE_MAXIMUM_BAND_7/REFLECTANCE_MAXIMUM_BAND_7
# Elimar valores nulos
B2[B2==0] <- NA
B3[B3==0] <- NA
B4[B4==0] <- NA
B5[B5==0] <- NA
B6[B6==0] <- NA
B7[B7==0] <- NA
# Determinacion de radiancia sensor
L2 <- RADIANCE_MULT_BAND_2*B2 + RADIANCE_ADD_BAND_2
L3 <- RADIANCE_MULT_BAND_3*B3 + RADIANCE_ADD_BAND_3
L4 <- RADIANCE_MULT_BAND_4*B4 + RADIANCE_ADD_BAND_4
L5 <- RADIANCE_MULT_BAND_5*B5 + RADIANCE_ADD_BAND_5
L6 <- RADIANCE_MULT_BAND_6*B6 + RADIANCE_ADD_BAND_6
L7 <- RADIANCE_MULT_BAND_7*B7 + RADIANCE_ADD_BAND_7
# Determinacion de la radiancia minima
Lmin2 <- RADIANCE_MULT_BAND_2*min(getValues(B2), na.rm = TRUE)+ RADIANCE_ADD_BAND_2
Lmin3 <- RADIANCE_MULT_BAND_3*min(getValues(B3), na.rm = TRUE)+ RADIANCE_ADD_BAND_3
Lmin4 <- RADIANCE_MULT_BAND_4*min(getValues(B4), na.rm = TRUE)+ RADIANCE_ADD_BAND_4
Lmin5 <- RADIANCE_MULT_BAND_5*min(getValues(B5), na.rm = TRUE)+ RADIANCE_ADD_BAND_5
Lmin6 <- RADIANCE_MULT_BAND_6*min(getValues(B6), na.rm = TRUE)+ RADIANCE_ADD_BAND_6
Lmin7 <- RADIANCE_MULT_BAND_7*min(getValues(B7), na.rm = TRUE)+ RADIANCE_ADD_BAND_7
# Determinacion radiancia del objeto oscuro
LDOS2 <- 0.01*ESUN2*sin(SUN_ELEVATION_R)/pi*(d^2)
LDOS3 <- 0.01*ESUN3*sin(SUN_ELEVATION_R)/pi*(d^2)
LDOS4 <- 0.01*ESUN4*sin(SUN_ELEVATION_R)/pi*(d^2)
LDOS5 <- 0.01*ESUN5*sin(SUN_ELEVATION_R)/pi*(d^2)
LDOS6 <- 0.01*ESUN6*sin(SUN_ELEVATION_R)/pi*(d^2)
LDOS7 <- 0.01*ESUN7*sin(SUN_ELEVATION_R)/pi*(d^2)
# Determinar el efecto bruma
LP2 <- Lmin2-LDOS2
LP3 <- Lmin3-LDOS3
LP4 <- Lmin4-LDOS4
LP5 <- Lmin5-LDOS5
LP6 <- Lmin6-LDOS6
LP7 <- Lmin7-LDOS7
# Banda Reflectancia Superficie Dark Object Substrction (DOS)
RS_dos_B2 <- (pi*(L2-LP2)*(d)^2)/(ESUN2*sin(SUN_ELEVATION_R))
RS_dos_B3 <- (pi*(L3-LP3)*(d)^2)/(ESUN3*sin(SUN_ELEVATION_R))
RS_dos_B4 <- (pi*(L4-LP4)*(d)^2)/(ESUN4*sin(SUN_ELEVATION_R))
RS_dos_B5 <- (pi*(L5-LP5)*(d)^2)/(ESUN5*sin(SUN_ELEVATION_R))
RS_dos_B6 <- (pi*(L6-LP6)*(d)^2)/(ESUN6*sin(SUN_ELEVATION_R))
RS_dos_B7 <- (pi*(L7-LP7)*(d)^2)/(ESUN7*sin(SUN_ELEVATION_R))
# Combinacion de bandas
L8_B234567_RS_DOS <- stack(RS_dos_B2,RS_dos_B3,RS_dos_B4,RS_dos_B5,RS_dos_B6,RS_dos_B7)
# Exportacion imagen reflectancia Superfie DOS
writeRaster(L8_B234567_RS_DOS,"L8_B234567_RS_DOS1.tif", drivername="Gtiff", overwrite=TRUE)
## Tema: Temperatura de brillo de Landsat 8 TIRS
# Importar las imagenes
B10 = raster("LC08_L1TP_008057_20181230_20190130_01_T1_B10.TIF")
B11 = raster("LC08_L1TP_008057_20181230_20190130_01_T1_B11.TIF")
# K imagen Landsat 8 TIRS
K1_CONSTANT_BAND_10 = 774.8853
K2_CONSTANT_BAND_10 = 1321.0789
K1_CONSTANT_BAND_11 = 480.8883
K2_CONSTANT_BAND_11 = 1201.1442
# Datos de radiancia del sensor imagen Landsat
RADIANCE_MULT_BAND_10 = 3.3420E-04
RADIANCE_MULT_BAND_11 = 3.3420E-04
RADIANCE_ADD_BAND_10 = 0.10000
RADIANCE_ADD_BAND_11 = 0.10000
# Elimar valores nulos
B10[B10==0] <- NA
B11[B11==0] <- NA
# Determinancion de la Radianca
L10 <- RADIANCE_MULT_BAND_10*(na.omit(B10)) + RADIANCE_ADD_BAND_10
L11 <- RADIANCE_MULT_BAND_11*(na.omit(B11)) + RADIANCE_ADD_BAND_11
# Determinacion Temperatura de brillo Celsius
TB_B10 <- K2_CONSTANT_BAND_10/log(K1_CONSTANT_BAND_10/L10+1) - 273.15
TB_B11 <- K2_CONSTANT_BAND_11/log(K1_CONSTANT_BAND_11/L11+1) - 273.15
# Exportacion imagen Temperatura de brillo Celsius
writeRaster(TB_B10,"L8_TB_B10.tif", drivername="Gtiff",overwrite=TRUE)
writeRaster(TB_B11,"L8_TB_B11.tif", drivername="Gtiff",overwrite=TRUE)
L8_B234567_RS_DOS_py = projectRaster(L8_B234567_RS_DOS, crs = "+init=epsg:32618")
##Clasificacion supervisada con Random Forest - Landsat 8 OLI
# Agregar raster multibandas de landsat 8
L8_faca <- stack("clip_L8_B234567_RS_DOS_py.tif")
Error in .local(.Object, ...) :
Error in .rasterObjectFromFile(x, objecttype = "RasterBrick", ...) :
Cannot create a RasterLayer object from this file. (file does not exist)
## Clasificacion supervisada con Decision_Tree - Landsat 8 OLI
# Agregar raster multibandas de landsat 8
L8_2015 <- stack("clip_L8_B234567_RS_DOS_py.tif")
Error in .local(.Object, ...) :
Error in .rasterObjectFromFile(x, objecttype = "RasterBrick", ...) :
Cannot create a RasterLayer object from this file. (file does not exist)