Artículo - Filtrado Espacial de Imágenes

Embed Size (px)

Citation preview

Pimentel. FE.

1

FILTRADO ESPACIAL DE IMGENESPimentel, Carlos Daniel; [email protected]. Ingeniera Electrnica. Unidades Tecnolgicas de Santander.

ResumenEl presente artculo muestra el desarrollo deuno de los temas que tienen que ver con el Procesamiento Digital de Imgenes. Aqu se ponen a prueba los mtodos para realizar el filtrado espacial de las imgenes. Se analizan los efectos que ocurren en las imagenes cuando se hacen operaciones basadas en las vecindades; las diferentes clases de ruido que pueden estar presentes en ellas y cmo corregirlo, as como los comandos necesarios para introducirlo. De igual manera, se conocen las diferentes mscaras que se pueden utilizar al momento de realizar el filtrado. Por ltimo, se analizan y ponen a prueba las dos clases diferentes de filtros espaciales que existen por medio de los comandos necesarios.

ndice de Trminos Filtro, filtro Gaussiano, filtro Laplaciano, mscaras, vecindad. I. INTRODUCCIN Dentro de lo que se denomina procesamiento digital de imgenes se pueden encontrar una serie de tcnicas especiales aplicables a una imagen digital que permiten mejorarla, resaltar cierta informacin o conseguir un efecto especial deseado. Una de las diversas tcnicas que podemos encontrar y utilizar dentro de este campo es el filtrado, aplicado comnmente para la reduccin de ruido en la imagen [1]. Una imagen digital puede ser filtrada, tanto en el dominio de la frecuencia como en el dominio del espacio. La primera, implica una multiplicacin de la imagen con la funcin del filtro de frecuencia y una posterior re-transformacin del resultado en el dominio espacial [2]. La segunda, implica un proceso matemtico entre la imagen digital a procesar y una matriz de nmeros previamente determinada llamada mscara [1]. Este artculo tratar el tema del filtrado espacial. El filtrado espacial, es el filtrado que se lleva a cabo por medio de operaciones que se hacen directamente sobre los pixeles. En este proceso se relaciona, una mscara junto con un grupo de pixeles (del mismo tamao de la mscara) prximos al pixel a procesar,

con la finalidad de obtener una informacin til [3]. Dependiendo del filtro aplicado se obtendr una imagen con una serie de caractersticas propias del filtro y la mscara usada. En el filtrado espacial se pueden encontrar dos diferentes clases de filtros: los filtros lineales y los filtros no lineales [3]. Los lineales, como se mencion en los prrafos anteriores, es la aplicacin de un proceso matemtico entre la imagen y la mscara; a este proceso matemtico se lo conoce como convolucin. Este proceso es idntico a la multiplicacin en el espacio de frecuencia, pero los resultados en las implementaciones digitales varan, ya que para aproximar la funcin del filtro se tiene una sola matriz discreta y finita llamada matriz ncleo o matriz kernel [2]. Esta matriz suele ser una matriz pequesima de nmeros comnmente de 3x3 (dependiendo del resultado deseado) que se aplica a la imagen por medio de la circunvolucin [2], [3]. A esta matriz se le conoce comnmente como mscara. Los filtros no lineales, son filtros en los que se realiza un proceso matemtico diferente a la convolucin sobre los pixeles. Tres ejemplos de los operadores no lineales que podemos encontrar son el umbral, el valor absoluto y la mediana. Esta ltima, devuelve el valor del pixel central de los pixeles de entrada correspondientes a la imagen [2].

II. CONTENIDO DEL ARTCULO A. Operaciones basadas en vecindades 1) Mximo de una vecindad de 3x3 Aplicando el mximo de una vecindad de 3x3 a una imagen .jpg en RGB se obtuvieron los siguientes resultados.

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.aa

2

b

b

Fig. 1: Mximo de una vecindad de 3x3: a) Imagen original; b) Imagen resultante.

Fig. 2: Mnimo de una vecindad de 3x3: a) imagen original; b) imagen resultante.

El cdigo usado fue el siguiente:I=imread('monte.jpg'); IR=I(:,:,1); IG=I(:,:,2); IB=I(:,:,3); f=inline('max(x(:))'); I1=nlfilter(IR,[3,3],f); I2=nlfilter(IG,[3,3],f); I3=nlfilter(IB,[3,3],f); IT(:,:,1)=I1; IT(:,:,2)=I2; IT(:,:,3)=I3; figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(IT),title('b');

El cdigo usado fue el siguiente:I=imread('monte.jpg'); IR=I(:,:,1); IG=I(:,:,2); IB=I(:,:,3); f=inline('min(x(:))'); I1=nlfilter(IR,[3,3],f); I2=nlfilter(IG,[3,3],f); I3=nlfilter(IB,[3,3],f); IT(:,:,1)=I1; IT(:,:,2)=I2; IT(:,:,3)=I3; figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(IT),title('b');

2) Mnimo de una vecindad de 3x3 Aplicando el mnimo de una vecindad de 3x3 a una imagen .jpg en RGB se obtuvieron los siguientes resultados.

3) Relleno de pixeles Aplicando el relleno de pixeles a una imagen .jpg en RGB se obtuvieron los siguientes resultados. Relleno de una constante con imfilter y same

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.a

3

a

b

b

Fig. 3: Rellenado de pixeles por medio del comando imfilter con same: a) imagen original; b) imagen resultante.

Fig. 4: Rellenado de pixeles por medio del comando imfilter con full: a) imagen original; b) imagen resultante.

El cdigo usado fue el siguiente: El cdigo usado fue el siguiente:I=imread('monte.jpg'); m=ones(5, 5)*0.05; X=imfilter(I,m,25,'same'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(X),title('b'); I=imread('monte.jpg'); m=ones(5, 5)*0.05; X=imfilter(I,m,25,'full'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(X),title('b');

Relleno de una constante con imfilter y full Relleno de pixeles basado en rplica

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.a

4a

b

b

Fig. 5: Relleno de pixeles basado en rplica: a) imagen original; b) imagen resultante.

Fig. 6: Relleno de pixeles basado en espejo: a) imagen original; b) imagen resultante.

El cdigo usado fue el siguiente:I=imread('monte.jpg'); m=ones(5, 5)*0.05; X=imfilter(I,m,'replicate','full'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(X),title('b');

El cdigo usado fue el siguiente:I=imread('monte.jpg'); m=ones(5, 5)*0.05; X=imfilter(I,m,'symmetric','full'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(X),title('b');

Relleno de pixeles basado en espejo

B. Filtros Espaciales 1) Filtro Promedio Aplicando el filtro promedio a una imagen .jpg en RGB se obtuvieron los siguientes resultados.

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.a b

5a

100

100

200

200

300

100

200 c

300

400

300

100

200 d

300

400

1500 1000 1000

b500 500 0 0 100 200 0 100 200

0

Fig. 7: Filtro promedio aplicado a una imagen: a) imagen original; b) imagen resultante; c) histograma imagen original; d) histograma imagen resultante.

El cdigo usado fue el siguiente:I=imread('monte.jpg'); IG=rgb2gray(I); w=ones(5,5)/25; %Se define una matriz de pesos de valores iguales. I2=imfilter(I,w); %Se aplica el filtro I2G=rgb2gray(I2); figure, subplot(2,2,1),subimage(I),title('a'); subplot(2,2,2),subimage(I2),title('b'); subplot(2,2,3),imhist(IG),title('c'); subplot(2,2,4),imhist(I2G),title('d'); Fig. 8: Aplicacin de la mscara por medio de la correlacin: a) imagen original; b) imagen resultante.

El cdigo usado fue el siguiente:I=imread('monte.jpg'); m=ones(5,5)*0.05; X=imfilter(I,m,'corr'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(X),title('b');

2) Formas de aplicar la mscara Existen dos formas diferentes de aplicar la mscara al momento del filtrado: con la correlacin o con la convolucin. Mtodo de Correlacin

Mtodo de convolucin

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.aa

6

b

b

c

Fig. 9: Aplicacin de la mscara por medio de la convolucin: a) imagen original; b) imagen resultante.

El cdigo usado fue el siguiente:I=imread('monte.jpg'); m=ones(5,5)*0.05; X=imfilter(I,m,'conv'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(X),title('b');

d

e

C. Imgenes Ruidosas Agregando diferentes clases de ruido a una imagen .jpg en RGB se obtuvieron los siguientes resultados. 1) Aplicacin de diferentes clases de ruido

Fig. 10: Aplicacin de diferentes clases de ruido: a) imagen original; b) ruido gaussiano; c) ruido poisson; d) ruido salt & pepper; e) ruido speckle.

El cdigo usado fue el siguiente:I=imread('monte.jpg'); s = 15; s = s/255; II=imnoise(I,'gaussian',0,s^2); III=imnoise(I,'poisson'); IV=imnoise(I,'salt & pepper'); V=imnoise(I,'speckle'); figure, imshow(I),title('a'); figure, subplot(2,2,1),imshow(II),title('b'); subplot(2,2,2),imshow(III),title('c'); subplot(2,2,3),imshow(IV),title('d'); subplot(2,2,4),imshow(V),title('e');

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.a

7

2) Supresin de ruido con filtro promedioa b

c

b

Fig. 11: Supresin de ruido con filtro promedio: a) imagen original; b) imagen con ruido; c) imagen con ruido reducido.

El cdigo usado fue el siguiente:I=imread('monte.jpg'); II=imnoise(I,'salt & pepper'); w=ones(3,3)/9; IF=imfilter(II,w); figure, subplot(2,2,1),imshow(I),title('a'); subplot(2,2,2),imshow(II),title('b'); subplot(2,1,2),imshow(IF),title('c');

Fig. 12: Aplicacin del filtro Laplaciano: a) imagen original; b) imagen resultante filtrada.

El cdigo usado fue el siguiente:I=imread('tape.png'); w=fspecial('laplacian',0); I2=imfilter(I,w,'replicate'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(I2),title('b');

D. Filtro Laplaciano Aplicando el filtro laplaciano a una imagen .png en RGB se obtuvieron los siguientes resultados.

E. Filtro Gaussiano Aplicando el filtro gaussiano a una imagen .jpg en RGB se obtuvieron los siguientes resultados.

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.a1.5 1 0.5 0 -0.5 -1 5

8

b

4 3 2 1 1 2 4 3

5

Fig. 14: Mscara Promedio.

El cdigo usado fue el siguiente:z=fspecial('average',5); surf(z); figure(gcf) Fig.: 13: Aplicacin de filtro Gaussiano: a) imagen original; b) imagen resultante filtrada.

Ejemplo de Filtro Promedioa

El cdigo usado fue el siguiente:I=imread('monte.jpg'); z=fspecial('gaussian',3,0.5); I2=imfilter(I,z,'replicate'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(I2),title('b');

F. Mscaras con fspecial Obtencin de diferentes mscaras por medio del comando fspecial. Este comando y sus mscaras se pueden ver en algunos ejemplos propuestos. Mscara Promedio

b

Fig. 15: Ejemplo de Filtro Promedio: a) imagen original; b) imagen filtrada resultante.

El cdigo usado fue el siguiente:I=imread('monte.jpg');

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE. z=fspecial('average'); I2=imfilter(I,z,'replicate'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(I2),title('b');

9

z=fspecial('gaussian',5,0.7); [x, y]=meshgrid(-2:1:2); [xi, yi]=meshgrid(-2:.05:2); zi = interp2(x,y,z,xi,yi); surf(zi); figure(gcf)

Mscara Disco Ejemplo de Filtro Gaussianoa0.02

0.015

0.01

0.005

0 100 100 50 40 0 20 0 80 60

b

Fig. 16: Mscara de Disco.

El cdigo usado fue el siguiente:z=fspecial('disk',4); [x, y]=meshgrid(-2:0.5:2); [xi, yi]=meshgrid(-2:.05:2); zi = interp2(x,y,z,xi,yi); surf(zi); figure(gcf)

Fig. 18: Aplicacin del filtro gaussiano: a) imagen original; b) imagen filtrada resultante.

Mscara Gaussiana El cdigo usado fue el siguiente:I=imread('monte.jpg'); z=fspecial('gaussian'); I2=imfilter(I,z,'replicate'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(I2),title('b');

0.4

0.3

0.2

0.1

Mscara Laplaciana de la Gaussiana

0 100 100 50 40 0 20 0 80 60

Fig. 17: Mscara Gaussiana.

El cdigo usado fue el siguiente:UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.

10

5

4 3

02

-51

-10

0 -1 100

-15 100 100 50 40 0 20 0 80 60

100 50 40 0 20 0 80 60

Fig. 19: Mscara Laplaciana de la Gaussiana.

Fig. 21: Mscara que mejora el contraste con unsharp.

El cdigo usado fue el siguiente:z=fspecial('log',5,0.4); [x, y]=meshgrid(-2:1:2); [xi, yi]=meshgrid(-2:.05:2); zi = interp2(x,y,z,xi,yi);

El cdigo usado fue el siguiente:z=fspecial('unsharp',0.3); [x, y]=meshgrid(-2:(5/3):2); [xi, yi]=meshgrid(-2:.05:2); zi = interp2(x,y,z,xi,yi); surf(zi); figure(gcf)

Mscara Laplaciana

Ejemplo con unsharpa

1 0 -1 -2 -3 -4 100 100 50 40 0 20 0 80 60

b

Fig. 20: Mscara Laplaciana.

El cdigo usado fue el siguiente:z=fspecial('laplacian',0.3); [x, y]=meshgrid(-2:(5/3):2); [xi, yi]=meshgrid(-2:.05:2); zi = interp2(x,y,z,xi,yi); surf(zi); figure(gcf)

Fig. 22: Ejemplo de filtrado con unsharp: a) imagen original; b) imagen filtrada resultante.

Mscara que Mejora el Contraste con unsharp

El cdigo usado fue el siguiente:

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.a

11

I=imread('monte.jpg'); z=fspecial('unsharp'); I2=imfilter(I,z,'replicate'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(I2),title('b');

Acentuar Transiciones Horizontales con prewita b

b

Fig. 24: Acentuacin de Horizontal con sobel.

El cdigo usado fue el siguiente:I=imread('onion.png'); z=fspecial('sobel'); I2=imfilter(I,z,'replicate','full'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(I2),title('b'); Fig. 23: Acentuacin de Horizontal con prewit.

Acentuar Transiciones Verticales con prewit El cdigo usado fue el siguiente:I=imread('onion.png'); z=fspecial('prewit'); I2=imfilter(I,z,'replicate','full'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(I2),title('b');

Acentuar Transiciones Horizontales con solbel

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.a

12a

b

b

Fig. 25: Acentuacin de Vertical con prewit.

Fig. 26: Acentuacin de Vertical con sobel.

El cdigo usado fue el siguiente:I=imread('onion.png'); z=fspecial('prewit'); I2=imfilter(I, z','replicate','full'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(I2),title('b');

El cdigo usado fue el siguiente:I=imread('onion.png'); z=fspecial('sobel'); I2=imfilter(I, z','replicate','full'); figure, subplot(2,1,1),imshow(I),title('a'); subplot(2,1,2),imshow(I2),title('b');

Acentuar Transiciones Verticales con sobel

G. Filtros no Lineales Aplicacin de filtros no lineales a una imagen .jpg en RGB se obtuvieron los siguientes resultados. Filtro de Media Aritmtica

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.a

13a

b

b

Fig. 27: Aplicacin del filtro de media aritmtica: a) imagen original; b) imagen filtrada resultante.

Fig. 28: Aplicacin del filtro de media armnica: a) imagen original; b) imagen filtrada resultante.

El cdigo usado fue el siguiente:A = imread('onion.png'); AG = rgb2gray(A); fun = @(x) mean(x(:)); B = nlfilter(AG,[3 3],fun); figure, subplot(2,1,1),imshow(A),title('a'); subplot(2,1,2),imshow(B),title('b');

El cdigo usado fue el siguiente:A = imread('monte.jpg'); I2=uint8(3*(3./(imfilter(1./A,ones(3,3), 'symmetric')))); figure, subplot(2,1,1),imshow(A),title('a'); subplot(2,1,2),imshow(I2),title('b');

Filtro de Media Geomtrica Filtro de Media Armnica

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.aa

14

bb

Fig. 29: Aplicacin del filtro de media geomtrica: a) imagen original; b) imagen filtrada resultante.

Fig. 31: Aplicacin del filtro de Punto Medio.

Filtro de Media Contra Armnicaa

El cdigo usado fue el siguiente:A = imread('monte.jpg'); AG=rgb2gray(A); d1=ordfilt2(AG,1,ones(3,3),'symmetric'); % Mnimo d2=ordfilt2(AG,3*3,ones(3,3),'symmetric' ); % Mximo I1=uint8(0.5*(d2+d1)); figure, subplot(2,1,1),imshow(A),title('a'); subplot(2,1,2),imshow(I1),title('b');

b

H. Cul filtro usar? Con este tipo de procedimiento se puede verificar cmo se difuminan los bordes despus de aplicar el filtro.

Fig. 30: Aplicacin del filtro de media contra-armnica: a) imagen original; b) imagen filtrada resultante.

Filtro de Punto Medio

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.ae

15

bf

c

g

d

Fig. 32: Disminucin de bordes despus de aplicar el filtro: a) imagen original; b) determinacin de bordes; c) ruido inducido en la imagen; d) filtro de mediana y deteccin de bordes verticales; e) filtro promedio y deteccin de bordes verticales; f) filtro de media armnica y deteccin de bordes verticales; g) filtro promedio y deteccin de bordes verticales.

III. CONCLUSIONES El filtrado espacial es la operacin que se aplica a una imagen para resaltar o atenuar detalles espaciales con el fin de mejorar la interpretacin visual y facilitar un procesamiento posterior.

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA

Pimentel. FE.

16

El filtrado espacial se podra tambin nombrar como filtrado local, ya que modifica el valor de cada pixel de acuerdo con los valores de los pixeles que lo rodean por medio de una convolucin. El ruido, en esencia, es informacin no deseada que adquiere la imagen contaminndola y por ende dandola. Los filtros lineales realizan una operacin de convolucin entre una imagen y una mscara produciendo un enturbiamiento y el difuminado de los bordes. Se pudo observar y comprobar cun importante es definir correctamente el tamao de la mscara, Ya que cuanto mayor sea esta se consigue una mayor reduccin del ruido; pero se produce una mayor difuminacin de los bordes. Los filtros no lineales son aquellos que realizan operaciones al conjunto de pixeles del entorno de la vecindad del pixel correspondiente a la imagen que se desea filtrar. Adems de los filtros espaciales (lineales y no lineales) conocidos en esta prctica, tambin es posible realizar el tratamiento de imgenes en el dominio de la frecuencia.REFERENCIAS

[1] Reduccin de ruido en una imagen digital. [En lnea]. Disponible en: . [2] Digital Filters. [En lnea]. Disponible en: . --, Kernel. [En lnea]. Disponible en: . --, Non-linear filtering. [En lnea]. Disponible en: . [3] ES.WIKIPEDIA.ORG. Procesamiento digital de imgenes. Filtrado en el dominio del espacio. [En lnea]. Disponible en: . [4] C. Erik, Z. Daniel, P. Marco. Procesamiento Digital de Imgenes con Matlab y Simulink. Editorial Alfa Omega.

UNIDADES TECNOLGICAS DE SANTANDER - INGENIERA ELECTRNICA