2. Contenidos del curso
• Entorno Matlab.
• Tipos de datos básicos.
• Funciones y operaciones con arrays.
• Notación “:” y array slice.
• Operaciones lógicas.
• Operaciones matemáticas.
• Gráficos.
• Miscelánea.
• Ciclo de vida del software.
• Tipos de datos.
• Estructuras de control.
• Descomposición funcional y diseño descendente.
• Funciones.
• Recursividad.
• Debug.
• Proyecto Final.
Matlab CLI
Programación en Matlab
3. Imágenes(1)
• Una imagen es una función f en el que en cada
punto (x,y) se asocia un color o nivel de gris
f(x,y).
• f:[1..M]x[1..N] [1..L]
(x,y)f(x,y)
• En el caso anterior tenemos una imagen de
NxM píxels con L niveles de gris/color. A los N
niveles de gris los llamamos la profundidad de
color y a los MxN píxels la resolución espacial.
4. Imágenes(2)
• Tipos de imágenes:
– Imagen indexada: Tenemos la imagen y una paleta
o mapa para interpretar los valores de la imagen
en colores. (I,M)
– Imagen de niveles de gris: Tenemos una imagen
con un solo canal en cada posición (x,y)
– Imagen binaria: Imagen de nivel de gris con dos
niveles de gris.
– Imagen RGB: Imagen con 3 canales en cada
posición (x,y), también se puede ver como 3
imágenes: I(x,y) = (IR(x,y),IG(x,y),IB(x,y)).
5. Imágenes(3)
• Una paleta es un array en que en cada
posición del mismo indicamos un color.
Matlab tiene funciones que nos ayudan a
construirlas. También llamadas LUT’s.
• M:[1..L] [0..1] x [0..1] x [0..1]
i M(i)=(Mr(i),Mg(i),Mb(i))
• Asignamos una paleta a una imagen indexada
con el comando colormap. >> A=[0 128;192,255];
>> colormap(gray(256));
>> image(A);
6. Imágenes(4)
• Si el comando image no puede indexar el valor en la
paleta le asigna el valor máximo o mínimo. El color
que nos muestra matlab para una imagen I y una
paleta M dados es M(I(x,y)), es decir (MoI)(x,y)
• El comando imagesc escala los valores para que se
adecuen a la paleta.
g:[min(I), max(I)] [1..L]
>> colormap(gray(10));
>> image(A)
>> imagesc(A)
Min(I) Max(I)
1
L
7. Imágenes(5)
• En una imagen indexada el píxel (x,y) se
colorea de color negro si f(x,y)=0 y blanco si
f(x,y)=L-1.
• Con el comando imread podemos cargar una
imagen. Calculamos el negativo de la imagen.
>> lenna=imread('lenna256.jpg');
>> size(lenna)
ans =256 256
>> imshow(lenna)
>> y=max(max(lenna))-lenna;
>> colormap(gray(256));
>> image(y)
8. Imágenes(6)
• Toda transformación de los niveles de gris que
hagamos sobre la imagen en el caso de
imágenes indexadas las podemos hacer sobre
la paleta, es decir: ((ToM)oI)(x,y)=(Mo(ToI))(x,y)
• Ejemplo de transformación: negativo de una
imagen:
T:[1..L][1..L]
xT(x) = L – (x-1)
T(1) = L, T(2)=L-1, T(3) = L-2 ,…, T(L) = 1
9. Imágenes(7)
• Color de la coordenada (x,y): M(I(x,y))
(x,y)[1..L][0..1]x[0..1]x[0..1]
• Color transformado: T(M)(I(x,y))=M(T(I(x,y)))
(x,y)[1..L][1..L][0..1]x[0..1]x[0..1]
• Miramos cual es la paleta actual asignada a la
imagen con colorbar, calculamos la
transformada “imagen negativa” de la paleta y
hacemos lo mismo con la imagen.
10. Imágenes(8)
• Fijaros que no hemos tocado el array ‘lenna’,
sólo hemos tocado el array de la paleta,
también podriamos haber hecho:
>> imshow(lenna)
>> M=gray(256);
>> colormap(M)
>> colorbar
>> M = M(256:-1:1,:);
>> colormap(M)
>> imshow(lenna)
>> lenna = 255-lenna;
>> imshow(lenna)
>> colorbar
11. Imágenes(9)
• Crear una paleta de color en la que el color R
sea MR = x, el color G sea MG = -x y el color azul
sea aleatorio MB~N(0,1). Se puede imprimir la
paleta con los comandos rgbplot y colorbar.
>> r=0:1/255:1;
>> g=1:-1/255:0;
>> b=rand(1,256);
>> M=[r' g' b'];
>> rgbplot(M);
>> M2=fliplr(M);
>> imshow(lenna);
>> colormap(M);
>> colormap(M2);
12. Imágenes(10)
• Existen muchas transformaciones de
intensidad como la vista anteriormente
también llamadas transformaciones puntuales
porque para calcular el valor transformado de
un píxel sólo es necesario el valor de brillo de
ese píxel, vamos a ver: negativo, brillo,
contraste, umbral, posterización, corrección
gamma, ecualización.
>> r=0:1/255:1;
13. Imágenes(11)
• El histograma de una imagen es el número de
píxeles por nivel de gris. Si dividimos el
histograma por el número de píxeles nos da
información de la probabilidad de que un
determinado píxel tenga un cierto nivel de
gris: P(píxel = x);
>> lennaneg=255-lenna;
>> imhist(lenna)
>> figure;
>> imhist(lennaneg);
14. Imágenes(12)
• La transformación brillo suma un valor de
brillo a cada píxel, podemos añadir o quitar
brillo. Mirar modificación del histograma.
• La transformación umbral binariza la función
dado un parámetro B, los valores resultantes
son blanco y negro. Mirar histograma.
>> lennabri = lenna+50;
>> imshow(lennabri);
>> lennabin= 255 * (lenna > 124);
>> imshow(lennabin);
>> lennabw = im2bw(lenna,0.25);
>> imshow(lennabw);
15. Imágenes(13)
• La posterización disminuye el número de niveles de
gris de la imagen.
• El contraste mide el rango dinámico de los niveles de
gris en la imagen, una imagen muy contrastada tiene
un amplio abanico de niveles de gris.En caso de una
reducción del contraste se produce una compresión
del histograma.
>> lenna_pos = posterize(double(lenna),10);
>> imshow(uint8(lenna_pos));
>> imhist(uint8(lenna_pos));
16. Imágenes(14)
• Para cambiar el contraste contamos con la función
imadjust.
• Vamos a ver la función de transferencia para la
llamada anterior. Si miramos los histogramas
veremos cómo se ha comprimido.
>> lennaad = imadjust(lenna,[0 1],[0.3 0.7]);
>> g=0:255;
>> s=imadjust(uint8(g),[0 1],[0.3 0.7]);
>> plot(g,s);
>> axis([0 255 0 255]);
18. Imágenes(16)
• Hasta ahora hemos visto imágenes indexadas pero
también existen las imágenes RGB o TrueColor. En
cada píxel se codifican los 3 canales de color. Así
pues en cada posición/píxel I(i,j) tenemos un vector
de tres componentes. Tendremos 2^24 niveles de
color.
I:[1..M]x[1..N] [0..1] x [0..1] x [0..1]
I:[1..M]x[1..N] [0..255] x [0..255] x [0..255]>> addpath C:curso-matlab
>> lena = imread('lena.bmp');
>> size(lena)
ans =512 512 3
19. Imágenes(17)
• Podemos ver la intensidad de cada canal (R,G,B) por
separado y también su histograma.
>> imshow(lena(:,:,1));
>> figure;imshow(lena(:,:,2));
>> figure;imshow(lena(:,:,3));
>> imhist(lena(:,:,1));
>> imhist(lena(:,:,2));
>> imhist(lena(:,:,3));
>> RGB=reshape(ones(64,1)*reshape(jet(64),1,192),[64,64,3]);
>> imshow(RGB(:,:,1));
>> imshow(RGB(:,:,2));
>> imshow(RGB(:,:,3));
20. Imágenes(18)
• También podemos cambiar el espacio de color y
transformar la imagen RGB en una imagen YUV.
>> lenaYCbCr = rgb2ycbcr(lena);
>> lenargb = ycbcr2rgb(lenaYCbCr);
21. Imágenes(19)
• Componentes (u,v) de crominancia de la
transformación yuv para una (y) luminancia
determinada. Para pasar de una imagen de color a
una imagen en nivel de gris es mejor Y que
(R+G+B)/3.
>> lenaYCbCr = rgb2ycbcr(lena);
>> lenargb = ycbcr2rgb(lenaYCbCr);
22. Imágenes(19)
• Crear un script que dibuje un ‘erpimage’ y debajo el
erp asociado pasando como parámetros al script :
– Nombre fichero cnt.
– Canal.
– Evento.
– Epoch time.
– Tamaño paleta.
– Tamaño promediado.
– Ejemplo de llamada: erpimage(‘s2-b1.cnt’,3,5,0.1,128,4);