KELA Presentacion Costa Rica 2024 - evento Protégeles
Clase 4
1. PROCESAMIENTO DE IMÁGENES CON MATLAB
Lectura de Imágenes
Mediante el comando:
Imagen=imread(‘nombre.extensión’) %Imagen es el nombre donde va
almacenar la imagen.
La imagen a leer debe encontrarse en la carpeta de trabajo de Matlab. Los
formatos de imagen soportados por Matlab son:
Imagen=imread('equipo.jpg')
2. Representación de Imágenes en Matlab
En Matlab una imagen en formato de color RGB se representa por tres
matrices bidimensionales, correspondientes a los planos R, G y B.
Para obtener los planos R, G y B se ejecutan los comandos:
Im_R=Imagen(:,:,1)
Im_G=Imagen(:,:,2)
Im_B=Imagen(:,:,3)
Ejemplo:
3. Tamaño de la Imagen
Obtención del tamaño de Imagen:
[m,n,p]=size(Imagen)
Imagen: 197x256x 3
3 planos (R,G y B)
4. Despliegue de Imágenes
Se realiza con el comando:
imshow(Imagen)% esta palabra sirve para abrir la imagen
Dónde: Imagen es del tipo uint8.
Escritura de Imágenes ósea copiamos la imagen uno en la dos
Con el comando:
imwrite(Imagen,'imagen.jpg');
5. Lectura de Valor de Pixeles
Obtención de valor de pixel
Imagen(m,n) ; Cuando Imagen está en escala de
grises (un solo plano).
Imagen(m,n,p) ; Para imagen RGB. Devuelve el
valor del pixel correspondiente al plano p (1, 2 ó 3).
Dónde: m,n son las coordenadas del pixel.
imshow(Imagen)
pixel=impixel
6. Edición de Pixeles
Para modificar el valor de un pixel:
Imagen(m,n)=x ; Para una imagen en escala de grises.
imagen(m,n,p)=x ; Para una imagen RGB.
Dónde: x es un número entero entre 0 y 255 correspondiente a escala de grises
(0=negro y 255=Blanco)
imshow(Imagen)
pixel=impixel
Imagen(200,750,1)=250;
Imagen(200,750,2)=250;
Imagen(200,750,3)=250;
7. Al dar doble clic sale la imagen de los pixeles de la marcas en la figura
8. Submuestreo
Submuestrear una imagen reduce su tamaño y permite que el procesamiento
posterior de la imagen se agilice.
Se toman pixeles equidistantes (muestras), dependiendo del factor elegido, y
se desecha el resto de pixeles.
Imagen_ sub=Imagen(1:a:end,1:a:end,1:1:end)
Dónde: a es el factor de muestreo.
Si a=2 la imagen se reduce a la mitad.
9. Ejemplo: Submuestreo de la imagen Imagen.m por un
factor de 4.
Im_sub=Imagen(1:4:end,1:4:end,1:1:end);
imshow(Im_sub)
10. Transformación Uint8 - Double
En algunos casos es necesario que la imagen a procesar sea del tipo
"double", ya que uint8 admite sólo valores enteros entre 0 y 255.
Para transformar de uint8 a double y viceversa:
Imagen_double=double(Imagen_uint8)
Imagen_uint8=uint8(Imagen_double)
El comando imshow sólo muestra imágenes del tipo uint8.
% código a
Im_double=double(Imagen);
Im_double=Im_double*0.25;
Im_uint8=uint8(Im_double);
imshow(Im_double)
%código b
Im_double=double(Imagen);
Im_double=Im_double*0.25;
Im_uint8=uint8(Im_double);
imshow(Im_uint8)
Corran primero el código a después el código b
11. Filtraje
Se realiza mediante convolución de matrices.
Dónde: Imagen es la matríz a filtrar.
f es la matríz filtro.
b11,b12,…,bmn son los
elementos de la matríz de salida.
12. Filtraje
Se puede utilizar el comando:
imagen2=filter2(filter,Imagen);
Dónde: filter es la matriz filtro.
El comando filter2 no admite uint8, por lo tanto la imagen a filtrar se
debe convertir al tipo double.
El filtraje se debe realizar plano por plano en una imagen RGB.
Se agrega ruido a una imagen con el comando imnoise. Revisar los
archivos de ayuda de Matlab para mas información.
13. Ejemplo: Filtraje promedio
Para eliminar o reducir el ruido de una imagen
foto=imread('animales.jpg');
foto=imnoise(foto,'salt & pepper');
foto_R=foto(:,:,1);
foto_G=foto(:,:,2);
foto_B=foto(:,:,3);
filtro=1/9*[1 1 1;1 1 1;1 1 1];
foto2_R=filter2(filtro,double(foto_R));
foto2_G=filter2(filtro,double(foto_G));
foto2_B=filter2(filtro,double(foto_B));
foto2(:,:,1)=foto2_R;
foto2(:,:,2)=foto2_G;
foto2(:,:,3)=foto2_B;
imshow(uint8(foto))
figure,imshow(uint8(foto2))
14.
15. Ejemplo: Detección de bordes
Se puede realizar similar al caso anterior, definiendo un filtro para
detección de bordes.
La imagen a filtrar debe estar en escala de grises.
Para convertir RGB a escala de grises se utiliza el comando:
Imagen_gray=rgb2gray(Imagen_RGB);
filter=[1 2 1;0 0 0;-1 -2 -1];
Im_RGB=imread('animales.jpg');
Im_gray=rgb2gray(Im_RGB);
Im_edge=filter2(filter,Im_gray);
imshow(Im_RGB);
figure,imshow(Im_edge);
17. Filtro Mediana
Se realiza para atenuar el ruido de una imagen.
Usualmente se aplica a imágenes en escala de grises.
Imagen2=medfilt2(Imagen)
Ejemplo:
Im_RGB=imread('medusa.jpg');
Im_gray=rgb2gray(Im_RGB);
Im_gray=imnoise(Im_gray, 'salt & pepper');
imshow(Im_gray)
Im_filt=medfilt2(Im_gray);
figure, imshow(Im_filt)
18.
19. Detección de Bordes
Se realiza con el comando:
imagen_edge=edge(imagen_gray,’mascara’);
Se requiere que la imagen esté en escala de grises.
mascara es el tipo de mascara a utilizar (sobel, canny,prewit, …) ya
predefinidas en Matlab
Ejemplo:
Se realiza la detección de bordes de una imagen utilizando
la máscara de "sobel".
21. Binarización
Conversión de una imagen en escala de grises a una imagen lógica
(0=negro, 1=blanco).
Se realiza con el comando:
Imagen_bin=imagen<=Umbral
Dónde: Umbral es un número entre 0 y 255.
También se puede usar el siguiente comando cuando se requiere
binarizar una imagen RGB directamente.
Imagen_bin=im2bw(Imagen,level)
Dónde: level es el nivel de umbral entre 0 y 1.
El tipo de dato habitual para una imagen es uint8, es decir, un entero representado en 8 bits. Esto nos da 2^8=256 valores que se distribuyen en el rango de [0 ...