Está en la página 1de 104

Ruido y Filtrado

Clase de Taller I del 28/10/2015


Índice
 RUIDO
 ¿Qué es el ruido?
 Objetivos.
 Tipos de ruido.

 TECNICAS DE FILTRADO EN DOMINIO ESPACIAL


 Promediado de imágenes
 Filtros de orden
 Filtros de medias

 DOMINIO FRECUENCIAL

 FUNCIONES EN MATLAB
Problema.

 Las imágenes se adquieren por métodos foto electrónicos o


fotoquímicos. Los dispositivos sensores tienden a degradar la
calidad de las imágenes al introducir ruido, deformaciones
geométricas y/o borrosas debido al movimiento o desenfoque del
dispositivo con el que se obtiene la imagen (cámara).
 Una de las preocupaciones primarias del procesamiento digital de
imágenes es aumentar la calidad de la imagen y moderar la
degradación introducida por los sensores y dispositivos de
adquisición.
 Las técnicas de restauración de imágenes están interesadas
primariamente por reconstruir o recobrar una imagen que ha sido
degradada.
¿Qué es el ruido?
Repasemos: Imagen digital

Objeto Real: Representación


continuo Interna: Pixel
dicreta
Concepto de ruido (I)

 Cuando obtenemos una imagen digital y se


ve un poco distorsionada, decimos que la
imagen tiene ruido.
ruido
 Según su definición, ruido es cualquier
perturbación que sufre una señal en el
proceso de adquisición y/o transmisión y/o
almacenamiento.
 El ruido se modela usualmente como un
proceso estocástico (modelo probabilístico).
Concepto de ruido (II)

 El ruido es un defecto de la información no deseado


que contamina/degrada la imagen.
 Se manifestará generalmente en píxeles aislados
que toman valores distintos de los “reales”.
Imagen real Degradación Imagen distorsionada
+
f(x,y) g(x,y)
D

n(x,y)
Imágenes ruidosas
Escáner de la letra “G” con y sin ruído

>>[R,Q] = size(G); % matriz 5x7

>>G_ruidosa = G + randn(R,Q)*0.2

G=01110100011000010000100111000101110

G_ruidosa = 0.1337 0.9859 1.0447 1.0773 -0.5392 1.0712 0.0547 0.0860


-0.0817 0.9028 0.6783 0.0299 0.3474 -0.0147 0.1335 1.2666 0.0991
0.3885 -0.2928 0.1002 1.0181 -0.0948 0.0390 0.8881 0.9455 0.8147
0.0208 0.4779 0.1484 1.2493 -0.2367 0.9407 1.0204 1.0842 -0.2981
Objetivos:
procesamiento de ruido
 Suavizar la imagen:
imagen reducir las variaciones de
intensidad entre píxeles vecinos.
 Eliminar ruido:
ruido modificar aquellos píxeles cuyo nivel
de intensidad es muy diferente del de sus vecinos.
 Realzar la imagen:
imagen aumentar las variaciones de
intensidad, allí donde se producen.
 Detectar bordes:
bordes detectar aquellos píxeles donde se
produce un cambio brusco en la función intensidad.
Tipos de ruidos
 Aditivo: El más usual es el gaussiano, que es esencialmente
aditivo y la señal independiente, g(z,y) = f(z,y) + n(z,y) donde
g(z,y) es el resultado de la distorsión de imagen original f(z,y)
por el ruido gaussiano aditivo n(z,y)
 Impulsivo: Frecuentemente los sensores generan ruido
impulsivo. Algunas veces el ruido generado por transmisión
digital (o incluso analógico) es impulsivo. Puede ser
modelado como: g(x,y)=(1-p)*f(x,y)+p*i(x,y) donde i(z, y) es el
ruido impulsivo y p pertenece a {0,1}.
 Multiplicativo: el ruido de aspecto granulado de las
imágenes de radares y ecografías. Es esencialmente
multiplicativo. Tiene un aspecto moteado. g (z, y) = f (z, y) *
m(x, y), donde m(z, y) es el ruido multiplicativo.
Comando Matlab:
J = IMNOISE(I,TYPE,...) Adisiona de los siguiente tipos:

'gaussian' Ruido Gausiano blanco con media y varianza


cosntante.

'localvar' Ruido Gausiano Blanco con media cer y


varianza.

'poisson' Ruido con distribución Poisson.

'salt & pepper' Cambia los pixeles a blanco o negro.

'speckle' Ruido Multiplicativo.


Ruido Gaussiano (I)
 El valor final del píxel es el real más una cierta cantidad de
error.
 Puede describirse como una variable gaussiana que sigue
una distribución normal.
• P(g(x,y)- < f(x,y) < g(x,y)+) = 70%
• P(g(x,y)-2 < f(x,y) < g(x,y)+2 ) = 90%
Ruido Gaussiano (II)

 Produce pequeñas variaciones en la imagen.


 Suele ser debido a los componentes
electrónicos (sensores, digitalizadores...)
 Espectro de energía constante para todas las
frecuencias:
 Afecta a la imagen completa.
 La intensidad de todos los píxeles se ve
alterada.
Ruido Gaussiano (III)

 Por ejemplo se suele asumir que en función del ruido


Gaussiano el valor de la media es cero m(µ) y con un
valor 0,01 de varianza.
 Se define ruido blanco como un proceso estocástico que
presenta media nula, varianza constante y covarianza
nula y si además la distribución es normal, se denomina
Ruido Blanco Gaussiano.
 Los comandos que se usan para invocar a la función son:

J= imnoise(I,‘gaussian’, m, v)
Ruido Gaussiano (IV)

Ejemplo:

original v=0,01 v=0,1


Ruido Gaussiano (V)

Influencia del ruido gausiano según la varianza:


Ruido Impulsionar:
“Sal y Pimienta” (I)
 El valor que toma el píxel no tiene relación con el valor
real sino que toma valores muy altos o muy bajos
 Toma el valor máximo (sal) o el mínimo (pimienta).
 En Matlab el comando es:
J= imnoise(I, ‘salt & pepper’,d)
 Añade el ruido a la imagen I donde d es la densidad del
ruido.
 Se afecta aproximadamente a los d*num(I) pixeles.
El valor de d por defecto es 0,05.
Ruido Impulsionar:
“Sal y Pimienta” (I)
Ejemplos con d=0.1 y d=0.3:
Ruido Impulsionar:
“Sal y Pimienta” (II)
Ejemplo:
Ruido Multiplicativo (I)

 La señal obtenida es fruto de la multiplicación de dos


señales.
 Se añade el ruido a la multiplicación de la imagen por
medio de la siguiente ecuación:
J=n*I
Donde n es de distribución uniforme de ruido aleatorio
con media 0 y con varianza v. El valor predeterminado
en Matlab es de v = 0,04.
 La sintaxis para invocar a la función es:
J= imnoise(I, ‘speckle’,v)
Ruido Uniforme (II)

Ejemplo multiplicativo:
Mejoramiento de la imagen:

 Con el objetivo de mejorar la imagen a través


de reducir o eliminar el ruido se suelen
aplicar filtros.
filtros
 La idea es aproximar el valor original del
pixel usando información de la propia imagen
o externa.
 Hay muchos tipos diferentes de filtros.
Tipos de Filtros:
Dominio Espacial
 Filtros de orden o Filtros de medias:
 Mediana  Lineales
• Media (paso bajo espacial)
 Moda • Media geométrica
 Máximos y mínimos • Media armónica
• Media contra-armónico
• De Gauss
o Promediado de imágenes  No lineales
• Outlier

Dominio Frecuencial
 Paso bajo  Paso banda
 Paso alto  Rechazo banda
Filtros del Domino Espacial
 Estos filtros consisten en modificar o mejorar
un pixel elegido en función de los valores de
un entorno o subconjunto de pixeles vecinos
a aquel.
Vecindades
Operaciones sobre vecindades:
Son aquellas que se realizan sobre bloques definidos
dentro de la imagen, en vez de procesar toda la imagen
Operaciones basadas
en vecindades (I)
Las operaciones se realizan de la siguiente forma:

1.- Se selecciona el píxel a procesar.


2.- Se selecciona el entorno del píxel.
3.- Se aplica una función que depende del valor
de los píxeles del entorno seleccionado.
4.- Se pone en la imagen de salida en la posición del
píxel seleccionado de la imagen de entrada, el
valor devuelto por la función.
5.- Repetir de 1 a 4 por cada píxel de la imagen de
entrada.
Operaciones basadas
en vecindades (II)
Solución: Relleno de píxeles
Imagen de salida
Imagen de entrada 1 2 3
1 ...
1 2 3 4 5
1 n ... 2 ...
1 2 3 4 5
2 ... 3 1 n ...
3 ... 2 ...
.
. 3 ...
. .
m ...
. .
m ...

Rellenar contorno sin alterar la imagen original:


máscara=
Función: imfilter (‘La_imagen.jpg’, máscara, relleno, salida) [0 0 0 0 0
00000
‘same’: Mismo tamaño imagen original 00100
‘full’: Tamaño resultante con relleno (mayor) 00000
0 0 0 0 0]
Operaciones basadas
en vecindades (III)
Relleno de una constante

f=
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
w=
[0 0 0 0 0
00000
00100
00000 >> imfilter(f,w,25,'full')
0 0 0 0 0]
Operaciones basadas
en vecindades (IV)
Relleno basado en réplica

f=
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
w=
[0 0 0 0 0
00000
00100
00000 >> imfilter(f,w,’replicate' ,'full')
0 0 0 0 0]
Operaciones basadas
en vecindades (V)
Relleno basado en espejo

f=
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
w=
[0 0 0 0 0
00000
00100
00000 >> imfilter(f,w,’ symmetric ‘,'full')
0 0 0 0 0]
Operaciones basadas
en vecindades (VI)
Tamaño imagen destino

f=
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1
-1 -2 -3 -2 -1
1 2 3 2 1 >> imfilter(f,w,0,’ full')
w=
[0 0 0 0 0
00000
00100
00000
0 0 0 0 0]
>> imfilter(f,w,0,’ same')
Filtros de orden:
Metodología:
 Definir tamaño de submatriz para actuar.
 Ordenar los elementos que engloban la submatriz.
 Aplicar el criterio correspondiente dependiendo del filtro.

Tipos de ventanas:
Preserva bordes Preserva bordes
Vert. y horizont. oblicuos
Filtros de orden:
 Debe fijarse un tamaño de vecindad.
 Puede ser rectangular o de cualquier otra forma, generalmente
cuadrado y número de elementos impar.
 Debe definirse la posición del pixel de estudio respecto a la
ventana, generalmente y por simetría el central.
 En una convolución las propiedades del filtro vienen dadas por los
coeficientes de la máscara.

Hay problemas de borde o contorno.


Duplicación periódica.
Duplicación del borde.
Puesta a cero del contorno.
Suprimir borde
Filtrado de la mediana (I)

Sustituye el valor del píxel estudiado, por la mediana de


los valores que engloba una ventana de selección dada.
 Ventajas
 Atenúa el ruido impulsionar (Sal y pimienta).
 Elimina efectos engañosos.
 Preserva bordes de la imagen.
 Inconvenientes
 Pierde detalles (Puntos, líneas finas).
 Redondea las esquinas de los objetos.
 Desplazamiento de los bordes.
Filtrado de la mediana (II)

menor mayor
Operaciones basadas
en vecindades (I)
Ejemplo: Mediana de una vecindad de 3x3
Imagen de entrada (I) Imagen de salida (I1)
0 10 10 6 3 0
6 14 10 10 4 3
11 14 15 10 5 3
11 16 17 20 6 3
11 15 16 6 4 2
11 20 15 10 5 4
11 13 10 5 3 2
13 16 6 2 2 2
11 16 7 3 4 2 6 7 4 3 2 2
6 4 4 2 3 2 0 4 3 3 2 0

Lo cual se realizaría con el siguiente programa Matlab


>> I1=medfilt2(I,[N M]); % Default 3x3
Filtrado de la mediana (III)
FILTRO DE LA MEDIANA PONDERADA:
 A menudo se ponderan mas ciertos valores de nivel
de gris que otros y eso se ve reflejado en unas
máscaras de ponderación.
 Por ejemplo, se le puede dar más importancia a los
píxeles centrales que al resto de la ventana.
 Una máscara de ponderación muy común es :

1 2 1
2 4 2
1 2 1
Filtrado de la mediana (IV)

3 35 12 1 2 1 3 70 12
X 2 4 2 = 12 100 45
6 25 45
15 17 22 1 2 1 15 34 22

3 12 12 15 22 34 45 70 100
Filtrado de la moda

Sustituye el píxel estudiado por el valor más


repetido que contiene la ventana de selección.
 Ventaja
 Atenúa el ruido impulsional (Sal y pimienta).
 Inconveniente
 Con frecuencia los valores de intensidad en
la vecindad son todos diferentes.
Máximos y mínimos (I)

Máximo: selecciona el mayor valor dentro de una


ventana ordenada de valores de nivel de gris.
 Ventaja
 Elimina el ruido pimienta (píxeles negros).
 Inconvenientes
 Sólo funciona cuando el ruido es tipo pimienta.
 Tiende a aclarar la imagen.
Operaciones basadas
en vecindades (II)
Ejemplo: Máximo de una vecindad de 3x3
Imagen de entrada (I) Imagen de salida (I1)
16 17 20 20 20 6
6 14 10 10 4 3
20 20 20 20 20 6
11 16 17 20 6 3
20 20 20 20 20 6
11 20 15 10 5 4
20 20 20 15 10 5
13 16 6 2 2 2
11 16 7 3 4 2 16 16 16 7 4 4
6 4 4 2 3 2 16 16 16 7 4 4

Lo cual se realizaría con el siguiente programa Matlab


>> f=inline('max(x(:))'); % Define función máxima
>> I1=nlfilter(I,[3, 3],f); % Devuelve máximo
Máximos y mínimos (II)

Mínimo: Selecciona el menor valor de dentro de


una ventana ordenada de valores de píxeles.
 Ventaja
 Elimina el ruido sal (píxeles blancos).
 Inconvenientes
 Sólo funciona cuando el ruido es tipo sal.
 Tiende a oscurecer la imagen.
Operaciones basadas
en vecindades (III)
Ejemplo: Mínimo de una vecindad de 3x3
Imagen de entrada (I) Imagen de salida (I1)

6 14 10 10 4 3 0 0 0 0 0 0
11 16 17 20 6 3 0 6 10 4 3 0
11 20 15 10 5 4 0 6 2 2 2 0
13 16 6 2 2 2 0 6 2 2 2 0
11 16 7 3 4 2 0 4 2 2 2 0
6 4 4 2 3 2 0 0 0 0 0 0

Lo cual se realizaría con el siguiente programa Matlab


>> f=inline('min(x(:))');
>> I1=nlfilter(I,[3, 3],f);
Máximos y mínimos (III)
Filtros de media Lineales (I)
Filtros de media Lineales (II)
Filtros de media Lineales (III)
Filtro media lineal
 Obtiene el valor promedio de los
pixeles. También se denomina
filtro de media.

 Su efecto es el difuminado o 1 1 1
suavizado de la imagen y se
aplica junto con el de mediana 1/9 * 1 1 1
para eliminar ruidos.
1 1 1
 Este filtro se puede implementar
con la siguiente máscara(kernel)
para un tamaño 3x3:

Esta configuración recibe el nombre de media aritmética


Filtro media aritmética
Ej. Filtro media aritmética
Filtros de media Lineales (V)

Paso bajo espaciales


 Se puede dar distintos pesos a los valores de los
píxeles
 Mayor peso al central. Máscara:

1 1 1
1/9 * 1 2 1
1 1 1
Filtros de media Lineales (V)

Paso bajo espaciales


 Mayor peso al píxel central que a sus vecinos, y a
los vecinos de tipo cuatro que a los de tipo 8.
Máscara:

1 b 1
1/9 *
b b2 b
1 b 1

Este filtro no logra eliminar el ruido impulsionar


Generación de Filtros en Matlab
h = fspecial(type)
h = fspecial(type, parameters)

Crea un filtro bidimensional h del tipo especificado.


Devuelve como un kernel de correlación, que es la forma adecuada para
usar con imfilter.
Filtros espaciales

Responden a la siguiente ecuación:


a b
g ( x, y)    w ( s, t ) f ( x  s, y  t )
s at b
donde:
f(x+s, y+t): Valor de los píxeles del bloque seleccionado
w(s, t): Coeficientes que se aplicarán al bloque (máscara)

Siendo la matriz del bloque:


m(filas) = 2a + 1
n(columnas) = 2b + 1
Filtros espaciales (II)
Concepto:
Son las operaciones que se realizan
directamente sobre los píxeles. Se define
una matriz de coeficientes del filtro (o
máscara, de tamaño mxn) los cuales
constituirán pesos ponderados por los que se
multiplicarán los valores originales de los
píxeles.
Filtros espaciales (III)
Valores de los píxeles del bloque

f(x-1, y-1) f(x-1, y) f(x-1, y+1)


f(x, y-1) f(x, y) f(x, y+1)
f(x+1, y-1) f(x+1, y) f(x+1, y+1)
Valores de los píxeles de los coeficientes (máscara)
w(-1, -1) w(-1, 0) w(-1, 1)
w(0, -1) w(0, 0) w(0, 1)
w(1, -1) w(1, 0) w(1, 1)

a b
g ( x, y)    w ( s, t ) f ( x  s, y  t )
s at b
Filtros espaciales (IV)

Ejemplo:
Valor de los píxeles
17 24 1 8 15
Máscara (o filtro)
23 5 7 14 16 8 1 6
4 6 13 20 22 3 5 7
10 12 19 21 3 4 9 2
11 18 25 2 9

a b
g ( x, y)    w ( s, t ) f ( x  s, y  t )
s at b

g(2,4)=1(8)+8(1)+15(6)+7(3)+14(5)+16(7)+13(4)+20(9)+22(2)=585
Filtros espaciales (V)

Pasos para la aplicación del filtro lineal:


1.- Definir la máscara
2.- Definir tipo de relleno
3.- Aplicar la ecuación:
a b
g ( x, y)    w ( s, t ) f ( x  s, y  t )
s at b

4.- Definir tamaño de la imagen de salida


Filtros espaciales (VI)
Ejemplos de filtros

Filtro promedio:

Filtro promedio ponderado:


Filtros espaciales (VII)
Ejemplo (usando Matlab):
% Imagen original
>> I=imread('tire.tif');

% Se define una matriz de pesos de valores iguales,


% a lo que se le denomina filtro promedio
>> w=ones(5,5)/25;

% Se aplica el filtro Original Resultado


>> I2=imfilter(I,w); >> I(1:5,1:5) >> I2(1:5,1:5)
ans = ans =
6 14 10 10 4 5 6 7 6 5
11 16 17 20 6 6 8 9 7 5
11 20 15 10 5 8 9 10 9 6
13 16 6 2 2 7 8 9 8 5
11 16 7 3 4 6 6 7 6 4
Filtro promedio

Es muy efectivo en remover ruido blanco


aditivo Gaussiano. Sin embargo, tiende a hacer
borrosos los bordes y los detalles de la imagen
(por ejemplo líneas) y degrada la calidad de la
imagen.
Filtros espaciales (VIII)

Original Con ruido


Filtros espaciales (IX)
Original
>> imhist(I) >> imhist(I2)

900
800
800
700
700
600
600
500
500

400
400

300 300

200 200

100 100

0 0

0 50 100 150 200 250 0 50 100 150 200 250


Filtros espaciales (X)
Formas de aplicar la máscara
Método de correlación: Se aplica la máscara tal y como se define.

Método de convolución: Se rota la máscara 180 grados alrededor


del píxel central, antes de aplicar el filtro.

Imagen
f= Máscara
00000 w=
00000 123
00100 456
00000 789
00000

>> imfilter(f,w,'corr') >> imfilter(f,w,'conv')


Filtro Laplaciano

Este tipo de filtro se basa en un operador


derivativo, por lo que acentúa las zonas que
tienen gran discontinuidad en la imagen

f ( x)
 f ( x  1)  f ( x)
x
Filtro Laplaciano (II)
f ( x)
Si se cumple:  f ( x  1)  f ( x)
x

 2 f ( x)
Entonces:  f ( x  1)  f ( x  1)  2 f ( x)
x 2

Si la función depende de dos variables

 2
f ( x , y )  2
f ( x, y )
 f ( x, y ) 
2

x 2
y 2
Filtro Laplaciano (III)
Función dependiente de dos variables
 2
f ( x , y )  2
f ( x, y )
 f ( x, y ) 
2

x 2
y 2
La derivada de segundo orden con respecto a al variable x:
 2 f ( x, y )
 f ( x  1, y )  f ( x  1, y )  2 f ( x, y )
x 2

De forma similar, con respecto a y:

 2 f ( x, y )
 f ( x, y  1)  f ( x, y  1)  2 f ( x, y )
y 2

Finalmente:
 2 f ( x, y )  f ( x  1, y )  f ( x  1, y )  2 f ( x, y )  f ( x, y  1)  f ( x, y  1)  2 f ( x, y )
Filtro Laplaciano (IV)
El Laplaciano queda definido por:
 2 f ( x, y )  f ( x  1, y )  f ( x  1, y )  f ( x, y  1)  f ( x, y  1)  4 f ( x, y )

La anterior expresión es equivalente a aplicar una


máscara definida por:

w=
0 1 0 a b
1 -4 1 g ( x, y)    w ( s, t ) f ( x  s, y  t )
s at b
0 1 0
Filtro Laplaciano (V)

% Imagen original
>> I=imread('moon.jpg' );
% Se define una matriz de pesos
>> w=[0, 1, 0; 1, -4, 1; 0, 1, 0];
% Se aplica el filtro
>> I2=imfilter(I,w);

Alternativa:
>> I=imread('moon.jpg ');
>> w=fspecial('laplacian',0);
>> I2=imfilter(I,w,'replicate');
Filtro Laplaciano (VI)

Imágenes: www.imageprecessingplace.com
Filtro Laplaciano (VII)
 2 f ( x, y )  f ( x  1, y )  f ( x  1, y )  f ( x, y  1)  f ( x, y  1)  4 f ( x, y )

Si se desea considerar las variaciones con respecto a la diagonal

w= w=
0 1 0
1 -4 1 1 1 1
0 1 0 1 -8 1
-4 1 1 1
+1 También se utiliza el negado de las anteriores máscaras

w= w=
-1 -1 -1 0 -1 0
-1 8 -1 -1 4 -1
-1 -1 -1 0 -1 0
Filtros Laplacianos
alternativos
Se emplea en pocas ocasiones en la práctica

Excesivamente sensible a la presencia de ruido


Da lugar a bordes dobles y no permite determinar
direcciones

Se utiliza para realzar una imagen

Sumar o restar el Laplaciano de la imagen dependiendo


del signo del coeficiente central de la máscara utilizada

Coeficiente central de la máscara negativo


Coeficiente central de la máscara positivo
Filtros Laplacianos
alternativos (II)
Resultado de sustraer el Laplaciano
(una única máscara)

Incluye
diagonal
MatLab: Resumen
Introducción de ruido:
 Gaussiano:
Gaussiano
 Ruidosa = imnoise(imagen,’gaussian’,”media”,”varianza”)

Por defecto: media=0 varianza=0.01


 Ruidosa = imnoise(imagen, 'localvar',”varianza”)

Por defecto: media=0 varianza=0.01


Permite definir la varianza de cada píxel por separado
 Impulsional:
Impulsional
 Ruidosa = imnoise(imagen, 'salt & pepper' ,”media”,”varianza”)

 Multiplicativo:
Multiplicativo
 Ruidosa = imnoise(imagen, 'speckle',”media”,”varianza”)
Matlab
Filtrado:
 Mediana:
 Filtrada = medfilt2(Imagen,[tamaño de ventana])
Por defecto: ventana = 3 x 3
 Máximo:
 Filtrada = ordfilt2 (Imagen,9,ones(tamaño de ventana))
 Mínimo:
 Filtrada = ordfilt2 (Imagen,1,ones(tamaño de ventana))
 Media aritmética:
 Filtrada = imfilter (Imagen,fspecial(‘average’,[tamaño de ventana]))
Por defecto: ventana = 3 x 3
 Gaussiano:
 Filtrada = imfilter (Imagen,fspecial(‘gaussian’,[tamaño de ventana],varianza))
Por defecto: ventana = 3 x 3
Generación de Filtros en Matlab
h = fspecial(type)
h = fspecial(type, parameters)

Crea un filtro bidimensional h del tipo especificado.


Devuelve como un kernel de correlación, que es la forma adecuada para
usar con imfilter.
Filtro Gaussiano (I)
La máscara o filtro que responde a:
 ( x 2  y 2 ) / 4 2
e
w( x, y )  a b

 e
s  a s b
 ( s 2  t 2 ) / 4 2

Siendo la matriz del bloque:


m(filas) = 2a + 1
n(columnas) = 2b + 1
ó
Filtro Gaussiano (II)

Influencia del parámetro 


Filtro Gaussiano (III)
Máscara a partir de función no lineal
Filtro que se aplica es lineal
0.25
%Define máscara
>> fspecial('gaussian',3,0.5)
0.2
ans =
0.0113 0.0838 0.0113
0.15
0.0838 0.6193 0.0838
0.0113 0.0838 0.0113
0.1

0.05
% Máscara y filtro
>> w=fspecial(‘gaussian',3,0.5);
0
-3 -2 -1 0 1 2 3 >> I2=imfilter(I,w,'replicate');

0.0478 0.1163 0.0478 a b


0.1163
0.0478
0.2829
0.1163
0.1163
0.0478
g ( x, y)    w ( s, t ) f ( x  s, y  t )
s at b
Laplaciana de la gausiana
Laplaciana de la gausiana (II)
>> w=fspecial('log',5,0.4)
ans =
0.2475 0.2475 0.2479 0.2475 0.2475
0.2475 0.3545 1.2336 0.3545 0.2475
0.2479 1.2336 -10.31 1.2336 0.2479
0.2475 0.3545 1.2336 0.3545 0.2475
0.2475 0.2475 0.2479 0.2475 0.2475
>>surf(w) >>surf(-w)
5 15

0 10

-5 5

-10 0

-15 -5
5 5
4 5 4 5
3 4 3 4
3 3
2 2 2 2
t 1 1 t 1 1
s s
Laplaciana de la gausiana (III)
Mejorando detalles del tipo de filtros
>> w=fspecial('log',5,0.4)
>> [x, y]=meshgrid(-2:1:2)
>> [xi, yi]=meshgrid(-2:.05:2);
>> zi = interp2(x,y,z,xi,yi);
>> surf(xi,yi,zi)

-5

-10

-15
5
4 5
3 4
3
2 2
t 1 1
s
Máscaras con fspecial
Disco

>> w = fspecial('disk',4)

Promedio

>> w = fspecial('average',5)
w=
0.0400 0.0400 0.0400 0.0400 0.0400
0.0400 0.0400 0.0400 0.0400 0.0400
0.0400 0.0400 0.0400 0.0400 0.0400
0.0400 0.0400 0.0400 0.0400 0.0400
0.0400 0.0400 0.0400 0.0400 0.0400
>> 1/25
ans =
0.0400
Ejemplo: Promedio
>> w=fspecial('average');
Imagen Original Resultado del Filtro
Máscaras con fspecial (II)
Gausiana Laplaciana de la gausiana
>>z = fspecial('gaussian',5,0.7) >> z = fspecial('log',5,0.7)
Ejemplo: Filtro Gaussiano

>> w=fspecial('gaussian');

Imagen Original Resultado del Filtro


Máscaras con fspecial (III)
Laplaciana Mejora de contraste
>>z = z = fspecial('laplacian',0.3) >> z = fspecial('unsharp',0.3)

>> fspecial('laplacian',0) >> fspecial('unsharp',0)


0 1 0 0 -1 0
1 -4 1 -1 5 -1
0 1 0 0 -1 0
Filtro para acentuar contraste
>> w=fspecial('unsharp');
Imagen Original Resultado del Filtro
Máscaras con fspecial (IV)
Acentuar transiciones horizontales y verticales
Prewit: Acentuar transiciones horizontales
Máscara: w =
[1 1 1
0 0 0
-1 -1 -1]

Sobel: Acentuar transiciones horizontales

Máscara: w =
[1 2 1
0 0 0
-1 -2 -1]
Acentuar transiciones verticales: Transpuesta de la matriz
Ejemplo: Filtro Prewit

>> w=fspecial('prewitt');
Imagen Original
Resultado del Filtro
Ejemplo: Filtro Sobel
>> w=fspecial('sobel');
>> hp=transp(w); % Acentúa vertical
Imagen Original Resultado del Filtro
Filtros no lineales
Filtro lineal
a b
g ( x, y)    w ( s, t ) f ( x  s, y  t )
s at b
Filtro no lineal
Valor de los píxeles
Bloque de píxeles
17 24 1 8 15
1 1 1
23 5 7 14 16
1 1 1
4 6 13 20 22 1 1 1
10 12 19 21 3
11 18 25 2 9 >>B = nlfilter(A, [m n], función_nl)

Aplicación Supresión de ruído


Ejemplo de aplicación
de filtro no lineal
Sea: -Sxy La región de la imagen
-(x,y) Centro de la región
- f’(x,y) La salida del filtro (escalar)
Filtro de Media aritmética

ˆf ( x, y )  1
 g ( s, t )
mn ( s ,t )S xy
A= B=
A = imread(‘imagen.jpg'); 1 2 3 1.3333 2.3333 1.7778
fun = @(x) mean(x(:)); 4 5 6 3.0000 5.0000 3.6667
B = nlfilter(A,[3 3],fun); 7 8 9 2.6667 4.3333 3.1111
Filtros no lineales (II)
Ejemplo de Filtro de Media aritmética
Imagen original Media aritmética
Filtros no lineales (III)
Filtro de Media geométrica
1
  mn
fˆ ( x, y )    g ( s, t )
( s ,t )S xy 

Filtro de Media armónica


mn
fˆ ( x, y ) 
1

( s ,t )S xy g ( s, t )

Función spfilt:
Gonzáles, R.; Woods, R.; Eddins, S.: Digital Image Processing Using Matlab. 2004
Filtros no lineales (IV)
Ejemplo de Filtro de Media geométrica
(I2=spfilt(I, 'gmean', 3, 3);)
Imagen original Media geométrica
Filtros no lineales (V)
Ejemplo de Filtro de Media armónica
>> I2=uint8(3*3./imfilter(1./I, ones(3, 3), 'symmetric'))
Media harmónico
Imagen original
Filtros no lineales (VI)
Filtro de Media Contra-armónica
 g ( s ,
( s ,t )S xy
t ) Q 1

fˆ ( x, y ) 
 g ( s ,
( s ,t )S xy
t ) Q

Filtro de Punto medio


ˆf ( x, y )  1 max{g ( s, t )}  min{g ( s, t )}
2
Filtros no lineales (VII)
Ejemplo de Filtro de Media Contra-armónica
(I2=spfilt(I, 'chmean‘,3, 3);)
Imagen original Media contraharmónico
Filtros no lineales (VIII)
Ejemplo de Filtro de Punto medio
>> d1=ordfilt2(I, 1, ones(3, 3), 'symmetric'); % Mínimo
>> d2=ordfilt2(I, 3*3, ones(3, 3), 'symmetric'); % Máximo
>> I1=uint8(1/2*(d2+d1));
Imagen original Punto medio
¿Cuál filtro utilizar?
Verificar como se difuminan los bordes después de aplicar el filtro
>>I=imread('contornos.tif');
% Se determinan los bordes verticales
>> II=edge(I, 'sobel', 'vertical'); imshow(II)
¿Cuál filtro utilizar? (II)
% Se aplica ruido a la imagen
>> III=imnoise(I,'salt & pepper',0.005);
% Se aplica el filtro mediana y se detectan bordes verticales
>> IV=medfilt2(III);
>> V=edge(IV, 'sobel', 'vertical'); imshow(V)
¿Cuál filtro utilizar? (III)
% Se aplica el filtro promedio y se detectan bordes verticales
>>w=fspecial('average');
>>VI=uint8(imfilter(III, w, 'symmetric'));
>> VII=edge(VI, 'sobel', 'vertical'); imshow(VII)
% Se aplica el filtro media armónica y se detectan bordes verticales
>> VIII=uint8(3*3./imfilter(1./III, ones(3, 3), 'symmetric'));
>>IX=edge(VIII, 'sobel', 'vertical'); imshow(IX)
Resultado
% Se aplica el filtro punto medio
%y se detectan bordes verticales
>> d1=ordfilt2(III, 1, ones(3, 3), 'symmetric');
Calidad por siguiente orden:
>> d2=ordfilt2(III, 3*3, ones(3, 3), 'symmetric'); Mediana
>> X=uint8(1/2*(d2+d1)); Promedio
>>XI=edge(X, 'sobel', 'vertical'); imshow(XI)
Punto medio
Media armónica

Frente a ruido:
Sal y Pimienta

También podría gustarte