Actualizado el 24 de Octubre del 2020 (Publicado el 6 de Julio del 2017)
2.242 visualizaciones desde el 6 de Julio del 2017
100,3 KB
6 paginas
Creado hace 17a (04/03/2008)
Im´agenes y gr´aficas en MATLAB
Sistemas Conexionistas - Curso 07/08
1.
Im´agenes
Matlab dispone de comandos especiales para trabajar con im´agenes de diversos formatos
(pgm, ppm, gif, png, . . . ).
imread Lee una imagen en color o escala de grises.
IM = imread(filename)
La imagen es almacenada en la matriz IM. Las im´agenes en escala de grises se alma-
cenan en matrices bidimensionales del mismo tama˜no que la imagen, mientras que en
las im´agenes en color, la matriz es tridimensional ya que cuenta con una submatriz
del mismo tama˜no que la imagen en cada canal RGB.
Si los colores de la imagen est´an indexados (por ejemplo las im´agenes con formato
gif), la lectura de la imagen se realiza de la siguiente forma:
[IM map] = imread(filename)
donde map es una matriz que almacena el mapa de colores de la imagen le´ıda.
imwrite Escribe una imagen a fichero.
imwrite(IM, filename)
Si el fichero incluye la extensi´on no es necesario indicar el formato de la imagen.
Para mostrar una imagen por pantalla, Matlab dispone de las funciones image e imagesc.
Su sintaxis es:
image(IM)
imagesc(IM)
donde IM se corresponde con una matriz que representa una imagen. Si no se especifica
ning´un mapa de colores, Matlab utilizar´a el mapa por defecto. Matlab dispone de varios
mapas de colores aunque tambi´en es posible utilizar un mapa de colores le´ıdo en una
imagen o definido por el usuario. Para especificar el mapa de colores se utiliza el comando
colormap:
colormap(map)
2. Gr´aficas
2.1. Funciones en dos dimensiones
Para dibujar funciones de una variable, Matlab dispone de la funci´on plot, con la siguiente
sintaxis:
plot(Y) Dibuja la gr´afica que toma los ´ındices de Y como valores en el eje x y las
columnas de Y como valores en el eje y.
plot(x1,y1, ...) Une con una l´ınea todos los pares de la forma (xn,yn)
plot(X,Y) Si X e Y son vectores, dibuja las columnas/filas de X con respecto a las
columnas/filas de Y.
plot dispone de argumentos opcionales que permiten especificar el tipo de l´ınea que se
dibuja, as´ı como su color y el tipo de marcador para los puntos dibujados:
plot(X,Y, ’--r’) Dibuja una l´ınea discontinua en rojo
plot(X,Y, ’s’) Dibuja s´olo los puntos como cuadrados
plot(X,Y, ’+r’) Dibuja s´olo los puntos como cruces en rojo
plot(X,Y, ’g’) Dibuja una l´ınea continua en verde
2
Es posible configurar ciertos aspectos de las gr´aficas, entre otros:
title(string) Establece la cadena string como t´ıtulo de la gr´afica
xlabel(string) Establece la cadena string como etiqueta del eje x de la gr´afica
ylabel(string) Establece la cadena string como etiqueta del eje y de la gr´afica
axis Controla la apariencia y escala de los ejes. Presenta varias opciones
Manipulaci´on de ventanas de figura
Al utilizar la funci´on plot, Matlab abre autom´aticamente una ventana de figura que se
sobreescribe si se vuelve a llamar a otra funci´on de dibujo. El comando figure permite
abrir nuevas ventanas de figura. Su sintaxis es:
h = figure
figure devuelve un identificador que se utiliza para manipular la figura. As´ı, si tenemos
varias ventanas de figura abiertas, con figure(h2) seleccionamos la figura relativa al iden-
tificador h2 y con close(h3) cerramos la ventana h3. close all cierra todas las ventanas
de figura abiertas.
Subfiguras
El comando subplot permite dibujar varias gr´aficas en una misma ventana de figura. Su
sintaxis es la siguiente:
subplot(m,n,p)
Con este comando, la ventana de figura actual se descompone en una matriz de m x n
subfiguras y se selecciona la subfigura n´umero p para ser utilizada.
3
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
subplot(2,1,1)
plot(x,y1)
title(’y =
sin(x)’);
subplot(2,1,2)
plot(x,y2)
title(’y =
cos(x)’);
Superposici´on de gr´aficas
Para dibujar varias gr´aficas en una misma figura/subfigura, se utiliza la funci´on hold on.
Para dejar de dibujar en la misma figura/subfigura, se utiliza hold off.
x = 0:0.1:2*pi;
y1 = sin(x);
y2 = cos(x);
plot(x,y1)
hold on;
plot(x,y2, ’r’)
hold off;
2.2. Funciones en tres dimensiones
Gr´aficas de l´ıneas/puntos
La funci´on plot3 dibuja l´ıneas y puntos en 3D. Su sintaxis es similar a la funci´on plot:
plot3(x,y,z) Dibuja una l´ınea en el espacio 3D a trav´es de los puntos cuyas coor-
denadas son los elementos de los vectores x,y,z.
4
plot3(x,y,z,linedef) Dibuja una l´ınea en el espacio 3D a trav´es de los puntos
cuyas coordenadas son los elementos de x,y,z teniendo en cuenta las caracter´ısticas
definidas en linedef.
t = 0:pi/50:10*pi;
plot3(sin(t),cos(t),t, ’r’);
Gr´aficas de superficies
La funci´on mesh dibuja superficies 3D a partir de matrices. El comando mesh(Z) dibuja los
valores de la matriz Z sobre sus coordenadas. Los valores de Z se muestran como la altura
sobre la rejilla xy.
Z = [0 0.5 0; 0.5 1 0.5; 0 0.5 0];
mesh(Z)
Con mesh(X,Y,Z) se muestra la matriz Z sobre las coordenadas de la rejilla especificada
por las matrices X e Y. Para crear estas matrices se utiliza el comando meshgrid:
[X, Y] = meshgrid(x,y)
donde x e y son los vectores base a partir de los cuales se construye la rejilla. Las filas de
la matriz de salida X son copias del vector x y las columnas de la matriz de salida Y son
copias del vector y.
La funci´on contour dibuja las curvas de nivel de la superficie pasada como par´ametro. Se
usa de forma similar a mesh.
5
x = -2:0.1:2;
y = -2:0.1:2;
[X,Y] = meshgrid(x,y);
Z = X.*exp(-X.^2 - Y.^2);
subplot(1,2,1);
mesh(X,Y,Z);
subplot(1,2,2);
contour(X,Y,Z);
3. Ejercicios
1. Dibujar la funci´on y = x ∗ e−x2 con x variando entre -5 y 5 a intervalos de 0.05
2. Dibujar en una sola ventana con dos subventanas las funciones y = x2 − 3x − 2 y
z = x3 − 2x + 1 con x variando entre -5 y 5 a intervalos de 0.02. La primera en l´ıneas
verdes continuas, la segunda en lineas azules discontinuas. Marcar con un ’+’ rojo el
punto (2,1) en ambas gr´aficas.
3. Dibujar la superficie de la funci´on z = sin(x) + cos(y) donde x e y var´ıan entre -5 y
5 a intervalos de 0.1.
6
Comentarios de: Imágenes y gráficas en MATLAB (0)
No hay comentarios