Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccion Al Procesamiento de Imagenes Con Matlab PDF
Introduccion Al Procesamiento de Imagenes Con Matlab PDF
Andrea Manna
Que es una imagen?
• Una imagen es una función bidimensional f(x,y), donde x e
y representan las coordenadas espaciales y el valor de f en
cualquier par de coordenadas (x,y) representa la
intensidad de la imagen en dicho punto.
• Una imagen digital f[x,y] descrita en un espacio 2D
discreto se deriva de una imagen análoga f(x,y) en un
espacio 2D continuo a través de un proceso llamado
digitalización
• Matlab almacena las imágenes como vectores
bidimensionales (matrices), en el que cada elemento de la
matriz corresponde a un sólo pixel.
Ojo!!! Ya no utilizamos el
nombre del archivo. A partir
de ahora nos manejamos
con la matriz donde leímos
la imagen.
Lectura, visualización y escritura de
imágenes en Matlab
• Como vimos, la variable I tiene 3 dimensiones. Esto es porque la imagen
tomada con el comando imread posee 3 canales. Podemos manipular cada
canal por separado:
J= I(:, : , 1); Esto significa “Dame todas las
filas y todas las columnas del canal 1 y guardalo en J”
Cuando vamos a visualizar J en el espacio de trabajo, vemos que tiene 2
dimensiones. Esto es porque extrajimos una capa o canal.
>> I=imread('lena_std.tif');
>> subplot(2,2,1)
>> imshow(I)
>> subplot(2,2,2)
>> imshow( I(:,:,1) )
>> subplot(2,2,3)
>> imshow( I(:,:,2) )
>> subplot(2,2,4)
>> imshow( I(:,:,3) )
Lectura, visualización y escritura de
imágenes en Matlab
• ¿Por que cuando hacemos
>> J= I(:, : , 1)
>>imshow( I(:,:,1) )
la imagen se ve en blanco y negro?
• Simplemente porque tomamos un
solo canal de los 3 que tiene la
imagen
• Si vemos cada canal por separado lo
que se visualiza son las intensidades
en escala de gris de cada canal (rojo,
verde y azul)
La variable J posee dos dimensiones y por eso se visualiza en
gris!!!
Lectura, visualización y escritura de
imágenes en Matlab
• ¿Como haríamos para ver cada canal en su color?
• Lo que debemos hacer es “anular” los otros canales
asignandoles el valor 0.
• Veamos a Lena solo en el canal rojo:
>> T = I; %hago copia de la imagen
>> T(:,:,2) = 0; %Capa verde en cero
>> T(:,:,3) = 0; %Capa azul en cero
>> imshow(T)
>> h(1:250,1:250,3)=150;
>> h(1:250,251:end,3)=235;
>> h(251:end,1:250,3)=22;
>> h(251:end,251:end,3)=197;
>> imshow(h)
>>imhist(I) % retorna el grafico del histograma con el eje x dividido en 256 partes
>>imhist(I,n) % retorna el grafico del histograma con el eje x dividido en n partes
>>[counts,x] = imhist(___) % No realiza el gráfico, sino que retorna dos vectores:
3000
>>subplot(2,2,1) 2500
2000
>>imshow(I) 1500
1000
>>imhist(I(:,:,1))
3000
2000 2500
1500
>>imhist(I(:,:,2))
1000
1000
500
500
0 50
canal verde
100 150 200 250
0
0 50
canal azul
100 150 200 250
>>subplot(2,2,4)
>>imhist(I(:,:,3))
>>xlabel ('canal azul')
Histograma de una imagen
• Tomemos el canal 1:
>> I1= I(:,:,1);
>> [counts,x] = imhist(I1) ;
>> x(100:110) >> counts(100:110)
99 1559 4500
1500
bastante clara. Lo comprobamos:
1000
500
3500
3500
3000
3000
2500 2500
2000 2000
1500 1500
1000 1000
500 500
0 0
histograma rk ∈ [0,255]
Para ecualizar el histograma se realiza la siguiente operación:
1) Se obtiene el histograma
2) Calcular los nuevos valores de intensidades utilizando la función de probabilidad de
ocurrencia
3500
5000
>>J1= histeq(I1)
4500
3000
4000 >>imshow(J1)
>>imhist(J1)
2500 3500
3000
2000
2500
1500 2000
1500
1000
1000
500
500
0 0
La ecualización del histograma genera una imagen cuyos niveles de intensidad son
igualmente probables y, además, cubren todo el rango [0,255]. El resultado neto de este
proceso es una imagen cuyo rango dinámico ha sido incrementado, que tenderá a
poseer un mayor contraste.
Ecualización de una imagen
• Veamos otro ejemplo:
5000
5000
4500
4500 >> I=imread('semillas.png');
4000
4000
3500
3500 >> I1=I(:,:,1);
3000
>> imshow(I1)
3000
2500 2500
2000 2000
1500
1000
1500
1000
>> figure,imhist(I1);
500
0
500
0
>> g=histeq(I1,256);
0 50 100 150 200 250
0 50 100 150 200 250 >> figure,imshow(g);
>> figure,imhist(g);
Ejercicios
1. Tome la imagen de Lena e intente extraer la subimagen en color correspondiente
a la boca en la variable BOCA
2. ¿Que tipo de dato obtuvo? ¿double o uint8?
3. Tome el canal 3 de la imagen de Lena. Pasarlo a double utilizando el comando
im2double.
4. Repetir el mismo ejercicio anterior pero en vez de usar la función im2double,
utilice la función double. ¿Dio el mismo resultado? Chequearlo. En caso
negativo, ¿Cómo puede utilizar la función double para lograr el resultado
deseado? Pista: recuerde que im2double es una función que transforma
elementos uint8 en elementos double entre 0 y 1.
5. Arme una imagen teniendo en cuenta la siguiente información para cada una de
las capas:
C1= rand(300); % Capa 1
C2= rand(300); % Capa 2
C3= rand(300); % Capa 3
6. Muestre el histograma de cada una de las capas de la imagen anterior. ¿Qué
puede deducir? ¿Qué pasa si se realiza la ecualización de estas capas?