Sie sind auf Seite 1von 49

PROGRAMACIN EN IDL

BSICO

Edicin bajo peticin.


Tiraje limitado a 25 ejemplares.
Si necesita una copia en formato digital,
badaracco_meza@hotmail.com.

PROGRAMACIN EN IDL BSICO

CURSO
PROGRAMACIN EN IDL
BSICO

2014
2

PROGRAMACIN EN IDL BSICO

INTRODUCCION
IDL (Interactive Data Language) es el lenguaje de programacin cientfico,
utilizado en todas las disciplinas para crear visualizaciones significativas de datos
numricos complejos. Desde pequeos programas de anlisis hasta el desarrollo
de una gran variedad de aplicaciones, IDL proporciona el entorno informtico
integral que necesita para obtener eficazmente informacin a partir de sus datos.
IDL es pues una herramienta para que cientficos, investigadores,
ingenieros y dems interesados puedan procesar, analizar, tratar datos y crear
aplicaciones de forma rpida y eficaz. Se trata de un lenguaje de programacin
aplicado al procesamiento y anlisis de matrices con independencia de sus
dimensiones. Esta caracterstica hace de IDL un lenguaje de programacin ideal
para el tratamiento de imgenes, en tanto que una imagen es en esencia una
matriz.
Los temas seleccionados en las prximas pginas son un compendio de
ejemplos extrados de diferentes fuentes y se utilizan aqu simplemente para
cuestiones didcticas y pedaggicas.
No pretenden ser una coleccin 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 ms adelante se resean.

PROGRAMACIN EN IDL BSICO

CONTENIDO
1.

Introduccin a IDL

2.

Recursos sobre IDL

3.

Aplicaciones programadas con IDL

4.

Ejemplos de demostracin

5.

Interprete de comandos

6.

Programacin Compilada

7.

Apertura y edicin de funciones prediseadas

8.

Operaciones elementales y tipo de datos

o Arrays
o Creando Arrays
o Operaciones Bouleanas
o Obtencin de estadsticas de los datos de los arrays
o Localizando informacin en un array
o Reordenacin de los datos de las matrices
o Cambio del tamao de las matrices
9.

Visualizacin de datos
o Visualizacin de trazados (plot)
o Visualizacin de superficies

10. Procesamiento bsico de imgenes


o Apertura de imgenes para su uso posterior
o Visualizacin
o Umbralizacin
o Ecualizacin
o Suavizado y bordes
o Otras modificaciones
11. Sentencias de control en IDL
o Ejecucin de condicin simple IF
4

PROGRAMACIN EN IDL BSICO

o Ejecucin de condicin mltiple CASE


o Ejecucin de bucle FOR
o Ejecucin de bucle WHILE
o Ejecucin del bucle REPEAT
o Ejecucin de conmutador SWITCH
12. Lectura y escritura de datos formateados
o Creando funciones avanzadas de lectura/escritura
13. Introduccin a widgets
o Ejemplos de programa conteniendo diferentes widget (sin funcionalidad)
o Creacin de una interface grafica de usuario
o Interface con eventos de ratn
o Otros widgets con cdigo fuente

PROGRAMACIN EN IDL BSICO

1. INTRODUCCIN A IDL
Como ya se ha comentado anteriormente, IDL es un lenguaje de
programacin orientado al anlisis y visualizacin de datos contenidos en matrices.
Es un lenguaje desarrollado por la compaa Research Systems, Inc. (RSI) ubicada
en Boulder Colorado y actualmente comercializado por EXELIS Visual
Information Solutions.
La primera versin de IDL fue lanzada en 1981 por David Stern, a la razn
fundador de RSI. Desde entonces, IDL se ha desarrollado enormemente,
aplicndose con xito en las ciencias del espacio y astronoma, pero usndose
asimismo, como herramienta en institutos de investigacin, educacin, medicina,
fsica, ingeniera, 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:

anlisis y visualizacin de datos de forma rpida e interactiva,

un poderoso entorno de programacin,

una adaptacin a diferentes plataformas (Windows, MacOS, UNIX,


Linux, entre otros), de forma que lo programado en un sistema
operativo es vlido en cualquier otro, aunque cambie el hardware.

desarrollo de comandos para la entrada y salida de datos procedentes


de muy diferentes disciplinas (teledeteccin, hidrologa, modelado
tridimensional, tratamiento de imgenes)

libre disposicin de libreras y rutinas creadas por otros usuarios y


facilitados a la comunidad.

Para los usuarios de Matlab, IDL resultar fcil de utilizar pues ambos
guardan muchas caractersticas en comn. No se puede decir que uno sea
superior al otro, y la decisin de utilizar uno y otro no se basa en sus
funcionalidades, sino ms bien, en cuestiones econmicas o de portabilidad con
otros colaboradores.

PROGRAMACIN EN IDL BSICO

Tanto uno como otro, permiten incluir dentro de sus desarrollos, el cdigo
procedente de otros lenguajes de programacin. Es comn, que determinadas
operaciones donde se requiere velocidad de proceso, o que estaban previamente
compiladas en otro lenguaje, se incorporen sin ninguna complicacin dentro de los
programas desarrollados en IDL.
Aparte de lo anterior, Virtual Machine es una nueva funcionalidad de IDL
lanzada a partir de la versin 6.0. Se trata de una utilidad de libre difusin 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 requera la instalacin del propio entorno de desarrollo de IDL, o bien una
versin reducida runtime que nos permitiera ejecutar el fichero. Esto traa
bastantes problemas y limitaba la expansin del algoritmo hacia otros usuarios o
entornos.

Virtual Machine permite la liberacin de trabas a la hora de facilitar nuestro


cdigo fuente o ejecutable, a cualquier persona, con independencia de su
hardware y su software.

PROGRAMACIN EN IDL BSICO

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.

PROGRAMACIN EN IDL BSICO

3. APLICACIONES PROGRAMADAS CON


IDL
IDL es una herramienta para que cientficos, investigadores, ingenieros y
dems interesados puedan procesar, analizar, tratar datos y crear aplicaciones de
forma rpida y eficaz.
Se trata de un lenguaje de programacin de cuarta generacin aplicado al
procesamiento y anlisis de matrices con independencia de sus dimensiones (uni,
bi, tri,, n-dimensional).
Esta caracterstica configura a IDL como un lenguaje de programacin ideal
para el tratamiento de imgenes, en tanto que una imagen es en esencia una
matriz. La cantidad de aplicaciones en esta lnea, y el elevado nmero de
institutos de investigacin que hacen uso de IDL, dan cuenta de la versatilidad y
potencia del mismo.
La manera ms sencilla de entender lo anterior es recurrir a los ejemplos de
demostracin que acompaan 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

PROGRAMACIN EN IDL BSICO

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 botn Examinar. En las recientes


versiones de IDL, esto es necesario, porque IDL trabaja con el concepto de

Proyectos, para una mejor organizacin de su trabajo. Para continuar,


hacer click en el botn Aceptar.

Figura 2. Espacio de trabajo de IDL.

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

10

PROGRAMACIN EN IDL BSICO

Figura 3. Entorno de desarrollo de IDL.

Ejercicio 02: Lnea de comandos de IDL


Por ahora, fjate en la parte inferior de ese entorno de desarrollo, donde
figura el prompt IDL>. Esa es la lnea de comandos y desde ah se
ejecutarn muchos comandos a lo largo de este curso introductorio.
Escribe demo para cargar las demostraciones y selecciona la pestaa
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

PROGRAMACIN EN IDL BSICO

Figura 4. Librera de demostraciones de IDL.

Aplicaciones ms representativas
Las anteriores demostraciones enumeran algunas de las funcionalidades
que se pueden esperar de IDL en cuanto a tratamiento y visualizacin de datos.
Adems de lo anterior, existen multitud de aplicaciones desarrolladas bien
por EXELIS VIS, o por terceras compaas, que amplan el campo de actuacin
tanto con fines acadmicos como comerciales.
Entre los desarrollos ms conocidos destacan
ENVI: sin duda alguna la aplicacin desarrollada en IDL por excelencia.
RiverTools: Aplicacin dedicada al clculo hidrulico con el uso de
modelos digitales de elevacin.
ION (IDL On Net) y VIP (Visual IDL Programming): Entornos para
facilitar la programacin de IDL en la Red, y de forma visual.
FLAASH: Mdulo para la correccin atmosfrica de imgenes de satlite.
NOESYS: Visualizador y organizador de datos tcnicos.
SARscape: Procesamiento de imgenes SAR
Puede obtenerse informacin de todos ellos tanto en la pgina web de
EXELIS Visual Information Solutions.
12

PROGRAMACIN EN IDL BSICO

4. EJEMPLOS DE DEMOSTRACIN
A modo de ejemplos significativos, pueden ejecutarse los programas de
demostracin que acompaan al propio software. Ello permite obtener una ligera
idea de las aplicaciones y utilidades que podemos demandar de IDL.
Ejercicio 03: Ejemplos de demostracin en IDL
IDL demo
FeaturesData VisualizationContours->Contouring Demo
FeaturesSurface& 3D GraphicsPanorama Demo
FeaturesImagesImagesProcessing Demo
FeaturesData VisualizationVolumen RenderingSlicer Demo
FeaturesData VisualizationMappingGlobal Mapping Demo
Data AnalysisMath & Statistics
Data AnalysisMinimization
Data AnalysisImage Processing->Wavelet Demo

Figura 5. Ejemplo de Demostracin CountorPlot.

13

PROGRAMACIN EN IDL BSICO

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 atencin a la coma (,) situada entre el comando inicial y los
argumentos siguientes. Lo escrito despus 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 tpico de concatenacin de comandos. Y donde se
aprecia la sintaxis ms sencilla de IDL.

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


momento de la ejecucin de cada lnea de comentos y un historial de los
mismos.

14

PROGRAMACIN EN IDL BSICO

Figura 6. Se muestra la salida visualizada en el entorno de programacin de IDL. Atencin


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

15

PROGRAMACIN EN IDL BSICO

6. PROGRAMACIN 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 funcin
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 edicin de texto.

Una vez escrito guarda el fichero con el nombre hola.pro, complalo y


ejectalo segn la secuencia:
ArchivoGuardar Como hola.pro
EjecutarCompilar hola.pro [tambin usando Ctrl+F8 o el
icono

Ejecutar Ejecutar hola [tambin usando F8 o el icono

16

PROGRAMACIN EN IDL BSICO

Figura 7. Modo de compilacin de un programa IDL

17

PROGRAMACIN EN IDL BSICO

7. APERTURA Y EDICIN DE FUNCIONES


PREDISEADAS
Una de las versatilidades de IDL es que el usuario tiene acceso a las
funciones ya programadas dentro del programa. Por ejemplo, la funcin
correlate

nos permite calcular la correlacin entre dos variables. Si

quisiramos ver cmo est programada esa funcin, simplemente tendramos que
abrir el fichero correlate.pro situado dentro del subdirectorio donde se
instal IDL.
Ejercicio 06: Apertura y edicin de funciones IDL
Archivo Abrir archivo correlate.pro [se encuentra
directorio C:\Archivos de programa\exelis\IDL82\lib]

en el

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

Para probar esta funcin de IDL, calcularemos la correlacin de dos


vectores (x, y), ingresando en la lnea de comandos lo siguiente:

El valor de correlacin entre ambas variables es de 0.702, lo que indica que


ambas variables estn bastante correlacionadas. Si fueran iguales, ese valor
sera la unidad.

18

PROGRAMACIN EN IDL BSICO

8. VARIABLES,

TIPO

DE

DATOS

OPERACIONES ELEMENTALES
En una sesin de IDL, los datos (nmeros y cadenas) son almacenados en
lo que conocemos bien como variables. En IDL hay tres tipos bsicos de
variables:

Escalar (un solo valor)

Array (de 1 a 8 dimensiones un vector es un array con solamente 1


dimensin)

Estructura (un agregado de varios tipos de datos y variables)

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


tambin tiene un tipo de dato especfico. 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 multiplicacin de valores tipo entero (vase 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 raz cuadrada de un nmero
entero, nos devuelve un real.

19

PROGRAMACIN EN IDL BSICO

Tabla 1. Tipos de datos bsicos usados en IDL

Arrays
Ejercicio 08: trabajo con matrices.

IDL presenta su mxima 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: Creacin de matrices.

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

20

PROGRAMACIN EN IDL BSICO

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 especficos de una
matriz es otra de las potencialidades de IDL, llamado tambin subndices.
Los corchetes [ y ] se usan para indicar subndices en IDL. En el caso
de las matrices bi-dimensionales se usa la sintaxis:
Array[#columna, #fila]
Es importante indicar que los subndices 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 continuacin algunos comandos adicionales para creacin de matrices con
diferentes tipo de datos. Puede obtenerse ms informacin 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 cdigo sencillo para crear matrices con tipo de dato real:
a=fltarr(100)
help, a
print, a(0),a(99)
print, a(10:19)

21

PROGRAMACIN EN IDL BSICO

Operaciones Bouleanas
Ejercicio 11: Operaciones bouleanas

Las siguientes secuencias muestran operaciones de carcter bouleano que


ser de utilidad en diferentes procesos. Uno de ellos, la creacin 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

Obtencin de estadsticas de los datos de los arrays


Dado que IDL utiliza matrices de forma masiva, existen una serie de
comandos que nos permiten derivar datos estadsticos de las matrices.
Por ejemplo, muchas veces resulta interesante conocer el tamao de
las matrices, su valor mximo o mnimo, la desviacin estndar, el
sumatorio de sus valores, entre otros.
Ejercicio 12: Estadsticas de las matrices
La siguiente secuencia explica el funcionamiento bsico 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 dimensin
print,total(array,2) ;sumatorio de la segunda dimensin
print,total(array,/cumulative)

22

PROGRAMACIN EN IDL BSICO

A continuacin algunos comandos

para

la

obtencin

de

datos

estadsticos desde las matrices. Puede obtenerse ms informacin desde


la ayuda on-line.
N_elements() size() min() max() mean() variante()
stddev() moment() total()

Localizando informacin en un array


Junto a las funciones anteriores existen otras que permiten la localizacin
de determinados datos dentro de una matriz. Es til cuando queremos
conocer la localizacin de un determinado dato dentro de la matriz.
Ejercicio 13: Informacin de las matrices
El siguiente ejemplo crea una matriz de nueve trminos, y localiza y guarda
dentro de una nueva matriz la posicin 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 adems cumpla que son mltiplos de 4.
indice2=where((matrizgt35) and ((matrizmod4) eq 0))
print,array[indice2]

23

PROGRAMACIN EN IDL BSICO

Reordenacin de los datos de las matrices


Una serie de comandos permiten la transformacin y reordenacin de los
datos dentro de las matrices. Su fin

puede

ser mltiple: desplazar,

transponer, permutar, rotar, localizar ordenadamente nuestros datos.


Algunas de sus utilidades ms interesantes se valorarn en el apartado
dedicado al tratamiento de imgenes.
Algunos comandos para la ordenacin de los datos dentro de las matrices:
reform() reverse() rotate() transpose() shift() sort() uniq()

Cambio del tamao de las matrices


Existen tres funciones muy interesantes que partiendo de una matriz
permiten modificar su tamao, interpolando elementos en su interior. Su
aplicacin se ver en el tratamiento de imgenes. Son muy eficaces para
adaptar el tamao de una imagen a la ventana de visualizacin, y
para efectuar zoom sobre una zona de la misma.
Comandos para el cambio del tamao de las matrices
rebin() congrid() interpolate()

24

PROGRAMACIN EN IDL BSICO

9. VISUALIZACIN DE DATOS
En funcin del tipo de datos que dispongamos, existen multitud de mtodos
de visualizarlos. Ya se ha comentado que la efectividad de IDL est no slo en el
tratamiento que se efecta a los datos, sino en la facilidad que tiene para
representarlos de forma intuitiva para el observador.

Visualizacin de trazados (plot)


Ejercicio 14: Visualizacin 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. Representacin de diferentes funciones superpuestas entre s.

Ejercicio 15: Visualizacin de smbolos.

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

25

PROGRAMACIN EN IDL BSICO

Figura 9. Representacin de diferentes smbolos.

Ejercicio 16: Visualizacin en coordenadas polares.

Figura 10. Representacin en Coordenadas polares.

Ejercicio 17: Visualizacin de barras de error.

26

PROGRAMACIN EN IDL BSICO

Figura 11. Representacin en barras de error.

Ejercicio 18: Visualizacin de Isolneas.

Figura 12. Representacin de isolneas.

27

PROGRAMACIN EN IDL BSICO

Visualizacin de superficies
Ejercicio 19: Visualizacin de superficies.

Figura 13. Sucesin de representaciones obtenidas en la secuencia de superficies.

28

PROGRAMACIN EN IDL BSICO

Ejercicio 20: Visualizacin de superficies.

Figura 14. Sucesin de representaciones obtenidas en la secuencia de superficies.

Ejercicio 21: Visualizacin de superficies 3D.

Figura 15. Sucesin de representaciones obtenidas en la secuencia de volmenes.

29

PROGRAMACIN EN IDL BSICO

10. PROCESAMIENTO BSICO DE


IMGENES
El tratamiento de imgenes en IDL es relativamente sencillo, si tenemos
presente que los datos dentro de la misma estn ordenados de forma matricial, y
como tal, se comportarn como una variable n-dimensional ms aun dentro del
entorno de desarrollo.
Es interesante mencionar que IDL dispone de un amplio nmero de
comandos especficos que permiten la apertura y escritura de imgenes en los
formatos ms comunes. Todas ellas tienen una sintaxis muy parecida.

Tabla 2. Funciones IDL para lectura y escritura de imgenes.

La siguiente secuencia de comandos permitir conocer algunas de las


caractersticas ms utilizadas en el tratamiento de imgenes dentro de IDL. Se ha
realizado de una forma pretendidamente escueta, de cara a que se pueda
obtener una visin muy general del tratamiento de imgenes, sin entrar en
profundidad en ninguna aplicacin particular.
La secuencia se divide en diferentes fases, se inicia con la apertura
de

imgenes,

su

visualizacin, umbralizacin y ecualizacin, filtros de

convolucin y miscelnea.
Toda la secuencia es muy sencilla de comprender por lo que no
hace

falta

informacin complementaria.

Simplemente

ejecutando

los

30

PROGRAMACIN EN IDL BSICO

comandos y observando el resultado es factible entender el funcionamiento.


En todo caso, siempre se puede disponer de la ayuda on-line para obtener
ms informacin.

Apertura de imgenes para su uso posterior


Ejercicio 22: Lectura y visualizacin de una imagen satelital ASTERL1A.
Escribir el siguiente cdigo en el editor de cdigo de IDL. Guardar el
archivo IDL como lectura_ASTER.pro. Compilar y ejecutar.

El cdigo requerir la siguiente funcin para su ejecucin, agregar las


siguientes lneas de cdigo al archivo fuente IDL.

31

PROGRAMACIN EN IDL BSICO

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

Ecualizacin
Ejercicio 23: Ecualizacin del histograma
TVscl,hist_equal(rB1)
ecualizada=hist_equal(rB1)
plot, histogram(ecualizada)

Figura 18. Imagen Ecualizada y su histograma.

32

PROGRAMACIN EN IDL BSICO

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 imgenes.
Explore los siguientes programas, prestado atencin al cdigo de cada
ejemplo. Luego compile y ejecute los ejemplos de esta carpeta.

33

PROGRAMACIN EN IDL BSICO

Figura 19. Ejecucin del programa IDL AdaptiveEqualizing.pro

34

PROGRAMACIN EN IDL BSICO

11. SENTENCIAS DE CONTROL EN IDL


Hasta ahora se han estado utilizando las sentencias simples de IDL.
A

partir

de

ahora, desarrollaremos pequeos algoritmos que nos permitan

conocer las sentencias condicionales y de bucle que dispone IDL para la


programacin ms avanzada.

Tabla 3. Comandos de condicin, bucle y rotura dentro de IDL.

Ejecucin de condicin simple IF


La sintaxis de esta funcin es como sigue:

35

PROGRAMACIN EN IDL BSICO

Ejercicio 26: Sentencia de control IF.


Compilar y ejecutar el siguiente cdigo usando las siguientes sentencias en
la lnea de comandos:
.compile test_if
test_if,111,3

Ejecucin de condicin mltiple CASE


La sintaxis de esta funcin es como sigue:

Ejercicio 27: Sentencia de control CASE.


Compilar y ejecutar el siguiente cdigo usando las siguientes sentencias en
la lnea de comandos:
.compile test_case
test_case

36

PROGRAMACIN EN IDL BSICO

Ejecucin de bucle FOR


La sintaxis de esta funcin es como sigue:

Ejercicio 28: Sentencia de control FOR.


Compilar y ejecutar el siguiente cdigo usando las siguientes sentencias en
la lnea de comandos:
.compile test_for
test_for

37

PROGRAMACIN EN IDL BSICO

Ejecucin de bucle WHILE


La sintaxis de esta funcin es como sigue:

Ejercicio 29: Sentencia de control WHILE.


Compilar y ejecutar el siguiente cdigo usando las siguientes sentencias en
la lnea de comandos:
.compile test_while
test_while

38

PROGRAMACIN EN IDL BSICO

Ejecucin del bucle REPEAT


La sintaxis de esta funcin es como sigue:

Ejercicio 30: Sentencia de control REPEAT.


Compilar y ejecutar el siguiente cdigo usando las siguientes sentencias en
la lnea de comandos:
.compile test_repeat
test_repeat

Ejecucin de conmutador SWITCH


La sintaxis de esta funcin es como sigue:

39

PROGRAMACIN EN IDL BSICO

Ejercicio 31: Sentencia de control SWITCH.


Compilar y ejecutar el siguiente cdigo usando las siguientes sentencias en
la lnea de comandos:
.compile test_switch
test_switch

40

PROGRAMACIN EN IDL BSICO

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

guardarn 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 cdigo usando las siguientes sentencias en
la lnea de comandos:
.compile estadistica.pro
estadistica,[1,2,3,4,5]

41

PROGRAMACIN EN IDL BSICO

42

PROGRAMACIN EN IDL BSICO

13. INTRODUCCIN A WIDGETS


Los widgets son los componentes bsicos sobre los que se soporta
la elaboracin de interfaces grficos de usuario (GUIs).
En todos los casos, los pasos a seguir para la construccin de GUIs usando
widgets son:
1. Elaboracin del formulario base.
2. Asignacin de eventos
5. Compilacin y ejecucin
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 ms comunes.

Ejercicio 34: Un ejemplo ms sencillo de un widgets.


El siguiente cdigo ejecuta el ms sencillo de los cdigos que se puede
elaborar haciendo uso de widgets.
43

PROGRAMACIN EN IDL BSICO

Figura 20. Ejemplo ms sencillo de un widgets.

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


El siguiente cdigo muestra una GUI de sencilla ejecucin, a modo de
ejemplo.

44

PROGRAMACIN EN IDL BSICO

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 cdigo xnothing.pro, ubicado en
C:\Archivos de programa\ITT\IDL71\examples\widgets. Presta atencin al
cdigo fuente de cada widget

45

PROGRAMACIN EN IDL BSICO

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

Creacin de una interface grfica de usuario

Ejercicio 37: Un ejemplo de GUI.

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


botn etiquetado como DisplayImage que puede ser presionado por el
usuario a fin de generar el evento que visualiza una imagen.

46

PROGRAMACIN EN IDL BSICO

Figura 23. Ejemplo de una GUI.

47

PROGRAMACIN EN IDL BSICO

Otros widgets con cdigo fuente


En la carpeta \examples\doc\objects, se encuentra un conjunto de
programas con cdigo fuente cuya finalidad es la de aprender el
manejo

de

entornos

visuales

utilizando

widgets.

Para

utilizarlos,

nicamente hay que abrirlos, cmpilarlos y ejecutarlos.


tornado.pro
spiro.pro

Figura 25. Ejemplo de un widgetsms completo (spiro.pro)

Adicionalmente, podr encontrar una serie de programas con cdigo fuente


en la siguiente direccin:
C:\Archivos de programa\Exelis\IDL82\examples\doc\widgets.

48

PROGRAMACIN EN IDL BSICO

14. Distribucin de programas IDL


Una vez que la aplicacin 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: Distribucin 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

Das könnte Ihnen auch gefallen