Anda di halaman 1dari 12

t

2014

Tratamiento
Digital de
Imgenes
Facultad de Ingeniera U.N.R.C.

Alumno:
Toledo Matias

DNI:31925008

TDI 2014

Facultad de Ingeniera
U.N.R.C

Introduccin
El siguiente trabajo se realiz como exmen prefinal de la ctedra de Tratamiento
Digital de Imgenes. El objetivo del mismo es realizar en lenguaje Python un cdigo que
reciba una imgen satelital multiespectral desde un archivo de texto, separe las distintas
bandas espectrales y permita realizar combinaciones de capas para armar imgenes RGB.
Adems, deben mostrarse y almacenarse en formato de fotografa (.png .jpg).
La imagen satelital multiespectral proviene del satlite Terra, el cual tiene a bordo
un instrumento de imagen de alta complejidad llamado Aster. Este dispositivo contiene
distintos sensores, los cuales son los encargados de captar energa en distintas zonas del
espectro electromagntico(bandas).

TDI 2014

Facultad de Ingeniera
U.N.R.C

Desarrollo
Para comenzar hay que decir que en la actualidad las imgenes satelitales son cada
vez ms utilizadas y requeridas por diferentes areas de la ciencia que se muestran
interesadas en aprovechar esta valiossima informacin. Cada sensor es responsable de una
banda. Esto significa que cada sensor capta energa reflejada de distintas porciones del
espetro eletromagntico. Cada capa o banda aporta distinto tipo de informacin, que
combinadas en una imagen RGB pueden utilizarse para darle falso color a la imagen
satelital, permitiendo al usuario apreciar distintos detalles. Cabe aclarar que las imagenes
captadas por cada sensor son imgenes en escala de grises.
En lo que respecta a la programacin del script, el primer paso fue interiorizarme en
como trabajaba este dispositivo de imagen ASTER, para saber cuantas bandas espectrales
estaban representadas en el archivo de texto. A continuacin un resumen de las
caractersticas del mismo:
ASTER
Consiste de tres subsistemas pticos separados, con alta resolucin espectral y espacial.Los
radimetros miden en el visible e infrarrojo cercano (VNIR), en el infrarrojo de onda corta
(SWIR) y en el rango infrarrojo trmico (TIR).
El subsistema VNIR realiza observaciones con un telescopio en posicin nadir, en las
porciones del verde (banda 1) y rojo (banda 2) del espectro visible y en el infrarrojo de
onda corta (banda 3N), con una resolucin espacial de 15m. Adems tiene otro telescopio
que realiza vistas hacia atrs (banda 3B) lo que permite la visin estereoscpica en el
sentido de la rbita y la generacin de modelos digitales de elevaciones (MDE). El
subsistema SWIR tiene 6 bandas y el tamao del pxel es de 30m. El subsistema TIR tiene
5 bandas en el rango trmico y 90m de resolucin espacial.(ver anexo)

Estructura del cdigo


El archivo principal prefinal.py simplemente se encarga de importar el mdulo
funciones.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 archivo funciones.py importa todos los mdulos necesarios y contiene las funciones
desarrolladas para la realizacin del trabajo.
En la primera parte del archivo se importan los distintos mdulos y se importa el archivo
Imagen.txt como un objeto, el cual luego es ledo y dividido en las distintas capas. Cada

TDI 2014

Facultad de Ingeniera
U.N.R.C

capa tiene un total de 864 lneas y el archivo tiene un total de 14 capas. Cabe aclarar que se
trabajo solo con 8 porque parte del archivo estaba corrupto.
A continuacin dar una breve explicacin 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. Retorna una variable en formato de string con el nombre de la banda que el
usuario escogi.
Funcin bda2matriz(bda): Se encarga de formar la matriz correspondiente a cada banda
espectral y convertirla a un formato numrico para que pueda ser representada
posteriormente como una imagen. Recibe como argumento de entrada la banda que se
desea convertir en matriz y retorna como argumento de salida una matriz numrica de 864
filas y 1380 columnas.
Funcin bdaimagen(I): Se encarga de mostrar la imagen correspondiente a determinada
banda espectral. Recibe como argumento de entrada una matriz numrica.
Funcion RGB: Se encarga de pedir al usuario que ingrese en forma de tupla los nmeros
ordenados de las 3 bandas que desea combinar para formar una imagen RGB. 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 mtodo importado fromarray que utiliza esta funcin
lo requiere asi. Finalmente almacena esta matriz en un archivo con formato PNG que
guarda en el mismo directorio que se encuentra el script principal ejecutado.

TDI 2014

Facultad de Ingeniera
U.N.R.C

Resultados del script


Imagen correspondiente a la banda 1

Imagen RGB correspondiente a las bandas (5,3,1)

TDI 2014

Facultad de Ingeniera
U.N.R.C

Mejoras a las imagenes resultantes:


Imagen RGB correspondiente a las bandas (5,3,1) con aumento brillo
Para darle ms 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 mximo. De esta manera cada pixel tiene la misma
cantidad de intensidad adicional y conserva el ancho del histograma, aunque lo desplaza
hacia la derecha(hacia los blancos). Se observa que esto no aporta a la claridad de la
imagen.

Imagen RGB correspondiente a las bandas (5,3,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. Se observa que debido a que la intensidad de los
pixeles tambien aumenta, lo hace tambin el brillo. Pero la mayor claridad resultante en la
imagen se debe al aumento del contraste. La multiplicacin hace que el histograma adems
de desplazarse hacia la derecha aumenta en anchura. Esto significa que hay ms diferencia
ahora entre los pixeles con menor intensidad y los de mayor intensidad.

TDI 2014

Facultad de Ingeniera
U.N.R.C

TDI 2014

Facultad de Ingeniera
U.N.R.C

Conclusin
Con la realizacin del trabajo se repasaron y fijaron conceptos estudiados en la
materia, pudindoselos aplicar en una actividad prctica que es de mucha utilidad en el
campo del procesamiento de imagenes satelitales. Adems me interioric en un lenguaje de
programacin potente y muy utilizado en la actualidad como lo es Python.
Algunas propuestas de mejoras al trabajo realizado seran: optimizar el cdigo,
incorporar a las funciones realizadas las opciones de mejoras de la imagen como la de
aumento de brillo y contraste,entre otras.Tambin se podran realizar estas mejoras
independientemente en cada una de las componentes de las matrices tridimensionales RGB,
asi como tambien elaborar histogramas para comparar las imaganes antes y despues del
procesamiento.

TDI 2014

Facultad de Ingeniera
U.N.R.C

Anexos
Archivo prefinal.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 Ingeniera
U.N.R.C

#####################Lectura del archivo########################


archivo=f.read()# lee el archivo completo
f.close()
lineas=archivo.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,bda2,bda3,bda4,bda5,bda6,bda7,bda8]#
for i in range(1,15):
if valor==i:
banda=bandas[i-1]

TDI 2014

Facultad de Ingeniera
U.N.R.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.imshow(I)
plt.gray()
plt.show()

TDI 2014

Facultad de Ingeniera
U.N.R.C

###########COMBINA 3 CAPAS PARA ARMAR IMAGEN RGB Y GUARDA EN


FORMATO PNG##############################
def RGB():
valor = input ("Ingrese 3 bandas para armar imagen RGB, ej:(1,2,3): ")
bandas=[bda1,bda2,bda3,bda4,bda5,bda6,bda7,bda8]
rgbArray = np.empty((864,1380,3), 'uint8')
rgbArray[..., 0] = bda2matriz(bandas[valor[0]-1])
rgbArray[..., 1] = bda2matriz(bandas[valor[1]-1])
rgbArray[..., 2] = bda2matriz(bandas[valor[2]-1])
img = Image.fromarray(rgbArray)
img.save('RGB.png')
Caractersticas de ASTER

Anda mungkin juga menyukai