Subido por Rodrigo

ML Tutorial-Proc Im-18

Anuncio
Procesamiento de Imágenes con Matlab
Introducción
Vamos a ver una introducción al procesamiento de imágenes con Matlab. Vamos a ver,
mediante un pequeño tutorial, las siguientes funciones básicas de procesamiento de
imágenes:







imread()
imshow()
imwrite()
rgb2gray()
imhist()
imadjust()
im2bw()
imread()
El comando imread() leerá una imagen guardándola en una matriz:
img = imread('Torre.png');
La imagen queda guardada en la matriz img. Si se estima conveniente,
dentro del nombre de la imagen que queremos abrir es posible indicar
el
directorio
donde
se
encuentra
la
imagen
(por
ejemplo
Midirectorio/EjercProcImag/Torre.png).
>> size(img)
ans =
499
748
%size: para ver dimensiones de la matriz de la imagen
3
Esto indica que es una matriz de 499x748 con 3 canales RGB.
RGB (Red Green Blue): en cada canal contiene la cantidad de ese color que contiene
ese pixel.
La matriz contiene algo parecido a esto:
1
imshow():
Para mostrar nuestra imagen, podemos usar (entre otros) los comandos imshow() o
imagesc(). El comando imshow() muestra una imagen en formato estándar de 8 bits,
como suelen aparecer las imágenes, por ejemplo, en un navegador web. El comando
imagesc() muestra la imagen con ejes escalados con el valor mínimo como negro y el
valor máximo como blanco.
Usando imshow():
2
Usando imagesc():
El nombre del fichero de la imagen es sensible a mayúsculas/minúsculas.
Podemos ver los valores RGB de un pixel (x, y) poniendo el cursor en esa posición de la
imagen de la siguiente forma:
1. Seleccionar el icono "Data Cursor" en el menú superior.
2. Hacer clic con el botón izquierdo del ratón en cualquier punto de la imagen.
Vemos que cada pixel es un vector tridimensional con valores en el rango [0, 255]. Los
tres números que se muestran es la cantidad de cada color Rojo, Verde y Azul (RGB:
Red Green Blue).
3
Una imagen en color es una imagen combinada de 3 imágenes (R, G, B). Por tanto,
podemos mostrar los componentes individuales RGB de la imagen usando comandos
como los utilizados en el siguiente script:
subplot(1,3,1);
imagesc(img(:,:,1));
title('Red');
% color Rojo (R)
subplot(1,3,2);
imagesc(img(:,:,2));
title('Green');
% color Verde (G)
subplot(1,3,3);
imagesc(img(:,:,3));
title('Blue');
% color Azul (B)
Si usamos colormap gray, configuramos el mapa de colores como escala de grises:
>> colormap gray
4
Si quisiéramos seguir "jugando" con la imagen, podríamos crear una imagen nueva que
tenga más azul (por ejemplo cuadriplicando este componente azul).
subplot(2,1,1);
imshow(img);
title('Normal RGB');
subplot(2,1,2);
blue_img = double(img);
%conversión (cast) a formato double
blue_img(:,:,3) = 4*blue_img(:,:,3);
blue_img = uint8(blue_img);
%conversión (cast) a formato uint8
imshow(blue_img);
title('RG 4*B');
% 4*B: hemos multiplicado por 4 el azul (Blue)
5
imwrite ():
Para guardar nuestra nueva imagen que hemos modificado poniéndole el color azul
intensificado, usamos el comando imwrite():
imwrite(blue_img, 'Blue4_Torre.png', 'png');%guarda imagen formato PNG
imwrite sigue la sintaxis imwrite(A, 'NombreFichero', FMT) que escribe la imagen A en
el fichero NombreFichero, en el formato FMT (por ejemplo, BMP, GIF, JPG, PNG,
TIF, etc.). Para más información, teclear help imwrite().
rgb2gray():
Si queremos pasar nuestra imagen a escala de grises podemos utilizar el comando
rgb2gray(). Podríamos hacer algo así:
img = imread('IP1/Torre.png');
gray = rgb2gray(img);
imshow(gray);
6
>> size(gray)
ans =
499
748
Ahora, tenemos solo un valor por cada pixel, no 3 valores como teníamos antes
(R,G,B).
imhist():
Muestra un histograma de los datos de la imagen. imhist(img,n) muestra un histograma
con n barras para la imagen de intensidad sobre una barra de color de la escala de grises
de longitud n. Si omitimos los argumentos, imhist() usa un valor por defecto de n = 256
si I es una imagen en escala de grises, o n=2 si I es una imagen binaria.
img = imread('IP1/Torre.png');
gray = rgb2gray(img);
imhist(gray);
7
imadjust():
imadjust() ajusta los valores de intensidad de la imagen. Mapea los valores de
intensidad de la imagen de una entrada a nuevos valores en la imagen de salida.
J = imadjust(I) mapea los valores de intensidad de una imagen en escala de grises a
nuevos valores en J.
J = imadjust(I,[low_in; high_in],[low_out; high_out]) mapea los valores en
I a nuevos valores en J tal que los valores entre low_in y high_in son mapeados a
valores entre low_out y high_out. Si se especifica una matriz vacía ([]), imadjust usa
los límites por defecto de [0 1].
Lo siguiente incrementa el contraste de la imagen:
img = imread('IP1/FotoPadreHija.jpg');
gray = rgb2gray(img);
adj_img = imadjust(gray, [0.3,0.7],[]);
subplot(1,2,1);
imshow(gray);
title('input');
subplot(1,2,2);
imshow(adj_img);
title('adjusted');
8
Input file : FotoPadreHija.jpg.
im2bw()
im2bw() convierte la imagen que teníamos en escala de grises a una imagen binaria
(sólo contiene blanco o negro). En este ejemplo usamos la imagen ajustada.
img = imread('IP1/FotoPadreHija.jpg');
gray = rgb2gray(img);
adj_img = imadjust(gray, [0.3,0.7],[]);
bw_img = im2bw(adj_img);
subplot(1,2,1);
imshow(adj_img);
title('input image');
subplot(1,2,2);
imshow(bw_img);
title('binary image');
9
Descargar