Procesamiento de imagenes

PROCESAMIENTO DE IMÁGENES EN MATLAB MANEJO DE FILTROS Forero Frasser, Carlos1; Rodríguez Barrero, Jhonattan 2; Gordillo

Views 117 Downloads 0 File size 3MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

PROCESAMIENTO DE IMÁGENES EN MATLAB MANEJO DE FILTROS Forero Frasser, Carlos1; Rodríguez Barrero, Jhonattan 2; Gordillo Porras, Nicolas3. 1. [email protected] 2. [email protected] 3. [email protected]

Abstract: this paper is about how MATLAB is useful to processing images, MATLAB offers different

II.

OBJETIVOS

General:

commands that the user could use to manipulate images through filters, spatial filters and frequential



una imagen digital usando MATLAB.

filters. Processing techniques using filters allow processing pixel by pixel by region or processing,

Aplicar distintos métodos de procesamiento a

Específicos:

which is very versatile for the user. These techniques are a powerful tool to connect the Digital Processing



Conocer y aplicar los diferentes algoritmos

Image World with applications in the real life, where

de filtros espaciales y filtros frecuenciales

it is required to eliminate noise and improve the

para imágenes por medio de MATLAB.

quality of an image. 

Aprender a diferenciar el uso de distintos filtros dependiendo de la aplicación para el

I.

INTRODUCCIÓN

procesamiento de la imagen.

En este informe se desarrollarán procedimientos útiles para procesar imágenes por medio de filtros

III.

DESARROLLO Y ANÁLISIS

tanto el dominio del espacio como en el de la frecuencia

utilizando

ampliamente

m-files

y

mostrando una breve introducción por medio de Simulink. Se incluirán filtros lineales como, el filtro promedio aritmético y el filtro promedio ponderado, filtros no lineales como el filtro de máximo y el filtro de mediana y filtros de frecuencia. Se utilizaran algunos comandos como imfilter, ordfilt2, fftshift, entre otros.

IMPLEMENTACION DE EJEMPLOS A continuación se desarrollaran y analizaran los ejemplos propuestos en la guía para dar una introducción al procesamiento de imágenes por medio de filtros 1. Filtros en el dominio espacial 1.1. Filtros de reducción de ruido 1.1.1.

Procesamiento de imágenes digitales.

Filtros lineales

Página 1

1.1.1.1. Filtro de promedio aritmético

Se pierden algunos detalles y efectivamente se

Los filtros lineales utilizan como base la operación

produce un efecto de suavizado en la imagen debido

convolución entre una máscara con coeficientes

a que el filtro opera de tal manera que en la imagen

determinados y la imagen a procesar.

procesada sus pixeles serán el resultado de un promedio entre sus vecinos cercanos, donde la

I=imread('Figura_F1.jpg'); h=ones(5,5)/25; I2=imfilter(I,h); imshow(I), title('Imagen Original'); figure; imshow(I2), title('Imagen Filtrada')

cantidad de estos dependen del tamaño de la máscara, por tanto entre mayor sea la máscara mayor será el número de vecinos a ese pixel que aportaran a su nuevo valor en la imagen filtrada.

Con el anterior código cargamos una imagen a color

Además debido al tamaño de la imagen no se nota

en Matlab (I), hacemos una máscara 5x5 con

muy claramente el borde negro que apareció de

coeficientes iguales a 1/25 (h) y aplicamos el filtro

repente en la imagen filtrada y que es debido a que los

(I2).

pixeles de borde no tiene vecinos completos es decir, al aplicar la máscara cuadrada no encontrará pixeles

Imagen original

en las coordenadas que exceden la imagen y por tanto no se podrá hacer el promedio, sin embargo por defecto se asignan a estos pixeles un valor de 0, es decir negro. Esto se puede corregir con la siguiente adición al comando: I2=imfilter(I,h, 'replicate',);

De esta forma en el momento de hacer el promedio se toman los valores de los pixeles que se encuentran en Imagen Filtrada

el límite de la imagen y se los de a los pixeles de la máscara que caen fuera de la imagen. 

MATLAB también puede crear las máscaras para

filtros

predefinidos

que

no

necesariamente se encuentran dentro de la categoría de filtros de reducción de ruido, algunos cumplen otro propósito. Por medio de la función fspecial. Las máscaras predefinidas son:

Procesamiento de imágenes digitales.

Página 2

'average'

averaging filter

Notamos que este filtro de promedio circular produce

'disk'

circular averaging filter

un efecto aún más notorio de suavizado, por supuesto

'gaussian'

Gaussian lowpass filter

'laplacian'

filter

approximating

conservando menos detalles. the

2-D

1.1.1.2. Filtro de promedio ponderado

Laplacian operator 'log'

Laplacian of Gaussian filter

I=imread('Figura_F2.jpg');

'motion'

motion filter

IG=rgb2gray(I);

'prewitt'

Prewitt

horizontal

edge-

emphasizing filter

h=[1 2 1;2 4 2;1 2 1]; I2=filter2(h,IG); imshow(I), title('Imagen Original');

'sobel'

Sobel horizontal edge-emphasizing

filter

I2=uint8(I2); figure; imshow(I2), title('Imagen Filtrada')

Ya que 'average' corresponde al filtro de promedio aritmético utilizaremos para el ejemplo 'disk' que

Imagen Original

corresponde al filtro de media circular, este comando devuelve un filtro de promedio circular dentro de la matriz cuadrada de lado 2*r + 1, donde el radio por defecto es 5. I=imread('Figura_F1.jpg'); h=fspecial('disk',6); I2=imfilter(I,h, 'replicate',); imshow(I2), title('Imagen Filtrada')

El comando filter2 efectivamente necesita de algunas consideraciones especiales a lo hora de usarlo, como por ejemplo convertir su tipo de variable de salida a

Procesamiento de imágenes digitales.

Página 3

entero de 8 bits para poder visualizar correctamente la

1.1.2.1. Filtro de mínimo

imagen filtrada y tener cuidado porque solo maneja imagen en escala de grises.

Primero debemos añadir ruido a nuestra imagen a filtrar, con el comando imnoise, y debemos tener en

Imagen Filtrada

cuenta que debemos trabajar con la imagen a escala de grises.

I=imread('Figura_F2.jpg'); IG=rgb2gray(I); In=imnoise(IG); I2=ordfilt2(In,1,ones(3,3)); imshow(IG), grises');

title('Imagen

a

escala

de

figure; imshow(I2), title('Imagen Filtrada')

El comando ordfilt2 permite trabajar con diversos ordenes de filtro que van desde 1 hasta MxN (tamaño de la máscara). Si seleccionamos 1, el filtro será de mínimo. Imagen Original

La conservación de los detalles respecto al filtro de promedio aritmético es mucho mejor, debido a que toma en cuenta los pesos de los pixeles más cercanos, independientemente del tamaño de la máscara.

1.1.2.

Filtros No Lineales

Los filtros no lineales, también se basan en operaciones con los pixeles vecinos, por medio del deslizamiento de una máscara sobre la imagen, pero a diferencia de los filtros lineales, las operaciones realizadas entre los pixeles de la máscara no son lineales.

Procesamiento de imágenes digitales.

Página 4

Imagen Filtrada

I=imread('Figura_F2.jpg'); IG=rgb2gray(I); In=imnoise(IG); I2=ordfilt2(In,9,ones(3,3)); imshow(I2), title('Imagen Filtrada')

Seleccionamos 9 en el comando ordfilt2 para garantizar que el filtro sea de máximo, ¿Por qué 9? Porque corresponde al tamaño de la máscara. Lo que nos garantiza que el filtro eliminara todos los valores de ruido ‘0’ es decir negro, obtendremos una imagen con solo puntos blancos. Este filtro elimina el ruido de tipo pimienta.

1.1.2.3. Filtro de mediana

El filtro de mínima elimina el ruido tipo sal.

Tomamos como orden del filtro un valor que corresponde a la mediana entre 1 y MxN (Tamaño de

1.1.2.2. Filtro de máximo Imagen Filtrada

la máscara), de esta forma filtramos tanto valores bajos como altos del ruido es, decir este filtro elimina el ruido tipo sal y pimienta.

Procesamiento de imágenes digitales.

Página 5

2. Filtros en el dominio de la frecuencia

Imagen resultante de aplicar la transformada de Fourier

La convolución espacial entre dos funciones, es equivalente a la multiplicación de estas en la transformada de Fourier. Así que los filtros anteriormente vistos, pueden ser aplicados desde el dominio frecuencial de la misma manera, pero con la ventaja que en este dominio, su análisis puede ser más fácil. Cabe aclara que las frecuencias altas corresponden a

h=fspecial('average');

cambio bruscos entre valores de pixeles de la imagen

freqz2(h);

y las frecuencias bajas a valores homogéneos entre sí.

Imagen 3D de la respuesta en frecuencia del filtro h

Por lo general las frecuencias altas se encuentran en los bordes o alto contraste dentro de la imagen. Anteriormente observamos como un filtro de promedio aritmético suavizaba los bordes dentro de una imagen, si hacemos una analogía en el mundo frecuencial se podría decir que filtro las frecuencias altas, es decir se trata de un filtro pasa-bajas.

2.1. Filtro Pasa-bajas Imagen Original

El comando freqz2 muestra la respuesta en frecuencia del filtro que le sea seleccionado, en este caso es un filtro pasa-bajas, en la imagen los valores más altos en el filtro son las frecuencias bajas, cercanas al centro, así que al multiplicar la transformada de la imagen por la transformada del filtro de promedio aritmético, dará como resultado una imagen con frecuencias más bajas.

Procesamiento de imágenes digitales.

Página 6

resf=fft2(f).*fft2(h,30,30); rest=ifft2(resf);

Imagen Con ruido Gaussiano

res=real(rest); imshow(res);

Como resultado obtenemos una imagen cuyas frecuencias altas han sido filtradas. Se distingue el “suavizado” en sus bordes.

EJERCICIOS PROPUESTOS

Imagen Filtrada (Filtro de promedio aritmético)

 Cargue una imagen en niveles de gris y añada un ruido gaussiano moderado. A=imread('Lenna.jpg'); A=rgb2gray(A); A=imnoise(A, 'gaussian'); imshow(A);

 Implemente y aplique a la imagen anterior un filtro de promedio aritmético 3x3. A=imread('Lenna.jpg'); A=rgb2gray(A); A=imnoise(A, 'gaussian'); B=imfilter(A, ones(3, 3)/9);

 Implemente y aplique a la imagen anterior un filtro de promedio ponderado 3x3, con la

imshow(A); figure; imshow(B);

Procesamiento de imágenes digitales.

siguiente mascara:,maska =[4 1 0; 4 1 0; 4 1

Página 7

0];

mask=mask/15;

¿Qué

diferencias

A=imread('Lenna.jpg');

encuentra entre los resultados de aplicar los

A=rgb2gray(A);

dos filtros anteriores?

A=imnoise(A, 'gaussian'); B=imfilter(A, ones(7,7)/49);

A=imread('Lenna.jpg');

imshow(A)

A=rgb2gray(A);

figure; imshow(B);

A=imnoise(A, 'gaussian'); B=imfilter(A, [4 1 0; 4 1 0; 4 1 0]/15); imshow(A) figure; imshow(B);

 Reste cada imagen filtrada con la original, observe el resultado y concluya.

Con el filtro promedio ponderado se conservan mejor los detalles, aunque la imagen se ve más suavizada que la imagen con filtro aritmético, debido a que no todos los pixeles vecinos al pixel a transformar tienen el mismo peso.

 Implemente y aplique a la imagen anterior un filtro de promedio aritmético 7x7

Procesamiento de imágenes digitales.

Página 8

Imagen resultante de restar la imagen original con la imagen filtrada con un filtro de promedio aritmético 3x3. Levemente se puede notar el contorno de la mujer, esto debido a que en el filtro fueron “suavizados” sus bordes, al hacer la resta se notará un poco respecto al resto de la imagen.

Imagen resultante de restar la imagen original con la imagen filtrada con un filtro de promedio aritmético 7x7. Debido a que la conservación de los detalles perdura más a medida que se aumenta la máscara y el valor nuevo de cada pixel en la imagen filtrada es más acorde a sus pixeles cercanos, el borde se ve más marcado al realizar la resta, al ser este el más Imagen resultante de restar la imagen original con la

afectado por el filtro.

imagen filtrada con un filtro de promedio ponderado con una máscara [4 1 0; 4 1 0; 4 1 0]/15. Se puede

 Comparando

los

histogramas

de

las

notar el contorno de la mujer mucho más realzado

imágenes filtradas anteriormente, analice y

que en la imagen anterior, esto debido a que en el

saque conclusiones.

filtro fueron “suavizados” con más peso, es decir con una máscara cuyos valores difieren de acuerdo a su vecindad de pixel, al hacer la resta se notarán con

A=imread('Lenna.jpg'); A=rgb2gray(A); imhist(A);

más claridad los bordes respecto al resto de la imagen.

Procesamiento de imágenes digitales.

Página 9

Histograma de la imagen original

imagen a escala de grises, hacia una distribución normal. A=imread('Lenna.jpg'); A=rgb2gray(A); A1=imnoise(A, 'gaussian'); B=imfilter(A1, ones(3, 3)/9); imhist(B);

Histograma de la imagen filtrada

A=imread('Lenna.jpg'); A=rgb2gray(A); A1=imnoise(A, 'gaussian'); imhist(A1);

Histograma de la imagen con ruido Gaussiano

Amplia el rango de pixeles y trata de homogenizarlos siguiendo la distribución Gaussiana. Sacrificando cantidad de pixeles para logar mayor uniformidad en la escala de grises.

A=imread('Lenna.jpg'); A=rgb2gray(A); A=imnoise(A, 'gaussian');

Este tipo de ruido tras aumentar la cantidad de pixeles

B=imfilter(A, [4 1 0; 4 1 0; 4 1 0]/15);

negros y blancos hace tender el histograma de la

imhist(B);

Procesamiento de imágenes digitales.

Página 10

En un principio se dijo que la conservación de los detalles y el tamaño de la máscara en un filtro de promedio

aritmético

eran

proporcionales,

si

comparamos este histograma con el de la imagen original se podrá notar que se asemeja más que cualquiera de los filtros anteriores y esto se debe a que se utilizó una máscara de 7x7.

 Cargue una imagen en niveles de gris y añada un ruido sal y pimienta moderado.

Se puede concluir que se pierden aún más los detalles

A=imread('Kratos.jpg');

de la imagen original, y esto se ve reflejado en que es

A=rgb2gray(A);

más notoria la distribución normal en su histograma.

A=imnoise(A, 'salt & pepper');

A=imread('Lenna.jpg'); A=rgb2gray(A);

figure; imshow(A);

A=imnoise(A, 'gaussian'); B=imfilter(A, ones(7,7)/49); imhist(B);

 Implemente y aplique a la imagen anterior un filtro de mínimo 3x3. A=imread('Kratos.jpg');

Procesamiento de imágenes digitales.

Página 11

A=rgb2gray(A); A=imnoise(A, 'salt & pepper'); figure; subplot(1,2,1); imshow(A); subplot(1,2,2); B=ordfilt2(A, 1, ones(3, 3)); B=uint8(B);

Como se observa elimina el ruido tipo pimienta de la

imshow(B);

imagen pero al haber ruido sal en esta, este tipo de filtro aumenta el ruido sal empeorando la calidad de la misma notablemente. Este filtro es óptimo si la imagen solo tuviera ruido tipo pimienta.

 Implemente y aplique a la imagen anterior un filtro de mediana 3x3. A=imread('Kratos.jpg'); A=rgb2gray(A);

Se observa que el ruido tipo sal desaparece de la imagen pero el tipo pimienta sigue igual.

A=imnoise(A, 'salt & pepper'); figure; subplot(1,2,1);

 Implemente y aplique a la imagen anterior un filtro de máximo 3x3.

imshow(A); subplot(1,2,2); B=ordfilt2(A, 5, ones(3, 3));

A=imread('Kratos.jpg');

B=uint8(B);

A=rgb2gray(A);

imshow(B);

A=imnoise(A, 'salt & pepper'); figure; subplot(1,2,1); imshow(A); subplot(1,2,2); B=ordfilt2(A, 9, ones(3, 3)); B=uint8(B); imshow(B);

Procesamiento de imágenes digitales.

Página 12

El filtro de mediana es el mejor para eliminar los

A=imread('Figura_F5.jpg');

ruidos extremos como los son el tipo sal y pimienta,

A=rgb2gray(A);

debido a que no toma en cuenta ni el valor máximo ni el mínimo sino el valor medio de la vecindad.

A=imnoise(A, 'salt & pepper'); figure; B=ordfilt2(A, 1, ones(3, 3));

 Implemente y aplique a la imagen anterior un filtro de mediana 5x5

B=uint8(B); subplot(1,2,2); imhist(B); title('Histograma 3*3 minimo');

A=imread('Figura_F5.jpg');

subplot(1,2,1);

A=rgb2gray(A);

B=A-B;

A=imnoise(A, 'salt & pepper');

imshow(B); title('Resta 3*3 minimo');

figure;

figure;

subplot(1,2,1);

C=ordfilt2(A, 9, ones(3, 3));

imshow(A);

C=uint8(C);

subplot(1,2,2);

subplot(1,2,2); imhist(C);

B=ordfilt2(A, 13, ones(5, 5));

title('Histograma 3*3 maximo');

B=uint8(B);

subplot(1,2,1);

imshow(B);

C=C-A; imshow(C); title('Resta 3*3 maximo'); figure; D=ordfilt2(A, 5, ones(3, 3)); D=uint8(D); subplot(1,2,2); imhist(D); title('Histograma 3*3 media'); subplot(1,2,1); D=A-D;

El resultado es bastante similar al filtro de mediana de 3x3, sin embargo no se observan grandes diferencias visualmente con respecto a este, excepto una leve variación en la conservación de detalles.

ejercicios anteriores, por medio de sus y

restando

las

figure; E=ordfilt2(A, 13, ones(5, 5)); E=uint8(E); subplot(1,2,2);

 Compare y concluya con respecto a los

histogramas,

imshow(D);title('Resta 3*3 media');

imágenes

filtradas con sus imágenes originales.

Procesamiento de imágenes digitales.

imhist(E); title('Histograma 5*5 media'); subplot(1,2,1); E=A-E; imshow(E); title('Resta 5*5 media');

Página 13

En las 2 primeras imágenes se puede observar que los filtros mínimo y máximo no filtran todo el ruido añadido a la imagen e inclusive logran aumentar el efecto ya sea de la sal o la pimienta en esta. Además se puede observar que sus histogramas no tienen tantos componentes en gamas de grises intermedios sino que tienen una gran cantidad ya sea en 0 o en 255. En las otras dos imágenes se observa que el histograma tiene un pico en la gama de grises oscura, son suavizadas y no tiene casi componentes en 0 y 255, esto se debe a que este filtro es especialmente efectivo a la hora de eliminar el ruido sal y pimienta. Es importante resaltar que no existe una gran diferencia en los histogramas de los filtros de media, haciendo esto que se pudiera decir que son prácticamente iguales.  Cree un filtro pasa altas y aplíquelo a una imagen cualquiera, diséñelo desde el dominio frecuencial y aplíquelo desde el dominio espacial. Nota: Utilice las funciones filter2 y ftrans2 si es necesario.

Procesamiento de imágenes digitales.

Página 14

Un filtro pasa-altas, elimina las frecuencias bajas, en imágenes estas frecuencias corresponden a aquellos cambios leves o nulos entre pixeles, por tanto al aplicar este filtro deben mantenerse los contornos de la figura, debido que allí se presentan las frecuencias altas. mask=[1 2 1;1 -10 1;1 2 1]/20; freqz2(mask);

Como era de esperarse se mantienen las frecuencias altas que corresponden al contorno en este caso del rectángulo interior.

Ahora utilizamos una imagen diferente Imagen original

Utilizando la imagen del ejemplo para el filtro pasabajos, obtenemos: resf=fft2(f).*fft2(h,30,30); rest=ifft2(resf);

Imagen a escala de grises

res=real(rest); imshow(res);

Procesamiento de imágenes digitales.

Página 15

Ahora utilizando la misma mascara aplicamos el filtro

Para un filtro pasa-altas se debe especificar ‘high’ en

pasa-bajas a la imagen a escala de grises, debido a que

el comando fir1.

trabajar la imagen a color genera un conflicto entre dimensiones de la matriz al hacer la convolución entre la transformada de Fourier de la imagen y la del filtro.

A=imread('Figura_F6.png'); A=rgb2gray(A); h1=fir1(5,0.05,'high'); h2= ftrans2(h1);

mask=[1 2 1;1 -10 1;1 2 1]/20; freqz2(mask);

freqz2(h2);

resf=fft2(f).*fft2(h,30,30); rest=ifft2(resf); res=real(rest); imshow(res);

resf=fft2(A).*fft2(h2,size(A,1),size(A,2));

Los cambios bruscos entre pixeles, se definen como las frecuencias altas así que al multiplicar la

rest=ifft2(resf); res=real(rest); imshow(res);

transformada de la imagen por la transformada del filtro con la máscara indicada, dará como resultado una imagen con las frecuencias más altas.

¿Qué pasa si queremos generar una máscara apropiada sin necesidad de que el usuario nos la proporcione? Para esto utilizaremos el comando fir1 que sirve para el diseño de filtros de forma arbitraria por el método de muestreo de frecuencia y el comando ftrans2 que sirve para transformar esos coeficientes dados por fir1 en una matriz.

Procesamiento de imágenes digitales.

Página 16

La imagen resultante conserva las frecuencias altas a

Imagen 2

las cuales les asignó un valor de pixel ‘0’ (negro) mientras que a las bajas les asignó un valor de 255 (blanco). Totalmente opuesto al caso anterior.  Analice en el dominio de la frecuencia las dos imágenes

en

degradado

horizontal

y

diagonal, como las imágenes que se muestran a continuación. ¿Qué diferencias tienen? Que significan las rayas verticales que aparecen en transformada de la Imagen 1(diagonal)? Imagen 1

Al realizar la transforma de Fourier de la imagen obtenemos:

Al realizar la transforma de Fourier de la imagen obtenemos:

Procesamiento de imágenes digitales.

Página 17

SIMULINK

Ajuste de contraste

Ajustamos los parámetros del bloque Contrast Adjustement -Adjust pixels values from: User-defined range. Range: [0 200] -Adjust pixels values to: User Defined range. Range: [0 255]

Ajustamos los parámetros del bloque Contrast Adjustement -Adjust pixels values from: User-defined range. Range: [0 100] -Adjust pixels values to: User Defined range. Range: [0 255]

Es interesante analizar como el contorno de la imagen se mantiene tan solo ajustando el contraste.

Procesamiento de imágenes digitales.

Página 18

Imagen original

Esta imagen resultante es similar a la obtenida al

Histograma de la imagen a color

hacer un procedimiento un poco más complejo con la aplicación de filtros en el dominio espacial en m-files. Por supuesto los resultados difieren en los pixeles que son totalmente blancos o totalmente negros ya que no se ven afectados por el cambio de contraste.

Visualización del histograma

El valor de los ejes esta automático razón por la cual se puede apreciar que no se alcanza a llegar a la cantidad de pixeles máximos de la imagen.

Procesamiento de imágenes digitales.

Página 19

Histograma de la imagen a escala de grises

Imagen filtrada

Los detllaes de este histograma difieren bastante al obtenido por m-files, debido en parte al número de muestras que se toman para visualizarlo, además del tamaño de sus ejes.

Eliminar ruido Sal y Pimienta de una imagen

El bloque Median Filter contiene parámetros como: -Tamaño de la mascara -Tipo de relleno para pixeles indefinidos -Valor del pixel de relleno

Procesamiento de imágenes digitales.

Página 20

las zonas donde lo hubo debido al cambio en su contorno.

V.



REFERENCIAS

Guía de procesamiento de imágenes en Matlab



Notas de clase



Opción de ayuda de MATLAB

Al variar cada uno de estos parámetros se obtienen resultados similares entre i, con pequeñas variaciones en la conservación de detalles de la imagen original.

IV.

CONCLUSIONES

 El método de reducción de ruido es una herramienta poderosa para poder tener una idea confiable de una imagen a procesar.

 Respecto a conservación o eliminación de contorno los filtros en el dominio de la frecuencia

poseen

ventajas

como

simplicidad y fácil manejo respecto a los filtros en el dominio espacial.  La detección óptima de contornos puede ser una alternativa a considerar a la hora de analizar el movimiento o corrimiento de una imagen, ya que se notarían específicamente

Procesamiento de imágenes digitales.

Página 21