TÉCNICAS DE FILTRADO
Los filtros son operaciones que se aplican a
los píxeles de una imagen digital para mejorarla, resaltar cierta
información, o conseguir un efecto especial. Algunos son complejos,
y es lógico que el usuario de a pie se limite a probarlos y a utilizarlos
en función del efecto observado, pero muchos filtros básicos
se basan en una lógica simple. Adentrándonos en élla
es mucho más fácil encontrar la solución más
efectiva y apropiada a cada necesidad.
Mejora global y local
Ya he mencionado un par de veces la diferencia entre dos tipos de técnicas
de mejora de la imagen: la mejora global, en la que cada píxel
se procesa con independencia de su posición y atendiendo solamente
a su valor, y las de mejora local, en las que influye el valor de los
píxeles vecinos, y por tanto dos píxeles equivalentes en
distintas zonas pueden dar dos resultados diferentes.
En general, las técnicas de mejora global son
las relacionadas con el histograma. Se utilizan para cambiar toda la imagen,
o bien una parte, pero esta parte no es una zona en el sentido espacial,
sinó el conjunto de píxeles que poseen ciertos valores de
densidad. El funcionamiento de la mayoría de éllas las hemos
descrito en los artículos sobre Niveles y Curvas,
en especial los Ejemplos prácticos. A nivel de programación
consisten en establecer una LUT o tabla de consulta que relacione cada
valor de la imagen de entrada con un valor de salida. Esta LUT (Look-Up
Table) puede aparecer de dos maneras: en forma de función
de transformación continua (tal como se maneja en la herramienta
Curvas), o como un listado o índice de pares de valores correspondientes.
Tabla
de correspondencias en forma de función continua (izquierda),
y de índice (derecha).
Dominio espacial y frecuencial
En la mejora local las técnicas de procesamiento de punto o de
convolución pueden operar sobre la imagen tanto en el dominio espacial
como en el de la frecuencia. De hecho, en muchos casos hay manera de actuar
en cualquiera de los dos campos. En el espacial se calcula sobre los propios
valores de los píxeles, y en el frecuencial se traducen primero
a un mapa de frecuencias mediante una transformada de tipo Fourier.
De esta forma es posible aplicar filtros típicos
del tratamiento de señales eléctricas como los de Paso bajo,
Paso alto o Paso banda. El primero limita o elimina las altas frecuencias,
el segundo las bajas y el tercero ambas, es decir, limita el rango posible
al intervalo entre un valor mínimo y otro máximo.
Las altas frecuencias corresponden en la imagen a cambios
bruscos de densidad, y las bajas frecuencias a cambios suaves, por lo
que el filtro Paso bajo consigue reducir el ruído suavizando las
transiciones, mientras que Paso alto refuerza los contrastes.
Arriba,
filtros típicos en el dominio de frecuencias.
Abajo, variaciones producidas en el dominio espacial.
Pero el tema central de este artículo es el filtrado
espacial que se realiza definiendo un entorno con los vecinos de un píxel
central. Este entorno se denomina ventana, máscara o matriz de
convolución, y suele ser cuadrado o rectangular, aunque es posible
definir otras formas rómbicas, circulares, etc.
A cada posición en la ventana se le asigna un
peso o participación en el cálculo que dará el nuevo
valor para el píxel central. Entonces se va desplazando la máscara
centrándola en cada uno de los píxeles de la imagen. Al
recorrido completo es a lo que denominamos filtrado, y los sucesivos resultados,
siempre a partir de los valores originales, forman la nueva imagen. Es
obvio que en los bordes y esquinas la ecuación varía, ya
que parte de la máscara se pierde.
Dos campos típicos en los que centraremos esta
exposición, son los de desenfoque mediante promedios y la detección
de bordes.
Técnicas de promediado
Seguramente el ejemplo más simple de máscara de filtrado
es la que promedia un entorno de 3x3 píxeles. Se suman los 9 valores
y se divide por 9. El peso de cada valor inicial es 1/9 del resultado.
Los filtros más simples de desenfoque emplean estas máscaras,
produciendo un efecto similar a los de Paso bajo. De hecho se les llama
filtros de Paso bajo espacial.
Promediado
homogéneo con una máscara de 3x3 píxeles.
Cuanto más grande sea el entorno abarcado -5x5,
7x7, 9x9-, más se difuminan los detalles de la imagen, ya que cada
vez habrá más proporción de valores idénticos
dentro de dos máscaras contiguas. Pero se difumina enseguida la
información de la imagen.
Desenfoque
con máscaras de 3x3 y de 5x5 píxeles
Se controla mucho mejor el alcance del desenfoque con
una matriz donde los pesos disminuyen con la distancia al píxel
central. Es lo que se denomina promediado ponderado.
La disminución se puede calcular en forma de campana
gaussiana, en base a una ecuación en la que el valor de la varianza
determina el número de píxeles a tener en cuenta. Eso es
lo que manejamos como valor radio en los filtros de desenfoque gaussiano,
con tan buenos resultados.
Máscara
de convolución gaussiana de 7x7 píxeles.
El promedio tiene el inconveniente de desdibujar bordes
y formas. Para evitarlo se emplean técnicas de promediado
selectivo. Por ejemplo, se pueden calcular las cuatro medias
proporcionales entre los dos vecinos laterales, los dos verticales, los
dos en un sentido diagonal y los del sentido inverso, y elegir el más
cercano al valor original del píxel.
En ciertos casos es más efectivo el cálculo
de la Mediana. No es propiamente una convolución,
sinó un criterio tan simple como seleccionar de la máscara
el valor medio de los existentes. Se asemeja en esto a los filtros Máximo
y Mínimo. Máximo consiste en asignar
al píxel de referencia el valor más alto de los encontrados
en la máscara, por lo que su efecto es ensanchar las zonas claras
y adelgazar las oscuras. Mínimo hace
justo lo contrario, seleccionando el valor más bajo.
La mediana de un conjunto de valores discretos es tal
que hay igual número de valores por debajo y por encima. Para entenderlo:
Una secuencia de valores 3, 2, 4, 8, 3, 12, 3, se ordena así: 2,
3, 3, 3, 4, 8, 12, el promedio es 5, el valor central es 4, pero la mediana
es 3, porque es el valor que tiene el píxel del medio de la fila.
De
arriba a abajo, imagen afectada en un 10% por ruído de
puntos blancos, filtrada con promedio y con mediana de
radio 1
o 3x3 píxeles (zoom 200%).
Detección de bordes
Se utilizan diferentes patrones, que resaltan los cambios bruscos de nivel.
Estos patrones, llamados operadores, son unidireccionales, aunque se pueden
combinar en una convolución múltiple.
Las
dos máscaras de la izquierda rastrean las
diferencias de
píxeles contiguos por filas y por columnas.
Las de la derecha
comparan píxeles separados.
Con máscaras pequeñas, se pueden definir
ocho direcciones, que se indican como puntos cardinales:
Operadores
de Kirsch para ocho direcciones.
Nótese en el gráfico cómo los pesos
positivos igualan a los negativos. Si los valores positivos y negativos
de los píxeles también se igualasen, el resultado sería
cero, por eso en muchos filtros de detección de bordes vemos en
tonos muy oscuros las regiones homogéneas.
Los operadores de gradiente por filas y por columnas
que vimos localizan bien los cambios de tono, pero son excesivamente sensibles
al ruído, al igual que el operador de Roberts, que rastrea en diagonal.
Esto se debe a que son muy pocos los valores a calcular.
Los operadores de Sobel, Prewitt o Frei-Chen lo evitan extendiendo el
gradiente de píxeles separados de forma que participen los píxeles
en diagonal.
De
izquierda a derecha, operador en diagonal de Roberts
y operadores
de fila de Prewitt, Sobel y Frei-Chen.
El operador Prewitt les da el mismo peso que a los contiguos
al píxel central. El de Sobel duplica estos últimos teniendo
en cuenta que son más próximos al píxel central,
y el de Frei-Chen afina más para darles el peso correcto raíz
de 2. De todos modos las diferencias visuales son tan sutiles que en la
práctica se usan los dos primeros.
De
arriba a abajo, detección de bordes con operadores Sobel
O, N y SE.
La característica común a todos los filtros
de detección de diferencias es la combinación de pesos
positivos con negativos. Así, una versión espacial simple
de un filtro de paso alto la darían máscaras como estas:
A
la izquierda, se combinan los gradientes de filas y columnas.
A la derecha, también los gradientes diagonales.
Son muy efectivos para acentuar el contraste y detectar
puntos aislados, o pequeños detalles, si se aumenta el tamaño
de la máscara. Con igual razonamiento se pueden diseñar
máscaras que detecten la presencia de líneas finas.
Detección
de líneas horizontales y verticales.
En la próxima entrega veremos cómo sacar
partido a estas ideas creando filtros personalizados.
|