Vous êtes sur la page 1sur 9

Gu Matlab a

2009

1.

Introduccin o

El objetivo de esta gu es familiarizarnos con operaciones bsicas del ena a torno de trabajo Matlab. Se aprendern a manejar vectores y matrices, escribir a programas .m y a realizar tareas bsicas de programacin como bucles. a o

2.

Entorno

Para el desarrollo de las prcticas de la asignatura de tratamiento computaa cional de imgenes vamos a usar el entorno de programacin Matlab. Matlab a o es una herramienta de procesado de matrices que esta especializada en realizar clculos matriciales de forma muy rpida, lo cual se muestra ideal a la hora de a a procesar imgenes. Al iniciar el entorno de programacin de Matlab se muestra a o una aplicacin con 3 reas de trabajo claramente diferenciadas (gura 1). o a La primera zona de la aplicacin se compone de los diversos mens y barras o u de botones. Despus se nos presenta una amplia zona denominada Command e Window donde podremos ejecutar los comandos de matlab que veremos en las secciones sucesivas. Por ultimo, tenemos una zona que se denomina Workspace donde se nos muestra diferente informacin: los ultimos comandos ejecutados, o

las variables que existen en memoria y un listado de los archivos del directorio donde nos encontremos en esos momentos.

3.

Comandos

Dentro del entorno de Matlab podemos cambiarnos de directorio, borrar archivos, crear archivos, crear y borrar directorios, ver contenidos de directorios. . . de una forma muy parecida a como se har en una consola de comandos a de un sistema operatipo tipo Unix. ls dir: para listar los contenidos del dio rectorio donde nos encontramos. Permite el uso de comodines (ej. ls *.m nos mostrar todos los archivos que tengan extensin .m, mientras que ls ???.m a o solamente nos mostrar los archivos con extensin .m y que su nombre este a o compuesto de tres carcteres. cd : Para cambiarnos de un directorio a otro (ej. a cd /home/imagenes/). pwd: Para mostrar el directorio actual en el que nos encontramos (esta informacin tambin se muestra en la barra). o e mkdir: Para crear un directorio (ej. mkdir directorio1 crear un directorio llaa mado directorio1 dentro del directorio actual donde nos encontramos).Figura 1: Este es el entorno bsico que nos ofrece matlab nada ms ejecutarlo. a a rmdir: Para borrar un directorio, el directorio debe estar vac (ej. rmdir dio. rectorio1 borrar el directorio de nombre directorio1). Si a rmdir se le aade el a n parmetro s, borrar el contenido del directorio y todo subdirectorio que exista a a dentro de ese directorio (ej. rmdir directorio1 s).. delete: Se usa para borrar un archivo concreto (ej. delete archivo1 borrar el a archivo1 del directorio actual). Otro detalle importante es conseguir ayuda en Matlab, para ello, tecleando help y despus el nombre del comando nos saldr la ayuda disponible sobre ese coe a mando.

4.
4.1.

Manejando Matrices
Vectores y matrices

El nombre de matlab viene de abreviatura de Matrix Laboratory y ese nombre bsicamente esta deniendo la potencia de Matlab a la hora de trabajar con a matrices. Veamos ahora unas pocas operaciones bsicas con matrices que nos a sern de ayuda a la hora de trabajar con imgenes. a a En Matlab todo son matrices, incluso los nmeros y los vectores, los primeros u son una matriz 1x1 y los segundos son una matriz 1xN en el caso de que sea un vector la Nx1 en el caso de que sea un vector columna. Por ejemplo: o >> v = [1 2 3 4] v= 1234 Se puede convertir dicho vector a columna usando el operador de traspuesta (.): >> w = v.

w= 1 2 3 4 Para acceder a un elemento concreto de un vector sencillamente usamos: >> v(2) ans = 2 donde ans es una variable temporal de Matlab que almacena el ultimo resultado si no lo asignamos a ninguna variable. Para asignar algo a una variable en Matlab sencillamente escribiramos a = v(2) la variable a se le asignar el resultado a de la operacin presente despus del =. Ahora, si lo que queremos recuperar es o e un rango de resultados, por ejemplo los que van del 2 al 4 elemento del vector v: >> v(2:4) ans = 234 esa ultima sentencia la podr amos haber sustituido por >> v(2:end) ans = 234 Por otro lado, tambin se pueden mostrar elementos en orden no continuo, por e ejemplo: v= 1 2 3 4 5 6 7 8 9 10 >> v(1:2:end) ans = 13579 esto har que se vaya recorriendo el vector v de dos en dos desde la posicin 1 a o hasta el nal del mismo. Tambin se puede usar otro vector como ndice de un vector, por ejemplo: e >> v([1 4 7]) ans = 147 Denir una matriz en Matlab es tan fcil como denir un vector, por ejemplo, a para denir una matriz 3x3: >> A = [1 2 3; 4 5 6; 7 8 9] A= 123 456 789 La seleccin de elementos de una matriz es tan sencilla como la seleccin de eleo o mentos de un vector, con la unica diferencia ese que ahora, tenemos que escribir dos ndices. por ejemplo: >> A(2, 3) ans =

6 Para seleccionar un vector columna: >> A(1:2,3) ans = 3 6 Para seleccionar un vector la: >> A(2,:) ans = 456 jarse que aqu el uso de : es igual a haber escrito 1:3 Obviamente, para seleccionar una submatriz: >> A(1:2,:) ans = 123 456 Para crear una matriz B igual a A, y hacer que todos los elementos de la columna 3 de B sean igual a cero podemos seguir el siguiente ejemplo: >> B=A; >> B(:,3)=0 B= 120 450 780 Por supuesto, podemos indexar elementos no continuos al igual que con los vectores, por ejemplo: >> A(1:end,1:2:end) ans = 13 46 79 Tambin podemos usar vectores y matrices lgicas (matrices verdadero o falso, e o donde el nmero 1 representa verdadero y el 0 representa falso) para indexar u matrices: >> E = A([1 3],[2 3]) E= 23 89 >> D = logical([1 0 0; 0 0 1; 0 0 0]) D= 100 001 000 >> A(D) ans = 1

6 solamente muestra como resultado en forma de vector los casos verdadero. El comando dos puntos tambin nos devuelve todos los elementos de una matriz e en un unico vector columna: >> A(:) ans = 1 4 7 2 5 8 3 6 9 Por ultimo, el comando size(A) devuelve las dimensiones de la matriz A: >> A = [1 1 1; 1 2 3] A= 111 123 >> [M, N] = size(A) M= 2 N= en el ejemplo anterior, almacenamos en una variable M el nmero de las de A u y en una variable N el nmero de columnas de A. u Figura 2: Editor de Matlab.

4.2.

Arrays estndar a

zeros(M,N) genera una matriz MxN toda de ceros de tipo doble. ones(M,N) genera una matriz MxN toda de unos tipo double. true(M,N) genera una matriz MxN lgica toda de unos. o false(M,N) genera una matriz MxN lgica toda de ceros. o magic(M) genera una matriz MxM que es un cuadrado mgico. Un cuadrado a mgico se caracteriza por que la suma de los componentes de cualquier la, a columna o diagonal principal es siempre la misma. rand(M,N) genera una matriz MxN con elementos aleatorios tipo doble que estn dentro del rango [0,1]. a randn(M,N) genera una matriz MxN cuyos nmeros aleatorios estn normalu a mente distribuidos (por ejemplo, una gausiana), estos nmeros se engloban denu tro del intervalo [0,1].

5.

Escribiendo archivos .m

Matlab permite escribir programas que ejecutan diversos comandos a travs e de lo que se denomina archivos .m, estos son archivos de texto normales con extensin .m. Para escribir dichos archivos usaremos el editor de Matlab. Para o llamar el editor usaremos el comando edit en la consola de comandos de Matlab. Despus de ello se nos mostrar una ventana como la que se muestra en la gura e a 2. Un ejemplo de cdigo de un programa de Matlab es el siguiente: o % Ejemplo de lectura de una imagen y variantes. % Primero se lee una imagen. f = imread(audi.jpg); % Almacenamos el tama no de la imagen f. % M contiene la informacin del nmero de las. o u % N contiene la informacin del nmero de columnas de la imagen. o u % c contiene la informacin del nmero de colores de la imagen. o u [M, N, c] = size(f); % Para mostrar informacin ms detallada de la imagen o a % Notar que no se pone ; por que sino no mostrar nada. a whos f Del listado anterior la primera cosa a destacar es que los comentarios empiezan con el s mbolo %. Toda l nea que comienza por % ser ignorada por Matlab a la hora de a ejecutar el programa. En el listado anterior existen 3 comandos diferentes, dos de ellos terminados con un ; y el ultimo no, todo comando que tenga un ; no mostrar ninguna a salida en la consola de comandos de Matlab, sencillamente ejecutar la tarea a (en el caso de que se le mande representar una gura, esta ser mostrada en una a pantalla a pesar de tener el ;), Sin embargo, el comando whos f si mostrar la a informacin en la consola, ese comando muestra datos sobre la imagen que o se ley de disco anteriormente, y nos interesa ver esa informacin a la hora de o o ejecutar ese programa de Matlab (sobre la funcin de cada comando se ver ms o a a en detalle en la siguiente prctica). a La ejecucin un programa .m es muy sencilla, simplemente nos debemos colocar o en el directorio donde se encuentra el programa y escribir el nombre del archivo .m en la consola de comandos de Matlab. Para mostrar f la sintaxis es: gure 1 imshow(f,[1 256])

5.1.

Control de ujo

Ahora que podemos escribir pequeos programas con Matlab, podemos aadir n n un mayor control de ujo a los programas a travs de condicionales (if, switch...) e y bucles (for, while...).

1. Bucle: for El bucle for permite que una tarea se ralice un nmero deteru minado de veces, su sintaxis: for ndice = comienzo : incremento: nal Lo que se quiere ejecutar n veces end Un ejemplo de programa usando este tipo de bucle ser el siguiente, donde a se multiplica 3 veces una matriz por s misma: %Ejemplo bucle for A = [1 1 1; 1 1 1; 1 1 1] for q = 0:1:3 A=A*A end Ejercicio: armar una matriz de 256x256 cuyas las vayan de 1 a 256. 2. Condicionales: if - elseif - else Los condicionales if - elseif - else nos permiten ejecutar o no diversas partes de cdigo segn se cumplan o no se cumplan diversas condiciones. Su sino u taxis es la siguiente: if expresin1 o sentencias1 ... elseif expresin2 o sentencias2 ... else sentencias3 .... end Su funcionamiento es el siguiente: si se cumple la primera expresin condio cional, se ejecuta solamente las sentencias 1 y se continua con el programa a partir de la lnea end. Si la condicin no se cumple, se chequea la exo presin del elseif, si este se cumple se ejecuta el cdigo sentencias 2 y se o o continua con el programa a partir de la lnea end. Si no se cumple ni la sentencia if ni elseif se ejecutar el cdigo sentencias 3. Se pueden tener a o varios elseif o ninguno, y se puede tener o no else. Un ejemplo sencillo como intil para ilustrar esto: u for q = 0:1:4 if q == 0 disp(q = 0) elseif q == 1 disp(q = 1) elseif q == 2 disp(q = 2) else

disp(q distinto de 0, 1 2) o end end Los operadores condicionales son menor que, = menor igual que, mayor que, = mayor igual que, == igual que, = distinto que. La funcin disp solamente nos esta imprimiendo un texto en pantalla. o 3. Bucle: while Es un bucle que ejecuta una serie de cosas mientras la condicin que cono trola el bucle se cumpla, su sintaxis es la siguiente: while expresin o sentencias ... end Un ejemplo del funcionamiento del bucle while se puede ver a continuacin o (para entender el funcionamiento de dicho ejemplo es necesario saber que matlab considera todo nmero, cuando lo evala lgicamente, como veru u o dadero, a no ser que sea 0). a = 10; b = 5; while a a = a - 1; disp(bucle a) while b b = b - 1; disp(bucle b) end end 4. Condicional: switch Se utiliza para controlar la ejecucin de un programa dependiendo de dio versos casos, su sintaxis es la siguiente: switch switch expresin o case case expresin o sentencias ... case case expresin o sentencias ... ... otherwise sentencias

... end Matlab ir evaluando si la swith expresin cumple los case expresin ema o o pezando por el primero, el primer case que se cumpla, se ejecutar sus a sentencias y se saldr del condicional switch. Si ningn case se cumple, se a u ejecutar las sentencias del otherwhise, en caso de que exista. Un ejemplo a para ilustrar esto: for q = 0:1:4 switch q case 0 disp(q = 0) case 1 disp(q = 1) case 2 disp(q = 2) case 3 disp(q = 3) otherwise disp(q distinto de 0, 1, 2 3) o end end

Vous aimerez peut-être aussi