t2014 ºººººººººººººººº Tratamiento Digital de Imágenes Facultad de Ingeniería – U.N.R.C. Alumno: Toledo Matias DNI:31925008 R. . La imagen satelital multiespectral proviene del satélite Terra. El objetivo del mismo es realizar en lenguaje Python un código que reciba una imágen satelital multiespectral desde un archivo de texto. separe las distintas bandas espectrales y permita realizar combinaciones de capas para armar imágenes RGB. Además.C Introducción El siguiente trabajo se realizó como exámen prefinal de la cátedra de Tratamiento Digital de Imágenes.jpg). deben mostrarse y almacenarse en formato de fotografía (. Este dispositivo contiene distintos sensores.TDI 2014 Facultad de Ingeniería U.png ó . el cual tiene a bordo un instrumento de imagen de alta complejidad llamado Aster. los cuales son los encargados de captar energía en distintas zonas del espectro electromagnético(bandas).N. R. Además tiene otro telescopio que realiza vistas hacia atrás (banda 3B) lo que permite la visión estereoscópica en el sentido de la órbita y la generación de modelos digitales de elevaciones (MDE). El subsistema SWIR tiene 6 bandas y el tamaño del píxel es de 30m. El subsistema VNIR realiza observaciones con un telescopio en posición nadir. El archivo funciones. El subsistema TIR tiene 5 bandas en el rango térmico y 90m de resolución espacial.py simplemente se encarga de importar el módulo funciones.Los radiómetros miden en el visible e infrarrojo cercano (VNIR). permitiendo al usuario apreciar distintos detalles. Cabe aclarar que las imagenes captadas por cada sensor son imágenes en escala de grises. el primer paso fue interiorizarme en como trabajaba este dispositivo de imagen ASTER. Cada .py y de interactuar con el usuario para que éste decida si quiere visualizar una banda individual o si quiere combinar 3 bandas para formar una imagen RGB que será almacenada como un archivo PNG. el cual luego es leído y dividido en las distintas capas. en el infrarrojo de onda corta (SWIR) y en el rango infrarrojo térmico (TIR). que combinadas en una imagen RGB pueden utilizarse para darle falso color a la imagen satelital. Cada sensor es responsable de una banda. Cada capa o banda aporta distinto tipo de información. En la primera parte del archivo se importan los distintos módulos y se importa el archivo “Imagen.(ver anexo) Estructura del código El archivo principal prefinal. Esto significa que cada sensor capta energía reflejada de distintas porciones del espetro eletromagnético. con una resolución espacial de 15m.TDI 2014 Facultad de Ingeniería U.txt” como un objeto. A continuación un resumen de las características del mismo: ASTER Consiste de tres subsistemas ópticos separados.C Desarrollo Para comenzar hay que decir que en la actualidad las imágenes satelitales son cada vez más utilizadas y requeridas por diferentes areas de la ciencia que se muestran interesadas en aprovechar esta valiosísima información. En lo que respecta a la programación del script.N. con alta resolución espectral y espacial. en las porciones del verde (banda 1) y rojo (banda 2) del espectro visible y en el infrarrojo de onda corta (banda 3N). para saber cuantas bandas espectrales estaban representadas en el archivo de texto.py importa todos los módulos necesarios y contiene las funciones desarrolladas para la realización del trabajo. Recibe como argumento de entrada una matriz numérica. Función bda2matriz(bda): Se encarga de formar la matriz correspondiente a cada banda espectral y convertirla a un formato numérico para que pueda ser representada posteriormente como una imagen.R. Finalmente almacena esta matriz en un archivo con formato PNG que guarda en el mismo directorio que se encuentra el script principal ejecutado. Función bdaimagen(I): Se encarga de mostrar la imagen correspondiente a determinada banda espectral. Retorna una variable en formato de string con el nombre de la banda que el usuario escogió. A continuación daré una breve explicación de las funciones que fueron desarrolladas en el trabajo: Funcion eliband: Se encarga de pedir al usuario el numero de banda individual que desea visualizar. .TDI 2014 Facultad de Ingeniería U. Recibe como argumento de entrada la banda que se desea convertir en matriz y retorna como argumento de salida una matriz numérica de 864 filas y 1380 columnas.C capa tiene un total de 864 líneas y el archivo tiene un total de 14 capas. Cabe aclarar que se trabajo solo con 8 porque parte del archivo estaba corrupto.N. Forma una matriz tridimensional con las 3 bandas que el usuario escoge y convierte todos sus valores en enteros de 8 bits(uint8). ya que el método importado fromarray que utiliza esta función lo requiere asi. Funcion RGB: Se encarga de pedir al usuario que ingrese en forma de tupla los números ordenados de las 3 bandas que desea combinar para formar una imagen RGB. R.TDI 2014 Facultad de Ingeniería U.N.3.1) .C Resultados del script Imagen correspondiente a la banda 1 Imagen RGB correspondiente a las bandas (5. Se observa que debido a que la intensidad de los pixeles tambien aumenta.C Mejoras a las imagenes resultantes: Imagen RGB correspondiente a las bandas (5. La multiplicación hace que el histograma además de desplazarse hacia la derecha aumenta en anchura.TDI 2014 Facultad de Ingeniería U.1) con aumento brillo Para darle más brillo a la imagen se sumo un valor a cada elemento de la matriz de forma de no superar el valor 255 que es el máximo. . Imagen RGB correspondiente a las bandas (5.R. De esta manera cada pixel tiene la misma cantidad de intensidad adicional y conserva el ancho del histograma. lo hace también el brillo.3. Se observa que esto no aporta a la claridad de la imagen.1) con aumento de brillo y de contraste: En este caso se procedió a multiplicar cada elemento de la matriz por una constante(en este caso 2) de forma de no saturar la imagen. aunque lo desplaza hacia la derecha(hacia los blancos).N. Pero la mayor claridad resultante en la imagen se debe al aumento del contraste. Esto significa que hay más diferencia ahora entre los pixeles con menor intensidad y los de mayor intensidad.3. R.N.TDI 2014 Facultad de Ingeniería U.C . También se podrían realizar estas mejoras independientemente en cada una de las componentes de las matrices tridimensionales RGB.TDI 2014 Facultad de Ingeniería U.R.N. asi como tambien elaborar histogramas para comparar las imaganes antes y despues del procesamiento.entre otras. Algunas propuestas de mejoras al trabajo realizado serían: optimizar el código. Además me interioricé en un lenguaje de programación potente y muy utilizado en la actualidad como lo es Python.C Conclusión Con la realización del trabajo se repasaron y fijaron conceptos estudiados en la materia. . pudiéndoselos aplicar en una actividad práctica que es de mucha utilidad en el campo del procesamiento de imagenes satelitales. incorporar a las funciones realizadas las opciones de mejoras de la imagen como la de aumento de brillo y contraste. R.py” #! /usr/bin/python from funciones import * def main(): opcion=input ("Ingrese 1 para una sola banda y 2 para combinacion RGB: ") if opcion !=1 and opcion !=2: print 'opcion no valida' main() if opcion==1: bdaimagen(bda2matriz(eliband())) if opcion==2: RGB() if __name__ == "__main__": main() Archivo “funciones.py” #! /usr/bin/python from PIL import Image import pylab as plt import numpy as np import sys f=open('Imagen.txt'.'r') .TDI 2014 Facultad de Ingeniería U.N.C Anexos Archivo “prefinal. bda3.bda4.bda2.15): if valor==i: banda=bandas[i-1] .close() lineas=archivo.N.R.bda8]# for i in range(1.TDI 2014 Facultad de Ingeniería U.read()# lee el archivo completo f.C #####################Lectura del archivo######################## archivo=f.split('\n')#obtengo una lista con las lineas del archivo paso=864 bda1=lineas[0:paso] bda2=lineas[paso+1:paso*2 +1] bda3=lineas[paso*2 +2:paso*3 +2] bda4=lineas[paso*3 +3:paso*4 +3] bda5=lineas[paso*4 +4:paso*5 +4] bda6=lineas[paso*5 +5:paso*6 +5] bda7=lineas[paso*6 +6:paso*7 +6] bda8=lineas[paso*7 +7:paso*8 +7] ##############SELECCIONA QUE BANDA MOSTRAR########################## def eliband(): valor = input ("Ingrese banda a visualizar(de 1 a 8): ") banda=[] bandas=[bda1.bda5.bda7.bda6. N.TDI 2014 Facultad de Ingeniería U.show() .R.gray() plt.imshow(I) plt.C if banda==[]: print "coloque un valor entre 1 y 14" a=eliband() return a return banda ###############RECORTA EL ARCHIVO ORIGINAL Y LO CONVIERTE EN MATRIZ SEGUN LA BANDA SELECCIONADA################### def bda2matriz(bda): matbda=[] for i in bda: linfloat = [float(j) for j in i.split()] #convierte a num la matriz ya que al leer del archivo los elementos son del tipo string matbda.append(linfloat) return matbda ##############MUESTRA LA IMAGEN CORRESPONDIENTE A LA BANDA SELECCIONADA################# def bdaimagen(I): plt. bda3.3)..bda8] rgbArray = np..bda2..2.TDI 2014 Facultad de Ingeniería U.png') Características de ASTER . ej:(1. 1] = bda2matriz(bandas[valor[1]-1]) rgbArray[..bda4.R.fromarray(rgbArray) img. 0] = bda2matriz(bandas[valor[0]-1]) rgbArray[. 'uint8') rgbArray[.bda6.3): ") bandas=[bda1..C ###########COMBINA 3 CAPAS PARA ARMAR IMAGEN RGB Y GUARDA EN FORMATO PNG############################## def RGB(): valor = input ("Ingrese 3 bandas para armar imagen RGB.bda5.N... 2] = bda2matriz(bandas[valor[2]-1]) img = Image.1380.save('RGB...bda7.empty((864.
Report "Manejo de imagenes satelitales con Python"