· web viewmatlab es la abreviatura de "matrix laboratory" (laboratorio de matrices)....

23
MATERIA: Procesamiento digital de imágenes ÁREA: INGENIERÍA. CUATRIMESTRE: NOMBRE DEL ALUMNO: FECHA DE REALIZACIÓN: Página 1 de 23

Upload: others

Post on 15-Apr-2020

19 views

Category:

Documents


0 download

TRANSCRIPT

MATERIA: Procesamiento digital de imágenes

ÁREA: INGENIERÍA.

CUATRIMESTRE:

NOMBRE DEL ALUMNO:

FECHA DE REALIZACIÓN:

Página 1 de 20

PRÁCTICA No. 1 Introducción al entorno de trabajo del software MATLABOBJETIVO: identificar los elementos básicos que componen el software Matlab y algunos comandos que se utilizan en el procesamiento de imágenes

DESARROLLO DE LA PRÁCTICA.

1. Abre el software Matlab

2. Identifica los elementos básicos del escritorio de Matlab.

Cuando inicia MATLAB®, el escritorio aparece con el diseño predeterminado.

Página 2 de 20

El escritorio incluye los siguientes paneles:

Carpeta actual: para acceder a los archivos.

Ventana de comandos: para ingresar comandos en la línea de comandos, identificada por el indicador (>>).

Área de trabajo: para explorar datos que cree o importe de archivos.Al trabajar en MATLAB, usted emite comandos que crean variables y llaman funciones. Por ejemplo, para crear una variable denominada a, debe ingresar esta instrucción en la línea de comandos:

a = 1MATLAB agrega la variable a al área de trabajo y muestra el resultado en la ventana de comandos.

a =

1Cree algunas variables más.

b = 2b =

2c = a + bc =

3d = cos(a)d =

0.5403Cuando no se especifica una variable de salida, MATLAB utiliza la variable ans, abreviatura de answer (respuesta), para almacenar los resultados del cálculo.

sin(a)ans =

0.8415Si una instrucción finaliza con punto y coma, MATLAB realiza el cálculo, pero elimina la visualización de la salida en la ventana de comandos.

e = a*b;Para recuperar comandos anteriores, presione las teclas de flecha arriba y abajo: ↑ y ↓. Presione las teclas de flecha en la línea de comandos vacía o después de escribir los primeros caracteres de un comando. Por ejemplo, para recuperar el comando b = 2, escriba b y luego presione la tecla de flecha arriba.

Página 3 de 20

Matrices y arreglos

MATLAB es la abreviatura de "matrix laboratory" (laboratorio de matrices). Aunque otros lenguajes de programación mayormente procesan los números de uno en uno, MATLAB® está diseñado para funcionar principalmente con matrices y arreglos completos.

Todas las variables de MATLAB son arreglos multidimensionales, sin importar el tipo de datos. Una matriz en un arreglo bidimensional que a menudo se utiliza para el álgebra lineal.

Creación de arreglosPara crear un arreglo con cuatro elementos en una fila única, separe los elementos con una coma (,) o un espacio.

a = [1 2 3 4]a =

1 2 3 4

Este tipo de arreglo es un vector fila.

Para crear una matriz con varias filas, separe las filas con punto y coma.

a = [1 2 3; 4 5 6; 7 8 10]a =

1 2 3 4 5 6 7 8 10

Otra forma de crear una matriz es usando una función, como ones, zeros o rand. Por ejemplo, cree un vector columna de ceros de 5 por 1.

z = zeros(5,1)z =

0 0 0 0 0

Página 4 de 20

Operaciones con matrices y arreglosMATLAB le permite procesar todos los valores de una matriz mediante el uso de una sola función u operador aritmético.

a + 10ans =

11 12 13 14 15 16 17 18 20

sin(a)ans =

0.8415 0.9093 0.1411 -0.7568 -0.9589 -0.2794 0.6570 0.9894 -0.5440

Para trasponer una matriz, use una comilla simple ('):

a'ans =

1 4 7 2 5 8 3 6 10

Para realizar una multiplicación de matrices estándar, la cual calcula los productos internos entre filas y columnas, use el operador *. Por ejemplo, confirme que el producto de una matriz por su inversa es igual a la matriz identidad:

p = a*inv(a)p =

1.0000 0 -0.0000 0 1.0000 0 0 0 1.0000

Observe que p no es una matriz de valores enteros. MATLAB almacena los números como valores de punto flotante, y las operaciones aritméticas son sensibles a pequeñas diferencias entre el valor real y su representación en punto flotante. Para visualizar más dígitos decimales, use el comando format:

format longp = a*inv(a)p = 1.000000000000000 0 -0.000000000000000 0 1.000000000000000 0 0 0 0.999999999999998

Restablezca la visualización al formato más corto con

format shortformat influye solo en la visualización de números, no en la forma en que MATLAB los calcula o los guarda.

Página 5 de 20

Para realizar una multiplicación elemento por elemento en lugar de una multiplicación de matrices, utilice el operador .*:

p = a.*ap =

1 4 9 16 25 36 49 64 100

Cada uno de los operadores de matriz para la multiplicación, la división y la potencia tienen un operador de arreglo correspondiente que opera elemento por elemento. Por ejemplo, eleve cada elemento de a a la tercera potencia:

a.^3ans =

1 8 27 64 125 216 343 512 1000

ConcatenaciónLa concatenación es el proceso que consiste en unir arreglos para crear otros más grandes. De hecho, el primer arreglo de este capítulo resultó de la concatenación de sus elementos individuales. El operador de concatenación es el par de corchetes: [].

A = [a,a]A =

1 2 3 1 2 3 4 5 6 4 5 6 7 8 10 7 8 10

La concatenación de arreglos uno junto a otro mediante el uso de comas se conoce como concatenación horizontal. Cada arreglo debe tener la misma cantidad de filas. De forma similar, cuando los arreglos tienen la misma cantidad de columnas, es posible concatenarlos verticalmente mediante el uso de punto y coma.

A = [a; a]A =

1 2 3 4 5 6 7 8 10 1 2 3 4 5 6 7 8 10

Página 6 de 20

Números complejosLos números complejos tienen partes reales e imaginarias, donde la unidad imaginaria es la raíz cuadrada de -1.

sqrt(-1)ans = 0.0000 + 1.0000i

Para representar la parte imaginaria de números complejos, use i o j.

c = [3+4i, 4+3j; -i, 10j]c = 3.0000 + 4.0000i 4.0000 + 3.0000i 0.0000 - 1.0000i 0.0000 +10.0000i

Llamando Funciones

MATLAB® ofrece una amplia gama de funciones que realizan tareas computacionales. Las funciones son equivalentes a las subrutinas o métodos de otros lenguajes de programación.

Para llamar a una función, como por ejemplo, max, encierre entre paréntesis sus argumentos de entrada:

A = [1 3 5];max(A)ans = 5Si hay varios argumentos de entrada, sepárelos con comas:

B = [10 6 4];max(A,B)ans =

10 6 5

Para devolver el resultado de una función, asígnelo a una variable:

maxA = max(A)maxA = 5Si hay varios argumentos de salida, enciérrelos en corchetes:

[maxA,location] = max(A)maxA = 5location = 3Si el argumento de entrada es un vector de caracteres, enciérrelo en comillas simples:

disp('hello world')hello worldPara llamar a una función que no requiere ninguna entrada ni devuelve ningún resultado, escriba solo el nombre de la función:

clcLa función clc despeja la ventana de comandos.

Página 7 de 20

Gráficas en dos y tres dimensiones

Gráficas de líneasPara crear gráficas de líneas bidimensionales, use la función plot. Por ejemplo, grafique el valor de la función seno de 0 a

2π  :

x = 0:pi/100:2*pi;y = sin(x);plot(x,y)

Página 8 de 20

El programa le permite etiquetar los ejes y agregar un título.

xlabel('x')ylabel('sin(x)')title('Plot of the Sine Function')

Página 9 de 20

Si agrega un tercer argumento de entrada a la función plot, puede representar gráficamente las mismas variables mediante el uso de una línea discontinua roja.

plot(x,y,'r--')

Página 10 de 20

La cadena 'r--' es una especificación de línea. Cada especificación puede incluir caracteres para el marcador, el estilo y el color de la línea. Un marcador es un símbolo como +, o o * que aparece en cada punto dibujado en la gráfica. Por ejemplo, 'g:*' especifica una línea verde punteada con marcadores *.

Advierta que los títulos y las etiquetas que definió para el primer diagrama ya no están en la ventana de la figura actual. Por defecto, MATLAB® borra la figura cada vez que se llama una función de representación gráfica, y restablece los ejes y otros elementos para preparar el nuevo diagrama.

Para agregar gráficas a una figura existente, use hold.

x = 0:pi/100:2*pi;y = sin(x);plot(x,y)

hold on

y2 = cos(x);plot(x,y2,':')legend('sin','cos')

Página 11 de 20

Todas las gráficas aparecerán en la ventana de la figura actual hasta que use hold off o cierre la ventana.

Página 12 de 20

Gráficas tridimensionalesComúnmente, las gráficas tridimensionales muestran una superficie definida por una función de dos variables, z = f(x,y).

Para evaluar z, primero cree un conjunto de puntos (x,y) en el dominio de la función usando meshgrid.

[X,Y] = meshgrid(-2:.2:2); Z = X .* exp(-X.^2 - Y.^2);Luego, cree una gráfica de superficie.

surf(X,Y,Z)

Las funciones surf y mesh muestran superficies en tres dimensiones. surf muestra las líneas de conexión y las caras de la superficie en color. mesh produce superficies de malla que colorean solo las líneas que conectan los puntos de definición.

SubdiagramasLa función subplot permite visualizar varias gráficas en distintas subregiones de la misma ventana.

Las primeras dos entradas de subplot indican la cantidad de diagramas en cada fila y columna. La tercera entrada especifica qué diagrama está activo. Por ejemplo, cree cuatro diagramas en una cuadrícula de 2 por 2 dentro de una ventana de una figura.

Página 13 de 20

t = 0:pi/10:2*pi;[X,Y,Z] = cylinder(4*cos(t));subplot(2,2,1); mesh(X); title('X');subplot(2,2,2); mesh(Y); title('Y');subplot(2,2,3); mesh(Z); title('Z');subplot(2,2,4); mesh(X,Y,Z); title('X,Y,Z');

Página 14 de 20

3. Funciones para trabajar con imágenes en Matlab

imread

Leer imagen del archivo de gráficos

SintaxisA = imread(filename)A = imread(filename,fmt)A = imread(___,idx)A = imread(___,Name,Value)[A,map] = imread(___)[A,map,transparency] = imread(___)Descripción

A = imread(filename) lee la imagen del archivo especificado por filename, infiriendo el formato del archivo a partir de su contenido. Si filename es un archivo de varias imágenes, imread lee la primera imagen del archivo.A = imread(filename,fmt) especifica además el formato del archivo con la extensión de archivo estándar indicada por fmt. Si imread no puede encontrar un archivo con el nombre especificado por filename, busca un archivo denominado filename.fmt.A = imread(___,idx) lee la imagen o imágenes especificadas de un archivo de varias imágenes. Esta sintaxis sólo se aplica a los archivos GIF, CUR, ICO, TIF y HDF4. Debe especificar una entrada filenamey, opcionalmente, puede especificar fmt.

A = imread(___,Name,Value) especifica opciones específicas del formato mediante uno o varios argumentos de pares de nombre y valor, además de cualquiera de los argumentos de entrada de las sintaxis anteriores.

[A,map] = imread(___) lee la imagen indexada en filename en A y lee su colores asociada en map. Los valores de colores en el archivo de imagen se reescalan automáticamente en el intervalo [0,1].

[A,map,transparency] = imread(___) devuelve además la transparencia de la imagen. Esta sintaxis sólo se aplica a los archivos PNG, CUR e ICO. Para los archivos PNG, transparency es el canal alfa, si uno está presente. Para los archivos CUR e ICO, es la máscara y (opacidad).

4. Utilizando un navegador de internet (ejemplo: Google Chrome), descarga una imagen jpg y guárdala en la carpeta de trabajo de MATLAB.

5. En el software MATLAB carga la imagen en un arreglo llamado a utilizando el comando

a=imread(‘imagen.jpg’);

Página 15 de 20

6. Visualiza la imagen cargada con el comando imshow

imshow(a);

7. Disminuye el contraste de la imagen creando un nuevo arreglo donde se guarde el resultado de la imagen original multiplicado por 0.5

a1=a*0.5;

8. Visualiza ambas imágenes por medio del siguiente comando

subplot(1,2,1); imshow(a); subplot(1,2,2); imshow(a1);

9. Toma una captura de pantalla donde se muestre el comparativo de la imagen original y la imagen con los cambios. Agrégala al siguiente espacio

10. Incrementa el contraste de la imagen creando un nuevo arreglo llamado “a2” donde se guarde el resultado de la imagen original multiplicado por 1.5, visualiza ambas imágenes, toma una captura de pantalla donde se muestre el comparativo de la imagen original y la imagen con los cambios. Agrégala al siguiente espacio

11. Disminuye el brillo de la imagen creando un nuevo arreglo donde se guarde el resultado de la imagen original menos 30.

b1=a-30;

12. Visualiza ambas imágenes por medio del siguiente comando

subplot(1,2,1); imshow(a); subplot(1,2,2); imshow(b1);

13. Toma una captura de pantalla donde se muestre el comparativo de la imagen original y la imagen con los cambios. Agrégala al siguiente espacio

14. Incrementa el brillo de la imagen creando un nuevo arreglo llamado “b2” donde se guarde el resultado de la imagen original más 45, visualiza ambas

Página 16 de 20

imágenes, toma una captura de pantalla donde se muestre el comparativo de la imagen original y la imagen con los cambios. Agrégala al siguiente espacio

15. Obtén el negativo de la imagen creando un nuevo arreglo donde se guarde el resultado de 255 menos la imagen original.

c1=255-a;

16. Visualiza ambas imágenes por medio del siguiente comando

subplot(1,2,1); imshow(a); subplot(1,2,2); imshow(c1);

17. Toma una captura de pantalla donde se muestre el comparativo de la imagen original y la imagen con los cambios. Agrégala al siguiente espacio

18. Convierte la imagen a escala de grises y guárdala en un arreglo llamado “d1”.

d1=rgb2gray(a);

19. Visualiza ambas imágenes por medio del siguiente comando

subplot(1,2,1); imshow(a); subplot(1,2,2); imshow(d1);

20. Toma una captura de pantalla donde se muestre el comparativo de la imagen original y la imagen con los cambios. Agrégala al siguiente espacio

21. Ahora vas a obtener el umbral de la imagen a escala de grises mediante el siguiente comando:

f1=d1>128;

con este comando se crea un arreglo llamado “f1” y cada pixel vale 1 si el pixel en d1 es mayor a 128, o vale 0 si el pixel en d1 es menor o igual a 128

Página 17 de 20

22. Visualiza ambas imágenes por medio del siguiente comando

subplot(1,2,1); imshow(a); subplot(1,2,2); imshow(f1);

23. Toma una captura de pantalla donde se muestre el comparativo de la imagen en escala de grises y la imagen umbral. Agrégala al siguiente espacio

24. En un nuevo arreglo llamado “f2” guarda la imagen umbral con un valor de 70, visualiza ambas imágenes, toma una captura de pantalla donde se muestre el comparativo de la imagen original y la imagen con los cambios. Agrégala al siguiente espacio

25. En un nuevo arreglo llamado “f3” guarda la imagen umbral con un valor de 180, visualiza ambas imágenes, toma una captura de pantalla donde se muestre el comparativo de la imagen original y la imagen con los cambios. Agrégala al siguiente espacio

26. Utilizando un navegador de internet (ejemplo: Google Chrome), descarga una imagen jpg y guárdala en la carpeta de trabajo de MATLAB.

27. En el software MATLAB carga la imagen en un arreglo llamado a utilizando el comando

a=imread(‘imagen.jpg’);

28. Separa los canales RGB mediante los siguientes comandos

a_r=a(:,:,1);

a_g=a(:,:,2);

a_b=a(:,:,3);

29. Visualiza ambas imágenes por medio del siguiente comando

Página 18 de 20

subplot(1,2,1); imshow(a); subplot(1,2,2); imshow(a_r);

30. Toma una captura de pantalla donde se muestre el comparativo de la imagen original y la imagen con los cambios. Agrégala al siguiente espacio

31. Muestra en una ventana la imagen original y las imágenes de los tres canales RGB, toma captura de pantalla y agrégala al siguiente espacio

32. Muestra el histograma de la imagen original con el siguiente comando

histogram(a_r)

33. Visualiza ambas imágenes por medio del siguiente comando

subplot(1,2,1); imshow(a); subplot(1,2,2);histogram(a_r)

34. Muestra el histograma de la imagen original y el de cada canal de color en la misma ventana. Toma una captura de pantalla y agrégala al siguiente espacio

35. Repite los pasos del 26 al 34 con una imagen que tenga tonos verdes principalmente, como un campo o un jardín.

36. Repite los pasos del 26 al 34 con una imagen que tenga tonos azules principalmente, por ejemplo, una imagen donde se vea el cielo de día.

37. Repite los pasos del 26 al 34 con una imagen que tenga tonos rojos principalmente, puede ser un atardecer o un ramo de rosas rojas.

Página 19 de 20

38. Carga una imagen en una matriz y realiza un reflejo mediante el siguiente comando

d=fliplr(a);

Toma una captura de pantalla del comparativo y agrégala al siguiente espacio

39. Carga una imagen en una matriz y realiza un escalado mediante el siguiente comando

e=imresize(a,0.3);

Toma una captura de pantalla del comparativo y agrégala al siguiente espacio

Página 20 de 20