Está en la página 1de 49

PROGRAMACIÓN EN IDL

BÁSICO

Edición bajo petición.


Tiraje limitado a 25 ejemplares.
Si necesita una copia en formato digital,
badaracco_meza@hotmail.com.
PROGRAMACIÓN EN IDL – BÁSICO

CURSO

“PROGRAMACIÓN EN IDL”
BÁSICO

2014

2
PROGRAMACIÓN EN IDL – BÁSICO

INTRODUCCION
IDL (Interactive Data Language) es el lenguaje de programación científico,
utilizado en todas las disciplinas para crear visualizaciones significativas de datos
numéricos complejos. Desde pequeños programas de análisis hasta el desarrollo
de una gran variedad de aplicaciones, IDL proporciona el entorno informático
integral que necesita para obtener eficazmente información a partir de sus datos.

IDL es pues una herramienta para que científicos, investigadores,


ingenieros y demás interesados puedan procesar, analizar, tratar datos y crear
aplicaciones de forma rápida y eficaz. Se trata de un lenguaje de programación
aplicado al procesamiento y análisis de matrices con independencia de sus
dimensiones. Esta característica hace de IDL un lenguaje de programación ideal
para el tratamiento de imágenes, en tanto que una imagen es en esencia una
matriz.

Los temas seleccionados en las próximas páginas son un compendio de


ejemplos extraídos de diferentes fuentes y se utilizan aquí simplemente para
cuestiones didácticas y pedagógicas.

No pretenden ser una colección exhaustiva del tratamiento de datos en IDL,


y para aquellas personas realmente interesadas en estas aplicaciones, se les insta
a que acudan a las fuentes que más adelante se reseñan.

3
PROGRAMACIÓN EN IDL – BÁSICO

CONTENIDO

1. Introducción a IDL
2. Recursos sobre IDL
3. Aplicaciones programadas con IDL
4. Ejemplos de demostración
5. Interprete de comandos
6. Programación Compilada
7. Apertura y edición de funciones prediseñadas
8. Operaciones elementales y tipo de datos
o Arrays
o Creando Arrays
o Operaciones Bouleanas
o Obtención de estadísticas de los datos de los arrays
o Localizando información en un array
o Reordenación de los datos de las matrices
o Cambio del tamaño de las matrices
9. Visualización de datos
o Visualización de trazados (plot)
o Visualización de superficies
10. Procesamiento básico de imágenes
o Apertura de imágenes para su uso posterior
o Visualización
o Umbralización
o Ecualización
o Suavizado y bordes
o Otras modificaciones
11. Sentencias de control en IDL
o Ejecución de condición simple IF

4
PROGRAMACIÓN EN IDL – BÁSICO

o Ejecución de condición múltiple CASE


o Ejecución de bucle FOR
o Ejecución de bucle WHILE
o Ejecución del bucle REPEAT
o Ejecución de conmutador SWITCH
12. Lectura y escritura de datos formateados
o Creando funciones avanzadas de lectura/escritura
13. Introducción a widgets
o Ejemplos de programa conteniendo diferentes widget (sin funcionalidad)
o Creación de una interface grafica de usuario
o Interface con eventos de ratón
o Otros widgets con código fuente

5
PROGRAMACIÓN EN IDL – BÁSICO

1. INTRODUCCIÓN A IDL
Como ya se ha comentado anteriormente, IDL es un lenguaje de
programación orientado al análisis y visualización de datos contenidos en matrices.
Es un lenguaje desarrollado por la compañía Research Systems, Inc. (RSI) ubicada
en Boulder – Colorado y actualmente comercializado por EXELIS Visual
Information Solutions.

La primera versión de IDL fue lanzada en 1981 por David Stern, a la razón
fundador de RSI. Desde entonces, IDL se ha desarrollado enormemente,
aplicándose con éxito en las ciencias del espacio y astronomía, pero usándose
asimismo, como herramienta en institutos de investigación, educación, medicina,
física, ingeniería, entre otras disciplinas.

El éxito alcanzado por IDL en tan corto tiempo de vida, radica en su


flexibilidad en el modode trabajar, donde se incluyen:
 análisis y visualización de datos de forma rápida e interactiva,
 un poderoso entorno de programación,
 una adaptación a diferentes plataformas (Windows, MacOS, UNIX,
Linux, entre otros), de forma que lo programado en un sistema
operativo es válido en cualquier otro, aunque cambie el hardware.
 desarrollo de comandos para la entrada y salida de datos procedentes
de muy diferentes disciplinas (teledetección, hidrología, modelado
tridimensional, tratamiento de imágenes…)
 libre disposición de librerías y rutinas creadas por otros usuarios y
facilitados a la comunidad.

Para los usuarios de Matlab, IDL resultará fácil de utilizar pues ambos
guardan muchas características en común. No se puede decir que uno sea
superior al otro, y la decisión de utilizar uno y otro no se basa en sus
funcionalidades, sino más bien, en cuestiones económicas o de portabilidad con
otros colaboradores.

6
PROGRAMACIÓN EN IDL – BÁSICO

Tanto uno como otro, permiten incluir dentro de sus desarrollos, el código
procedente de otros lenguajes de programación. Es común, que determinadas
operaciones donde se requiere velocidad de proceso, o que estaban previamente
compiladas en otro lenguaje, se incorporen sin ninguna complicación dentro de los
programas desarrollados en IDL.

Aparte de lo anterior, Virtual Machine es una nueva funcionalidad de IDL


lanzada a partir de la versión 6.0. Se trata de una utilidad de libre difusión que
instalada en cualquier ordenador permite de forma simple y sin coste alguno,
ejecutar ficheros desarrollados con IDL.

Hasta ese entonces, para poder ejecutar un algoritmo programado en de


IDL se requería la instalación del propio entorno de desarrollo de IDL, o bien una
versión reducida ‘runtime’ que nos permitiera ejecutar el fichero. Esto traía
bastantes problemas y limitaba la expansión del algoritmo hacia otros usuarios o
entornos.

Virtual Machine permite la liberación de trabas a la hora de facilitar nuestro


código fuente o ejecutable, a cualquier persona, con independencia de su
hardware y su software.

7
PROGRAMACIÓN EN IDL – BÁSICO

2. RECURSOS SOBRE IDL


Sitio Web Oficial
 www.exelisvis.com
 Ayuda On-Line del programa.
Bibliotecas de rutinas
 www.gumley.com
 www.dfanning.com
 www.exelisvis.com
 comp.lang.idl.pvware
 http://idlastro.gsfc.nasa.gov
 http://fermi.jhuapl.edu/slr/slrlib/local_idl.html
 http://www.astro.washington.edu/deutsch/idl/
 http://www.lowell.edu/users/buie/idl/idl.html
Libros
 Gumley L.E., Practical IDL Programming, Morgan Kaufmann
Publishers, 2002.
 Fanning D.W., IDL Programming Techniques, Fanning Software
Consulting, 1999.
 Kling R., Application Development with IDL, Ronn Kling Consulting,
1999
 Kling R., Calling C from IDL, Ronn Kling Consulting, 2001.
 Kling R., Power Graphics with IDL, Ronn Kling Consulting.

8
PROGRAMACIÓN EN IDL – BÁSICO

3. APLICACIONES PROGRAMADAS CON


IDL
IDL es una herramienta para que científicos, investigadores, ingenieros y
demás interesados puedan procesar, analizar, tratar datos y crear aplicaciones de
forma rápida y eficaz.

Se trata de un lenguaje de programación de cuarta generación aplicado al


procesamiento y análisis de matrices con independencia de sus dimensiones (uni,
bi, tri,…, n-dimensional).

Esta característica configura a IDL como un lenguaje de programación ideal


para el tratamiento de imágenes, en tanto que una imagen es en esencia una
matriz. La cantidad de aplicaciones en esta línea, y el elevado número de
institutos de investigación que hacen uso de IDL, dan cuenta de la versatilidad y
potencia del mismo.

La manera más sencilla de entender lo anterior es recurrir a los ejemplos de


demostración que acompañan al software.

 Ejercicio 01: Inicio de IDL

Para ello, abre el entorno de desarrollo de IDL haciendo doble clic en el


icono:

IDL
O desde el menu inicio de Windows en el icono “IDL”

9
PROGRAMACIÓN EN IDL – BÁSICO

Figura 1. Inicio de IDL.

De esta forma, se desplegará la ventana “Lanzador de espacio de


trabajo” (figura 2), en el cual se solicitará al usuario definir su espacio de
trabajo. En nuestro caso, definiremos el espacio de trabajo
“D:\CursoIDL2012”, usando el botón Examinar. En las recientes
versiones de IDL, esto es necesario, porque IDL trabaja con el concepto de
Proyectos, para una mejor organización de su trabajo. Para continuar,
hacer click en el botón Aceptar.

Figura 2. Espacio de trabajo de IDL.

Seguidamente se desplegará la interface de desarrollo de IDL (figura 3).

10
PROGRAMACIÓN EN IDL – BÁSICO

Figura 3. Entorno de desarrollo de IDL.

 Ejercicio 02: Línea de comandos de IDL

Por ahora, fíjate en la parte inferior de ese entorno de desarrollo, donde


figura el prompt IDL>. Esa es la línea de comandos y desde ahí se
ejecutarán muchos comandos a lo largo de este curso introductorio.

Escribe demo para cargar las demostraciones y selecciona la pestaña


denominada Industries.

Una nueva ventana (figura 4) nos permite seleccionar diferentes


demostraciones. Para nuestro objetivo, son interesantes las siguientes
demostraciones:
→ Earthsciences → Mapping demo
→ Engineering→ time series
→ Medical → reconstruction
→ Medical → volumen

11
PROGRAMACIÓN EN IDL – BÁSICO

Figura 4. Librería de demostraciones de IDL.

Aplicaciones más representativas


Las anteriores demostraciones enumeran algunas de las funcionalidades
que se pueden esperar de IDL en cuanto a tratamiento y visualización de datos.

Además de lo anterior, existen multitud de aplicaciones desarrolladas bien


por EXELIS VIS, o por terceras compañías, que amplían el campo de actuación
tanto con fines académicos como comerciales.

Entre los desarrollos más conocidos destacan


 ENVI: sin duda alguna la aplicación desarrollada en IDL por excelencia.
 RiverTools: Aplicación dedicada al cálculo hidráulico con el uso de
modelos digitales de elevación.
 ION (IDL On Net) y VIP (Visual IDL Programming): Entornos para
facilitar la programación de IDL en la Red, y de forma visual.
 FLAASH: Módulo para la corrección atmosférica de imágenes de satélite.
 NOESYS: Visualizador y organizador de datos técnicos.
 SARscape: Procesamiento de imágenes SAR

Puede obtenerse información de todos ellos tanto en la página web de


EXELIS Visual Information Solutions.

12
PROGRAMACIÓN EN IDL – BÁSICO

4. EJEMPLOS DE DEMOSTRACIÓN
A modo de ejemplos significativos, pueden ejecutarse los programas de
demostración que acompañan al propio software. Ello permite obtener una ligera
idea de las aplicaciones y utilidades que podemos demandar de IDL.

 Ejercicio 03: Ejemplos de demostración en IDL

IDL → demo
→Features→Data Visualization→Contours->Contouring Demo
→Features→Surface& 3D Graphics→Panorama Demo
→Features→Images→ImagesProcessing Demo
→Features→Data Visualization→Volumen Rendering→Slicer Demo
→ Features→Data Visualization→Mapping→Global Mapping Demo
→Data Analysis→Math & Statistics
→Data Analysis→Minimization
→Data Analysis→Image Processing->Wavelet Demo

Figura 5. Ejemplo de Demostración CountorPlot.

13
PROGRAMACIÓN EN IDL – BÁSICO

5. INTERPRETE DE COMANDOS

 Ejercicio 04: Interprete de comandos de IDL

Los comandos siguientes se ejecutan todos desde la Consola de IDL.


Siempre es posible efectuar uno a uno los comandos que en ese momento
precisemos.

Presta atención a la coma (,) situada entre el comando inicial y los


argumentos siguientes. Lo escrito después del punto y coma (;) son
comentarios que no son interpretados por IDL

La siguiente secuencia crea dos vectores y los visualiza en un diagrama


bivariante. Es un ejemplo típico de concatenación de comandos. Y donde se
aprecia la sintaxis más sencilla de IDL.

El usuario podrá realizar un seguimiento de las variables que crea IDL al


momento de la ejecución de cada línea de comentos y un historial de los
mismos.

14
PROGRAMACIÓN EN IDL – BÁSICO

Figura 6. Se muestra la salida visualizada en el entorno de programación de IDL. Atención


al vector creado con el comando FINDGEN, y en la parte inferior, al tipo y tamaño de las
variables x,y. Ambas son variables de tipo flotante (float) con un tamaño de 201
elementos.

15
PROGRAMACIÓN EN IDL – BÁSICO

6. PROGRAMACIÓN COMPILADA
Frente al ejercicio anterior, podemos recurrir a un editor de texto para
elaborar nuestro programa. Tras escribirlo, se compila y finalmente se ejecuta. El
siguiente es un algoritmo muy sencillo que incluye una llamada a una función
dentro de él.

 Ejercicio 05: Compilar y ejecutar un programa en IDL

Selecciona Archivo → Nuevo Archivo Fuente de IDL y escribe lo


siguiente en la ventana de edición de texto.

Una vez escrito guarda el fichero con el nombre hola.pro, compílalo y


ejecútalo según la secuencia:

Archivo→Guardar Como → hola.pro


Ejecutar→Compilar hola.pro [también usando Ctrl+F8 o el
icono ]

Ejecutar → Ejecutar hola [también usando F8 o el icono ]

16
PROGRAMACIÓN EN IDL – BÁSICO

Figura 7. Modo de compilación de un programa IDL

17
PROGRAMACIÓN EN IDL – BÁSICO

7. APERTURA Y EDICIÓN DE FUNCIONES


PREDISEÑADAS
Una de las versatilidades de IDL es que el usuario tiene acceso a las
funciones ya programadas dentro del programa. Por ejemplo, la función
correlate nos permite calcular la correlación entre dos variables. Si
quisiéramos ver cómo está programada esa función, simplemente tendríamos que
abrir el fichero correlate.pro situado dentro del subdirectorio donde se
instaló IDL.

 Ejercicio 06: Apertura y edición de funciones IDL

Archivo → Abrir archivo → correlate.pro [se encuentra en el


directorio C:\Archivos de programa\exelis\IDL82\lib]

?correlate ; permite acceder a la ayuda del comando correlate.

Para probar esta función de IDL, calcularemos la correlación de dos


vectores (x, y), ingresando en la línea de comandos lo siguiente:

El valor de correlación entre ambas variables es de 0.702, lo que indica que


ambas variables están bastante correlacionadas. Si fueran iguales, ese valor
sería la unidad.

18
PROGRAMACIÓN EN IDL – BÁSICO

8. VARIABLES, TIPO DE DATOS Y


OPERACIONES ELEMENTALES
En una sesión de IDL, los datos (números y cadenas) son almacenados en
lo que conocemos bien como variables. En IDL hay tres tipos básicos de
variables:
• Escalar (un solo valor)
• Array (de 1 a 8 dimensiones – un vector es un array con solamente 1
dimensión)
• Estructura (un agregado de varios tipos de datos y variables)

Las variables en IDL no necesitan ser declaradas. Cualquier variable en IDL


también tiene un tipo de dato específico. El tipo de dato de cada variable es
determinado por su uso en una sentencia.

 Ejercicio 07: variables y tipos de datos usados en IDL.

La siguiente secuencia nos permite discriminar entre variables y varios tipos


de datos utilizados en IDL.

print, 3*5
a=3*5
help,a
b=3.0*5
help,b
c=sqrt(a) &help, c

En la multiplicación de valores tipo entero (véase tabla 1) obtenemos un


nuevo valor de tipo entero, como lo muestra el comando help. En cambio
al multiplicar un valor real con un valor de tipo entero, el resultado es de
tipo real (float). Lo mismo ocurre al hacer la raíz cuadrada de un número
entero, nos devuelve un real.

19
PROGRAMACIÓN EN IDL – BÁSICO

Tabla 1. Tipos de datos básicos usados en IDL

Arrays

 Ejercicio 08: trabajo con matrices.

IDL presenta su máxima capacidad al trabajar con matrices. Cualquier


variable es una matriz, y como tal, una vez definida dicha matriz puede
operarse con ella, como si de un elemento independiente se tratara.

Matriz=[[0,1,2],[3,4,5],[6,7,8]]
help, matriz
print,matriz
print,matriz,2*matriz
matriz1=[1,1,1]
matriz2=[matriz1,2,2]
print,matriz2

Creando Arrays

 Ejercicio 09: Creación de matrices.

IDL cuenta con una serie de comandos que permiten crear matrices
rellenas de ceros, o con su correspondiente índice de forma rápida. Las
siguientes secuencias dan muestra de ello.

20
PROGRAMACIÓN EN IDL – BÁSICO

ceros=intarr(6,3)
help, ceros
print, ceros
indices=indgen(6,3)
help, indices
print, indices
print, indices[5,2]
otros=replicate(2.0,4,2)
print,bytarr(3, 3, 5)

La capacidad para realizar operaciones sobre elementos específicos de una


matriz es otra de las potencialidades de IDL, llamado también subíndices.
Los corchetes “[“ y “]” se usan para indicar subíndices en IDL. En el caso
de las matrices bi-dimensionales se usa la sintaxis:
Array[#columna, #fila]

Es importante indicar que los subíndices en matrices comienzan en 0 en


lugar de 1. Por ejemplo, para imprimir el elemento de la 2da columna y 4ta
fila de la variable “Array” ejecutamos la sentencia:
Array[1,3]

A continuación algunos comandos adicionales para creación de matrices con


diferentes tipo de datos. Puede obtenerse más información desde la ayuda
on-line.

bytarr, complexarr, dblarr, dcomplexarr, intarr, lon64arr,


lonarr, strarr, uintarr, ulon64arr, ulonarr

 Ejercicio 10: Matrices de dato tipo real

Otro ejemplo de código sencillo para crear matrices con tipo de dato real:

a=fltarr(100)
help, a
print, a(0),a(99)
print, a(10:19)

21
PROGRAMACIÓN EN IDL – BÁSICO

Operaciones Bouleanas

 Ejercicio 11: Operaciones bouleanas

Las siguientes secuencias muestran operaciones de carácter bouleano que


será de utilidad en diferentes procesos. Uno de ellos, la creación de
sentencias condicionales.

print,4<5,5<5,6<5
print,-5>(-indgen(9))
matriz=[0,1,2,-200,4,5,-200,7,8] &print,matriz>0
a=[2,4,6,8] & b=[3,4,5,6]
print,a<b

Obtención de estadísticas de los datos de los arrays


Dado que IDL utiliza matrices de forma masiva, existen una serie de
comandos que nos permiten derivar datos estadísticos de las matrices.
Por ejemplo, muchas veces resulta interesante conocer el tamaño de
las matrices, su valor máximo o mínimo, la desviación estándar, el
sumatorio de sus valores, entre otros.

 Ejercicio 12: Estadísticas de las matrices

La siguiente secuencia explica el funcionamiento básico de estas funciones.

array=indgen(3,3)
print,array
print,total(array);suma de todos los valores d la
matriz
print,total(array,1) ;sumatorio de la primera dimensión
print,total(array,2) ;sumatorio de la segunda dimensión
print,total(array,/cumulative)

22
PROGRAMACIÓN EN IDL – BÁSICO

A continuación algunos comandos para la obtención de datos


estadísticos desde las matrices. Puede obtenerse más información desde
la ayuda on-line.

N_elements() size() min() max() mean() variante()


stddev() moment() total()

Localizando información en un array


Junto a las funciones anteriores existen otras que permiten la localización
de determinados datos dentro de una matriz. Es útil cuando queremos
conocer la localización de un determinado dato dentro de la matriz.

 Ejercicio 13: Información de las matrices

El siguiente ejemplo crea una matriz de nueve términos, y localiza y guarda


dentro de una nueva matriz la posición de aquellos elementos que tienen
valor superior a 35, y luego los visualiza

matriz=indgen(9)*10
print,matriz
indice=where(matriz gt35)
print,indice
print,matriz[indice]

Siguiendo el ejemplo anterior, localiza los elementos con valor mayor


de 35 y que además cumpla que son múltiplos de 4.

indice2=where((matrizgt35) and ((matrizmod4) eq 0))


print,array[indice2]

23
PROGRAMACIÓN EN IDL – BÁSICO

Reordenación de los datos de las matrices


Una serie de comandos permiten la transformación y reordenación de los
datos dentro de las matrices. Su fin puede ser múltiple: desplazar,
transponer, permutar, rotar, localizar ordenadamente nuestros datos.
Algunas de sus utilidades más interesantes se valorarán en el apartado
dedicado al tratamiento de imágenes.

Algunos comandos para la ordenación de los datos dentro de las matrices:

reform() reverse() rotate() transpose() shift() sort() uniq()

Cambio del tamaño de las matrices


Existen tres funciones muy interesantes que partiendo de una matriz
permiten modificar su tamaño, interpolando elementos en su interior. Su
aplicación se verá en el tratamiento de imágenes. Son muy eficaces para
adaptar el tamaño de una imagen a la ventana de visualización, y
para efectuar zoom sobre una zona de la misma.

Comandos para el cambio del tamaño de las matrices

rebin() congrid() interpolate()

24
PROGRAMACIÓN EN IDL – BÁSICO

9. VISUALIZACIÓN DE DATOS
En función del tipo de datos que dispongamos, existen multitud de métodos
de visualizarlos. Ya se ha comentado que la efectividad de IDL está no sólo en el
tratamiento que se efectúa a los datos, sino en la facilidad que tiene para
representarlos de forma intuitiva para el observador.

Visualización de trazados (plot)

 Ejercicio 14: Visualización de funciones

x=findgen(101)*(0.01*2.0*!PI)
y=sin(x)
plot,x,sin(x) ;representa el diagrama bivariante
oplot,x,sin(-x);diagrama sin borrar el anterior
oplot,x,sin(x)*cos(x) ;ídem del anterior

Figura 8. Representación de diferentes funciones superpuestas entre sí.

 Ejercicio 15: Visualización de símbolos.

plot,x,y,psym=1
plot,x,y,psym=-5
plot,x,y,psym=10

25
PROGRAMACIÓN EN IDL – BÁSICO

Figura 9. Representación de diferentes símbolos.

 Ejercicio 16: Visualización en coordenadas polares.

Figura 10. Representación en Coordenadas polares.

 Ejercicio 17: Visualización de barras de error.

26
PROGRAMACIÓN EN IDL – BÁSICO

Figura 11. Representación en barras de error.

 Ejercicio 18: Visualización de Isolíneas.

Figura 12. Representación de isolíneas.

27
PROGRAMACIÓN EN IDL – BÁSICO

Visualización de superficies

 Ejercicio 19: Visualización de superficies.

Figura 13. Sucesión de representaciones obtenidas en la secuencia de superficies.

28
PROGRAMACIÓN EN IDL – BÁSICO

 Ejercicio 20: Visualización de superficies.

Figura 14. Sucesión de representaciones obtenidas en la secuencia de superficies.

 Ejercicio 21: Visualización de superficies 3D.

Figura 15. Sucesión de representaciones obtenidas en la secuencia de volúmenes.

29
PROGRAMACIÓN EN IDL – BÁSICO

10. PROCESAMIENTO BÁSICO DE


IMÁGENES
El tratamiento de imágenes en IDL es relativamente sencillo, si tenemos
presente que los datos dentro de la misma están ordenados de forma matricial, y
como tal, se comportarán como una variable n-dimensional más aun dentro del
entorno de desarrollo.

Es interesante mencionar que IDL dispone de un amplio número de


comandos específicos que permiten la apertura y escritura de imágenes en los
formatos más comunes. Todas ellas tienen una sintaxis muy parecida.

Tabla 2. Funciones IDL para lectura y escritura de imágenes.

La siguiente secuencia de comandos permitirá conocer algunas de las


características más utilizadas en el tratamiento de imágenes dentro de IDL. Se ha
realizado de una forma pretendidamente escueta, de cara a que se pueda
obtener una visión muy general del tratamiento de imágenes, sin entrar en
profundidad en ninguna aplicación particular.

La secuencia se divide en diferentes fases, se inicia con la apertura


de imágenes, su visualización, umbralización y ecualización, filtros de
convolución y miscelánea.

Toda la secuencia es muy sencilla de comprender por lo que no


hace falta información complementaria. Simplemente ejecutando los

30
PROGRAMACIÓN EN IDL – BÁSICO

comandos y observando el resultado es factible entender el funcionamiento.


En todo caso, siempre se puede disponer de la ayuda on-line para obtener
más información.

Apertura de imágenes para su uso posterior

 Ejercicio 22: Lectura y visualización de una imagen satelital ASTER-


L1A.

Escribir el siguiente código en el editor de código de IDL. Guardar el


archivo IDL como “lectura_ASTER.pro”. Compilar y ejecutar.

El código requerirá la siguiente función para su ejecución, agregar las


siguientes líneas de código al archivo fuente IDL.

31
PROGRAMACIÓN EN IDL – BÁSICO

Figura 16. Imagen original (banda 1 – VNIR) y su histograma.

Ecualización

 Ejercicio 23: Ecualización del histograma

TVscl,hist_equal(rB1)
ecualizada=hist_equal(rB1)
plot, histogram(ecualizada)

Figura 18. Imagen Ecualizada y su histograma.

32
PROGRAMACIÓN EN IDL – BÁSICO

Suavizado y bordes

 Ejercicio 24: Suavizado y bordes.

Filtros de imagen: Paso bajo, paso alto, Sobel y Robert.

Otras modificaciones

 Ejercicio 25: Otras modificaciones.

En la carpeta C:\Archivos de programa\Exelis\IDL82\examples\doc\image,


podrá encontrar una serie de programas IDL desarrollados para el procesamiento
de imágenes.

Explore los siguientes programas, prestado atención al código de cada


ejemplo. Luego compile y ejecute los ejemplos de esta carpeta.

33
PROGRAMACIÓN EN IDL – BÁSICO

Figura 19. Ejecución del programa IDL AdaptiveEqualizing.pro

34
PROGRAMACIÓN EN IDL – BÁSICO

11. SENTENCIAS DE CONTROL EN IDL


Hasta ahora se han estado utilizando las sentencias simples de IDL.
A partir de ahora, desarrollaremos pequeños algoritmos que nos permitan
conocer las sentencias condicionales y de bucle que dispone IDL para la
programación más avanzada.

Tabla 3. Comandos de condición, bucle y rotura dentro de IDL.

Ejecución de condición simple IF


La sintaxis de esta función es como sigue:

35
PROGRAMACIÓN EN IDL – BÁSICO

 Ejercicio 26: Sentencia de control IF.

Compilar y ejecutar el siguiente código usando las siguientes sentencias en


la línea de comandos:
.compile test_if
test_if,111,3

Ejecución de condición múltiple CASE


La sintaxis de esta función es como sigue:

 Ejercicio 27: Sentencia de control CASE.

Compilar y ejecutar el siguiente código usando las siguientes sentencias en


la línea de comandos:
.compile test_case
test_case

36
PROGRAMACIÓN EN IDL – BÁSICO

Ejecución de bucle FOR


La sintaxis de esta función es como sigue:

 Ejercicio 28: Sentencia de control FOR.

Compilar y ejecutar el siguiente código usando las siguientes sentencias en


la línea de comandos:
.compile test_for
test_for

37
PROGRAMACIÓN EN IDL – BÁSICO

Ejecución de bucle WHILE


La sintaxis de esta función es como sigue:

 Ejercicio 29: Sentencia de control WHILE.

Compilar y ejecutar el siguiente código usando las siguientes sentencias en


la línea de comandos:
.compile test_while
test_while

38
PROGRAMACIÓN EN IDL – BÁSICO

Ejecución del bucle REPEAT


La sintaxis de esta función es como sigue:

 Ejercicio 30: Sentencia de control REPEAT.

Compilar y ejecutar el siguiente código usando las siguientes sentencias en


la línea de comandos:
.compile test_repeat
test_repeat

Ejecución de conmutador SWITCH


La sintaxis de esta función es como sigue:

39
PROGRAMACIÓN EN IDL – BÁSICO

 Ejercicio 31: Sentencia de control SWITCH.

Compilar y ejecutar el siguiente código usando las siguientes sentencias en


la línea de comandos:
.compile test_switch
test_switch

40
PROGRAMACIÓN EN IDL – BÁSICO

12. LECTURA Y ESCRITURA DE DATOS


FORMATEADOS

 Ejercicio 32: Lectura y escritura de datos formateados.

Se creará una matriz llamada data de 12 elementos que se


guardarán en un fichero ASCII denominado “mis_datos.dat”. Este
archivo podrá editarse con cualquier procesador de textos. Finalmente,
se abrirá el archivo “mis_datos.dat” para poder ser utilizado de nuevo
por IDL.

Creando funciones avanzadas de lectura/escritura

 Ejercicio 33: Funciones avanzadas de lectura/escritura.

Compilar y ejecutar el siguiente código usando las siguientes sentencias en


la línea de comandos:
.compile estadistica.pro
estadistica,[1,2,3,4,5]

41
PROGRAMACIÓN EN IDL – BÁSICO

42
PROGRAMACIÓN EN IDL – BÁSICO

13. INTRODUCCIÓN A WIDGETS


Los widgets son los componentes básicos sobre los que se soporta
la elaboración de interfaces gráficos de usuario (GUIs).

En todos los casos, los pasos a seguir para la construcción de GUIs usando
widgets son:

1. Elaboración del formulario base.


2. Asignación de eventos
5. Compilación y ejecución

La Ayuda On-Line incluye un tutorial para dar los primeros pasos en el


mundo de los widgets: Programming in IDL->CreatingGraphicalUser
Interfaces in IDL.

Tabla 4. Listado de los widgets más comunes.

 Ejercicio 34: Un ejemplo más sencillo de un widgets.

El siguiente código ejecuta el más sencillo de los códigos que se puede


elaborar haciendo uso de widgets.

43
PROGRAMACIÓN EN IDL – BÁSICO

Figura 20. Ejemplo más sencillo de un widgets.

 Ejercicio 35: Un ejemplo de un widgets con funcionalidad simple.

El siguiente código muestra una GUI de sencilla ejecución, a modo de


ejemplo.

44
PROGRAMACIÓN EN IDL – BÁSICO

Figura 21. Ejemplo de un widgets

Ejemplos de programa conteniendo diferentes widget


(sin funcionalidad)

 Ejercicio 36: Un ejemplo de un widgets sin funcionalidad.

Compila y ejecuta el siguiente código “xnothing.pro”, ubicado en


C:\Archivos de programa\ITT\IDL71\examples\widgets. Presta atención al
código fuente de cada widget

45
PROGRAMACIÓN EN IDL – BÁSICO

Figura 22. Ejemplo de un widgetsmas completo (sin funcionalidad)

Creación de una interface gráfica de usuario

 Ejercicio 37: Un ejemplo de GUI.

El siguiente ejercicio crea una interface grafica de usuario simple con un


botón etiquetado como “DisplayImage” que puede ser presionado por el
usuario a fin de generar el evento que visualiza una imagen.

46
PROGRAMACIÓN EN IDL – BÁSICO

Figura 23. Ejemplo de una GUI.

47
PROGRAMACIÓN EN IDL – BÁSICO

Otros widgets con código fuente


En la carpeta \examples\doc\objects, se encuentra un conjunto de
programas con código fuente cuya finalidad es la de aprender el
manejo de entornos visuales utilizando widgets. Para utilizarlos,
únicamente hay que abrirlos, cómpilarlos y ejecutarlos.

tornado.pro

spiro.pro

Figura 25. Ejemplo de un widgetsmás completo (spiro.pro)

Adicionalmente, podrá encontrar una serie de programas con código fuente


en la siguiente dirección:

C:\Archivos de programa\Exelis\IDL82\examples\doc\widgets.

48
PROGRAMACIÓN EN IDL – BÁSICO

14. Distribución de programas IDL


Una vez que la aplicación ha sido escrita en IDL, el usuario puede
distribuir su programa a amigos, colegas o sus clientes. Los programas
IDL pueden ser almacenados y distribuidos como:

 Archives de texto IDL (*.pro)

 Archivos binarios compilados (*.sav)

 Ejercicio 38: Distribución de archivos binarios.

En este ejercicio guardaremos y distribuiremos en archivo binario el


programa desarrollado en el ejercicio 32, “simple_gui.pro”.

Ejecutar los siguientes comandos para este ejercicio.

IDL>.reset_session
IDL> .COMPILEsimple_gui
IDL>resolve_all
IDL>SAVE, /ROUTINES, FILE='simple_gui.sav'

49

También podría gustarte