Procesamiento Lineal de Imágenes

Anuncio
n
CAPITULO
6
Procesamiento Lineal de Imágenes
El procesamiento lineal de imágenes está basado en las mismas dos técnicas que el DSP convencional: la
convolución y el Análisis de Fourier. La convolución es la más importante de las dos, ya que las imágenes
tienen su información codificada en el dominio del espacio en lugar del dominio de frecuencias. El filtrado lineal
puede mejorar las imágenes de muchas formas: resaltar los bordes de los objetos, reducir el ruido aleatorio,
corregir la iluminación despareja, deconvolución para corregir el enfoque y el movimiento de fotos, etc. Estos
procedimientos son llevados a cabo convolucionando la imagen original con un kernel de un filtro apropiado,
produciendo la imagen filtrada. Un problema serio con la convolución de imágenes es el enorme numero de
cálculos que necesita para ser llevada a cabo, llevando el tiempo necesario para realizarse a niveles inaceptables.
Este capítulo presenta estrategias para diseñar kernels de filtros utilizables para varios propósitos en
procesamiento de imágenes. Dos importantes técnicas para reducir el tiempo de ejecución serán descriptas:
convolución por separabilidad y convolución por FFT.
Convolución
La convolución de imágenes trabaja del mismo modo que la convolución en una dimensión. Las
imágenes pueden ser vistas como la suma de impulsos escalados y desplazados. Como los sistemas
lineales son caracterizados por su respuesta al impulso, como se ha de esperar, la imagen de salida de
un sistema LTI es igual a la imagen de entrada convolucionada con la respuesta al impulso del sistema.
La función δ en dos dimensiones, es una imagen compuesta por todos ceros excepto por un único pixel
en la columna cero y en la línea cero, que tiene el valor de uno. Por ahora, asumimos que los índices de
columna y línea pueden tener ambos valores positivos y negativos, entonces el uno está centrado en una
infinidad de ceros. Cuando la función δ es pasada por un sistema lineal, el punto distinto de cero es
cambiado por otro patrón de pixeles. Como lo único que le puede suceder a un punto es que se
disperse, la respuesta al impulso es también llamada función de dispersión de punto (PSF) en la jerga
del procesamiento de imágenes.
La figura (6-1) muestra algunas de las PSFs más comunes. En la figura (6-1.a) se muestra el pillbox,
que es similar a un cilindro. Por ejemplo, si los lentes de una cámara están fuera de foco, cada punto en
la imagen se proyectará como una mancha circular en el sensor óptico. En otras palabras, el pillbox es
la PSF de un lente fuera de foco.
La gaussiana, mostrada en la parte (b), es la PSF de sistemas de imágenes limitados por
imperfecciones aleatorias, como ser la imagen de un telescopio queda borrosa por la turbulencia
atmosférica, causando que cada punto de luz se transforme en una gaussiana en la imagen final.
El pillbox y la gaussiana se comportan en las imágenes como filtros pasa-bajos por como se comportan
en el dominio de frecuencia, y son llamados filtros suavizantes, por su acción en el dominio espacial. La
PSF cuadrada, mostrada en (c), también puede ser usada como un filtro suavizante, pero no es
circularmente simétrica. Esto resulta en que la imagen se borronea en forma diferente en las direcciones
diagonales, comparado con las verticales y horizontales. Esto puede ser o no importante dependiendo
del uso.
47
Figura 6-1
El opuesto a un filtro suavizante es un resaltador de bordes o filtro pasa altos. La técnica de inversión
de espectros es usada para cambiar entre estos. Esta técnica se puede explicar fácilmente de la siguiente
forma: Si tenemos un filtro pasa-bajos y queremos obtener un filtro pasa-altos, tenemos que restarle a
la señal original, la obtenida al filtrarla con el filtro pasa-bajos. Esto no es mas que convolucionarla con
una PSF formada por un impulso unitario (que no hace mas que devolvernos la señal original) restado
con la PSF del filtro pasa-bajos. La figura (6-2) nos muestra gráficamente este proceso para una
dimensión, pudiéndose extender fácilmente a dos o mas dimensiones. Como se ilustra en (6-1.d), el
filtro resaltador de bordes está formado tomando la PSF del filtro suavizante cambiada de signo y
sumada a una función delta en el centro. La figura (e) muestra una función senc en dos dimensiones. El
procesamiento de señales en dos dimensiones usa estas funciones para separar bandas de frecuencia.
Como las imágenes no tienen su información codificada en el dominio de la frecuencia, la función senc
es muy poco usada como una PSF de un filtro, aunque tiene varias aplicaciones en problemas teóricos.
48
Figura 6-2
Es muy común, llamar “kernel” a la función respuesta al impulso de un filtro de una dimensión o al
PSF de un filtro de imagen. Todos los kernels mostrados en la figura (6-1) usan índices negativos en
las filas y columnas, permitiendo que las PSF se puedan centrar en el punto [0,0]. Los índices
negativos son eliminados en las señales de una dimensión desplazando el kernel a la derecha, de forma
que todas las muestras distintas de cero tengan índice positivo. Este desplazamiento es de igual
magnitud en la señal de salida, y generalmente no es de importancia. En comparación, un
desplazamiento entre la imagen de entrada y de salida no es aceptable. Es por esto, que los índices
negativos son una norma en los kernels de procesamiento de imágenes.
Un problema con la convolución de imágenes es que requiere de un gran número de cálculos, por
ejemplo, cuando una imagen de 512 x 512 pixeles es convolucionada con una PSF de 64 x 64 pixeles,
se necesitan más de mil millones de multiplicaciones y sumas (64x64x512x512 = 230). Los largos
tiempos de ejecución pueden hacer estas técnicas impracticables. Tres aproximaciones son usadas para
hacer más rápidos estos cálculos.
La primer estrategia es usar una PSF muy chica, solo de 3 x 3 pixeles. La convolución se lleva a cabo
recorriendo cada pixel en la imagen de salida, usando un código optimizado para multiplicar y
acumular los correspondientes nueve pixeles de la imagen de entrada. Resultados sorprendentes pueden
ser logrados con una PSF de solo 3 x 3, ya que es lo suficientemente grande como para afectar los
bordes en una imagen.
La segunda estrategia es usada cuando se necesita una PSF grande, pero su forma no es muy
importante. Esta requiere un kernel que sea separable, una propiedad que permite llevar a cabo la
convolución de imágenes como series de convoluciones en una dimensión. Esto puede mejorar el
tiempo de ejecución cientos de veces.
La tercer estrategia es la convolución por FFT, usada cuando el kernel del filtro es grande y tiene una
forma específica. Aun con las mejoras de velocidad ganadas con una muy eficiente FFT, el tiempo de
ejecución no será muy corto. A continuación vamos a detallar estas tres estrategias, con ejemplos de
cómo son usadas en el procesamiento de imágenes.
Cálculo de la convolución
La convolución en dos dimensiones es muy similar a la de una dimensión. En forma matemática,
podemos definir la convolución y[r,c], de una señal x[r,c] con una señal h[r,c] (de M x M pixeles),
como:
y[r , c] =
M −1 M −1
∑∑ x[r − k, c − j] ⋅ h[k, j]
(ec.1)
k = 0 j= 0
49
Es decir, cada pixel de la imagen de entrada contribuye con una versión escalada y desplazada de la
PSF a la imagen de salida, que es la suma de estas contribuciones, de forma muy similar a lo que ocurre
con la convolución en una dimensión vista en el capítulo 3. La figura (6-3) muestra este proceso; la
contribución a la imagen de salida del punto ubicado en las coordenadas [r,c] de la imagen de entrada.
La PSF es desplazada de manera que el pixel [0,0] de la PSF concuerde con el pixel [r,c] en la imagen
de salida. Si la PSF está definida solo con índices positivos, como en este ejemplo, la PSF desplazada
tendrá las coordenadas [r,c] en su esquina superior izquierda.
Figura 6-3
Modificación de bordes con kernels de 3x3
La figura (6-4) muestra algunas operaciones con kernels de 3x3. La parte (a) es una imagen captada
por un escáner de rayos X, de los utilizados para el equipaje en un aeropuerto. Cuando esta imagen es
convolucionada con una función delta de 3x3 (un uno rodeado por ocho ceros), la imagen permanece
inalterada. Esto no es interesante por si mismo, pero es la base de los kernels de otros filtros.
La figura (6-4.b) muestra una imagen convolucionada con un kernel de 3x3 que consiste en un 1, un -1
y 7 ceros. Esta es llamada operación de desplazamiento y sustracción, porque una versión desplazada
de la imagen (correspondiente al -1) es restada de la imagen original (correspondiente al 1). Este
proceso produce la ilusión de que algunos objetos están mas cerca o mas lejos que el fondo, logrando
un efecto tridimensional. El cerebro interpreta las imágenes como si la luz viniera de arriba de la forma
en que se presenta en la vida cotidiana. Si los bordes de un objeto están mas claros en la parte superior
y oscuros en la inferior el objeto es percibido como levantado del fondo. Para ver otro efecto
interesante, rote la figura 180 grados y los objetos parecerán incrustados en el fondo.
La figura (c) muestra una PSF de detección de bordes y la imagen resultante. Todos los bordes de la
imagen original son transformados en finas bandas oscuras y claras que se extienden paralelamente al
borde original. Pasar esta imagen a blanco y negro (sin grises) distingue las bandas claras u oscuras,
dándonos un algoritmo muy simple para detectar bordes.
50
Figura 6-4
Una técnica muy común se muestra en (d): el resaltado de bordes. En (a) los objetos tienen buen
contraste (un nivel apropiado de oscuridad y claridad) pero bordes borrosos. En (c), los objetos no
tienen absolutamente ningún contraste, pero tienen bordes bien definidos. La estrategia es multiplicar la
imagen con buenos bordes por una constante, k, y sumársela a la imagen con buen contraste. Esto es
equivalente a convolucionar la imagen original con la PSF mostrada en (d). Si k es igual a cero, la PSF
se convierte en una función delta y la imagen no cambia. Al aumentar k, la imagen muestra mejor
definición de bordes. Para la imagen en (d), se uso un valor de k=2: dos partes de la imagen (c) para
una parte de la imagen (a). Esta operación imita la habilidad del ojo de resaltar los bordes, permitiendo
separar los objetos más fácil del fondo.
Convolucionar por alguna de estas PSF puede resultar en valores negativos de pixeles apareciendo en la
imagen final. Aún cuando el programa pueda manejar valores negativos de pixeles la imagen no los
puede mostrar. La forma más común de solucionar esto es sumar una constante a cada pixel calculado,
como se hizo en estas imágenes. Otra forma es eliminar los valores fuera del rango.
51
Convolución por separabilidad
Esta es una técnica de convolución rápida aplicable solo si la PSF es separable. Una PSF es separable
si se la puede descomponer en dos señales de una dimensión: Una proyección vertical y una horizontal.
La figura (6-5) muestra un ejemplo de una imagen separable, la PSF cuadrada. Específicamente, el
valor de cada pixel en la imagen es igual al punto correspondiente a la proyección horizontal
multiplicado por el punto correspondiente en la proyección vertical. En forma matemática:
x[r , c] = vert[ r ] × horz[c]
(ec.6-1)
donde x[r,c] es la imagen bidimensional, y vert[r] y horz[c] son las proyecciones unidimensionales.
Obviamente, la mayoría de las imágenes no satisfacen estos requerimientos. Por ejemplo el pillbox no
es separable. En cambio, hay una infinidad de imágenes separables. Esto se puede entender generando
proyecciones horizontales y verticales arbitrarias, y encontrando la imagen que corresponde a ellas. La
figura (6-6) ilustra esto con perfiles que son exponenciales de dos lados. La imagen que corresponde a
estos perfiles es luego hallada con la ecuación (6-1). Cuando es mostrada, la imagen parece un
diamante que decae exponencialmente a cero al aumentar la distancia desde el origen.
Figura 6-5
En la mayoría de las tareas de procesamiento de imágenes, la PSF ideal es circularmente simétrica,
como el pillbox. Aun cuando las imágenes digitalizadas son normalmente guardadas y procesadas en
formato rectangular de filas y columnas, se desea modificar la imagen de igual forma en todas las
direcciones. La única PSF que es circularmente simétrica y separable, es la gaussiana. Como se muestra
en la figura (6-7), una imagen de una gaussiana bidimensional tiene proyecciones que también son
gaussianas.
52
Figura 6-6
Para convolucionar una imagen con un kernel separable, hay que convolucionar cada fila de la imagen
con la proyección horizontal, resultando en una imagen intermedia. Luego se convoluciona cada
columna de esta imagen intermedia con la proyección vertical de la PSF. La imagen resultante es
idéntica a la convolución directa de la imagen original con el kernel del filtro. Los mismos resultados se
obtienen convolucionando primero las columnas y luego las filas.
Figura 6-7
53
Esta forma de calcular la convolución se puede demostrar fácilmente, de la siguiente forma:
La convolución de una imagen x[r,c] con un PSF h[r,c] de N1 x N2 pixeles, esta dada por,
y[r , c] =
N1 N 2
∑∑ x[r − k, c − j] ⋅ h[k, j]
j=0 k =0
Como x[r , c] = vert[ r ] × horz[c] , podemos expresar la ecuación anterior de la siguiente forma:
y[r , c] =
N1 N 2
∑∑ x[r − k, c − j] ⋅ vert[k] ⋅ horz[ j]
j=0 k = 0
=
 N2

 x[ r − k, c − j] ⋅ vert[k ] ⋅ horz[ j]

j=0 
 k =0
N1
∑∑
Que es lo mismo que convolucionar todas las columnas con la señal unidimensional vert[r], y luego
todas las filas con la señal horz[c]
La convolución de una imagen de N x N con un kernel de M x M requiere un tiempo proporcional a
N2M2, en otras palabras, cada pixel de la imagen de salida depende de todos los pixel del kernel del
filtro. En comparación la convolución por separabilidad solo requiere un tiempo proporcional a N2M.
Para kernels que tienen cientos de pixeles de ancho, esta técnica reduce el tiempo de ejecución en
factores de cien.
Ejemplo de uso de un PSF grande: mejora en la iluminación
Una aplicación común que requiere el uso de un PSF grande es el mejoramiento de imágenes con
iluminación desequilibrada. La convolución por separabilidad es un algoritmo ideal para llevar a cabo
este proceso. Salvo algunas excepciones, las imágenes vistas por el ojo están formadas por luz
reflejada. Esto significa que una imagen vista, es igual a la reflectancia de los objetos multiplicada por
la iluminación ambiental. La figura (6-8) muestra este principio. La figura (6-8.a) representa la
reflectancia de una escena observada, en este caso una serie de bandas claras y oscuras. La figura (68.b) ilustra un ejemplo de una señal de iluminación, el patrón de luz que incide en (a). Como en el
mundo real, la iluminación varía lentamente sobre el área de la imagen. La figura (6-8.c) es la imagen
vista por el ojo, igual a la imagen de reflectancia, (a), multiplicada por la imagen de iluminación, (b).
Las regiones de iluminación pobre son difíciles de ver en (c) por dos razones: son muy oscuras y su
contraste es muy bajo (la diferencia entre los picos y los valles).
Para entender como esto se relaciona con problemas de la vida diaria, imagine que está mirando a dos
hombres idénticamente vestidos. Uno de los hombres está parado bajo la luz del sol, mientras el otro
está parado bajo la sombra de un árbol cercano. La proporción de luz incidente reflejada por parte de
cada hombre es la misma. Por ejemplo, sus caras pueden reflejar el 80% de la luz incidente, sus remeras
grises 40% y sus pantalones oscuros 5%. El problema es, que la iluminación de los dos es, digamos,
diez veces distinta. Esto hace que la imagen del hombre en la sombra sea diez veces más oscura que la
persona bajo la luz del sol, y el contraste (entre la cara, la remera y los pantalones) diez veces menos.
El objetivo de este proceso es equilibrar la componente de iluminación de la imagen obtenida. En otras
palabras, queremos que la imagen final represente la reflectancia de los objetos, no las condiciones de
iluminación. En términos de la figura (6-8), dado (c), encontrar (a). Este es un problema de filtro no
lineal, porque las componentes de las imágenes son combinadas por multiplicación, no suma. Mientras
esta separación no se puede llevar a cabo perfectamente, las mejoras pueden ser muy buenas.
54
Figura 6-8
Para empezar, vamos a convolucionar la imagen (c) con un PSF grande, un quinto del tamaño de la
imagen entera. El objetivo es eliminar los detalles de las formas en (c), resultando en una aproximación
de la señal de iluminación original, (b). Aquí es donde la convolución por separabilidad es usada. La
forma exacta de la PSF no es importante, solo que sea mucho más ancha que las formas en la imagen
original. La figura (d) es el resultado usando una gaussiana como kernel.
Como el filtro suavizante nos da una imagen de iluminación estimada, vamos a usar un filtro resaltador
de bordes para encontrar la imagen de reflectancia. Esto es, la imagen (c) va a ser convolucionada con
un kernel consistente en una función delta menos una gaussiana. Para reducir el tiempo de ejecución,
esto es hecho restando la imagen suavizada en (d) de la imagen original en (c). La figura (e) muestra el
resultado. Pero no resulta, mientras las áreas oscuras fueron correctamente aclaradas, el contraste en
estas áreas es aún muy malo.
Los resultados del filtrado lineal son muy pobres en esta aplicación porque las señales de reflectancia e
iluminación fueron inicialmente originadas por multiplicación, no por adición. El filtrado lineal no
puede separar correctamente señales combinadas por una operación no lineal. Para separar estas
señales, estas deben ser “desmultiplicadas”. En otras palabras, la imagen original debe ser dividida por
la imagen suavizada, como se muestra en (f). Esto corrige el brillo y restaura el contraste al nivel
correcto.
Este procedimiento de dividir las imágenes está relacionado con el procesamiento homomórfico, que es
una forma de manejar señales combinadas por una operación no lineal. La estrategia es cambiar un
problema no lineal a uno lineal, a través de operaciones matemáticas apropiadas. Cuando dos señales
55
son combinadas mediante multiplicación, el procesamiento homomórfico empieza tomando el
logaritmo de las señales adquiridas. Con la identidad log( a × b) = log( a ) + log( b) , el problema de
separar las señales multiplicadas es un problema de separar señales sumadas. Por ejemplo, después de
tomar el logaritmo de la imagen en (c), un filtro pasa-altos lineal puede ser usado para separar el
logaritmo de la imagen de reflectancia. Como antes, la forma más rápida de llevar a cabo el filtro pasa
altos es sustrayendo a la imagen la versión suavizada de esta. El antilogaritmo (exponencial) es usado
luego para deshacer el logaritmo, resultando en la aproximación deseada de la reflectancia original.
¿Qué es mejor, dividir o ir por el camino homomórfico? son casi lo mismo, porque tomar un logaritmo
y restar es equivalente a dividir. La única diferencia es la aproximación deseada para la imagen de
iluminación. Un método usa la versión suavizada de la imagen adquirida, mientras que el otro usa una
versión suavizada del logaritmo de la imagen obtenida.
Otro uso interesante del procesamiento homomórfico ocurre en fotografía. La densidad (oscuridad) del
negativo es igual al logaritmo del brillo de la fotografía final. Esto significa que cualquier manipulación
del negativo durante la etapa de desarrollo es un tipo de procesamiento homomórfico.
Como se mencionó en el capítulo 3, cuando una señal de N puntos es convolucionada con un kernel de
M puntos, la señal resultante tiene N + M – 1 puntos de largo. De forma similar, cuando una imagen de
M x M es convolucionada con un kernel de N x N, el resultado es una imagen de (N+M–1) x (N+M–
1). El problema es que muchas veces es difícil manejar el cambio del tamaño de la imagen. La salida
más común es ignorarlo. Si comenzamos con una imagen de 512x512 terminamos con una imagen del
mismo tamaño. Los pixeles que no entran en los límites originales son desechados.
Mientras esto mantiene la imagen del mismo tamaño, no soluciona todo el problema; aun queda la
condición de bordes de la convolución. Por ejemplo, imagine tratar de calcular el pixel de la esquina
superior derecha de (d). Esto es hecho centrando la PSF gaussiana en la esquina superior derecha de
(c). Cada pixel en (c) es multiplicado por el correspondiente pixel de la PSF, y los productos, sumados.
El problema es, tres cuartos de la PSF se encuentran afuera de la imagen definida. La aproximación
mas fácil es asignarle a los pixeles indefinidos el valor cero. Así es como (d) fue creada tomando en
cuenta la banda oscura alrededor del perímetro de la imagen. Esto es, el brillo decrece suavemente al
valor del pixel cero, exterior a la imagen definida.
Afortunadamente esta región oscura alrededor del borde puede ser corregida (aunque no lo fue en este
ejemplo). Esto es hecho dividiendo cada pixel en (d) por un factor de corrección. El factor de corrección
es la fracción de la PSF que fue inmersa en la imagen de entrada cuando el pixel fue calculado. Por
ejemplo, el pixel de la esquina superior derecha en (c) proviene de solo el 25% de la PSF superpuesta
con la imagen original. Entonces, corregimos este pixel en (d), dividiéndolo por un factor de 0,25. Esto
significa que los pixeles en el centro de (d) no serán cambiados, pero los pixeles oscuros a lo largo del
perímetro serán aclarados. Para encontrar los factores de corrección, imagine convolucionar el kernel
con una imagen con todos los pixeles iguales a 1. Los pixeles en la imagen resultante son los factores
de corrección necesitados para eliminar el efecto del borde.
Análisis de imágenes por Fourier
El análisis de Fourier es usado en el procesamiento de imágenes de la misma forma que con las señales
de una dimensión. Como las imágenes no tienen su información codificada en el dominio de frecuencias
hacen las técnicas mucho menos útiles. Por ejemplo, cuando se toma la transformada de Fourier de una
señal de audio, la confusa onda del dominio del tiempo es convertida en un espectro fácil de entender en
el dominio de frecuencias. En comparación, tomar la transformada de Fourier de una imagen convierte
la información ordenada del dominio espacial a una forma desordenada en el dominio de la frecuencia.
En pocas palabras, no espere que la transformada de Fourier lo ayude a entender la información
guardada en las imágenes.
56
Del mismo modo, no se puede utilizar el dominio de frecuencias para diseñar filtros. La característica
básica de una imagen son los bordes, la línea que separa un objeto o región de otro objeto o región,
como un borde está compuesto por un amplio rango de componentes de frecuencia, tratar de modificar
una imagen manipulando el espectro de frecuencia generalmente no es productivo. Los filtros de
imágenes son normalmente diseñados en el dominio espacial, donde la información está guardada en la
forma más simple. Piense en términos de operaciones para suavizar y resaltar bordes (dominio
espacial) en vez de filtros pasa-altos y pasa-bajos (dominio de frecuencia).
A pesar de esto, el análisis de imágenes por Fourier tiene propiedades muy útiles. Por ejemplo,
convolución en el dominio espacial corresponde a multiplicación en el dominio de frecuencia. Tal como
en el caso de señales unidimensionales, esta propiedad nos permite usar la convolución por FFT y
varias técnicas de deconvolución. Otra propiedad útil del dominio de frecuencias, es el teorema de las
rebanadas de Fourier, la relación entre una imagen y sus proyecciones (la imagen vista desde los lados),
esta es la base de la tomografía computada.
El espectro de frecuencia de una imagen puede ser calculado de varias formas, pero el método por FFT
presentado aquí es el único aplicable en la practica. La imagen original debe ser descompuesta en N
filas y N columnas, donde N es una potencia de 2 (256, 512, etc.). Si el tamaño de la imagen original no
es una potencia de 2, pixeles con un valor de cero deben ser agregados hasta hacerla del tamaño
correcto. Vamos a llamar array real al array que guarda la información de la imagen. Además se
necesita otro array del mismo tamaño, que llamaremos array imaginario.
La transformada discreta de Fourier en dos dimensiones es una simple extensión de la DFT
unidimensional, y para una imagen dada por x[r,c] de Nf x Nc, se la puede definir como:
X[ r, c] =
N f −1 N c −1
∑ ∑ x[k, j] ⋅ e
k =0
=
− i ( j⋅c )( 2 π / N c )
j=0
N f −1  N c −1
∑  ∑ x[k, j] ⋅ e
− i ( j⋅c )( 2 π / N c )
 j= 0
= DFTf [DFTc [x[ k, j]]]
k =0
⋅ e − i ( k ⋅r )(2 π / N f )
 −i ( k ⋅ r )( 2 π / N )
f
⋅e

Siendo DFTf la transformada de las filas, y DFTc la de las columnas.
Para su aplicación mediante FFT, generalmente se toma Nf = Nc = N, siendo N una potencia de dos. El
cálculo de la transformada de Fourier de una imagen es muy simple: calcular la FFT unidimensional de
cada fila, seguido de la FFT de cada columna. Específicamente, comenzamos tomando la FFT de los
valores de los N pixeles de la fila 0 de el array real. La parte real de la FFT es guardada en la misma
fila del array real y la parte imaginaria en la misma fila del array imaginario. Luego de repetir este
procedimiento en las filas 1 hasta N-1, tanto el array imaginario como el real contienen una imagen
intermedia. Luego el procedimiento es repetido en cada una de las columnas de esta imagen intermedia.
Se toman los valores de los N pixeles de la columna cero del array real y los valores de los N pixeles de
la columna cero del array imaginario, y se calcula la FFT. La parte real de la FFT de salida es ubicada
en la columna cero del array real mientras que la parte imaginaria de la FFT de salida es guardada en la
columna cero del array imaginario. Luego esto es repetido en las columnas 1 hasta N-1, ambos arrays
han sido sobrescritos con el espectro de frecuencia de la imagen.
Como las direcciones vertical y horizontal son equivalentes en una imagen, este algoritmo puede
llevarse a cabo transformando primero las columnas y luego las filas. Sin importar el orden usado, el
resultado es el mismo. De la forma en que la FFT trata los datos, las amplitudes de las componentes de
frecuencias bajas se ubican en las esquinas del espectro bidimensional, mientras que las frecuencias
altas se encuentran en el centro. La transformada inversa de una imagen es calculada tomando la FFT
inversa de cada fila seguido de la FFT inversa de cada columna (o viceversa).
57
La figura (6-9) muestra un ejemplo de la transformada de Fourier de una imagen. La figura (a) es la
imagen original, una vista microscópica de la etapa de entrada de un amplificador operacional 741. La
figura (b) muestra la parte real e imaginaria del espectro de esta imagen. Ya que el dominio de la
frecuencia puede contener valores de pixeles negativos, los colores son tratados de forma que los
valores negativos son oscuros, el cero es gris y los positivos son claros. Las componentes de baja
frecuencia en la imagen son normalmente mucho mas grandes en amplitud que las componentes de alta
frecuencia. Esto se ve en las cuatro esquinas de (b). Las imágenes típicas no tienen un orden discernible
y parecen aleatorias.
Figura 6-9
Como se muestra en (c), la forma polar del espectro de una imagen es solo un poco mas fácil de
58
entender. Las bajas frecuencias en la magnitud tienen altos valores positivos (las esquinas blancas),
mientras que las altas frecuencias tienen pequeños valores positivos (el centro negro). La fase es igual
para las altas y bajas frecuencias pareciendo variar aleatoriamente entre -π y π radianes.
La figura (d) muestra una forma alternativa de mostrar el espectro de una imagen. Como el dominio
espacial contiene una señal discreta, el dominio de frecuencia es periódico. En otras palabras, los array
del dominio de frecuencia son duplicados un número infinito de veces hacia la izquierda, derecha,
arriba y abajo. Por ejemplo, imagine una pared de azulejos, con cada azulejo igual a la imagen de
magnitud de N x N mostrada en (c). La figura (d) es también una sección de N x N de esta pared de
azulejos pero ocupa 4 azulejos. El centro de la imagen es la intersección de los cuatro azulejos. En otras
palabras, (c) es la misma imagen que (d) excepto que fue desplazada N/2 pixeles horizontalmente (a la
derecha o izquierda) y N/2 pixeles verticalmente (arriba o abajo) en el espectro periódico de
frecuencias. Esto da los pixeles claros en las cuatro esquinas de (c) y juntos en el centro de (d).
La figura (6-10) muestra como está organizado el dominio de frecuencias bidimensional (con las
frecuencias bajas situadas en las esquinas). La fila y columna N/2 parten el espectro de frecuencias en 4
cuadrantes. Para la parte real y la magnitud, el cuadrante superior derecho es una imagen reflejada del
inferior izquierdo, y el superior izquierdo es una imagen reflejada del inferior derecho. Esta simetría
también se mantiene en la parte imaginaria y en la fase, excepto que los valores de los pixeles
reflejados son opuestos en signo. En otras palabras, cada punto en el dominio de frecuencias tiene otro
punto ubicado simétricamente en el otro lado del centro de la imagen (columna N/2 y fila N/2). Uno de
los puntos es la frecuencia positiva mientras que el otro es la correspondiente frecuencia negativa,
como se vio en el capítulo 4 para señales de una dimensión. En forma de ecuación esta simetría se
expresa como:
Re{X[r , c]} = Re{X[ N − r, N − c]}
Im{X[r , c]} = − Im{X[ N − r , N − c]}
Estas ecuaciones nos muestran que el espectro de frecuencias es periódico repitiéndose cada N
muestras con índices desde cero hasta N-1. En otras palabras X[r,N] podría ser interpretado como
X[r,0], X[N,c] como X[0,c] y X[N,N] como X[0,0]. Esta simetría hace que cuatro puntos del espectro
se correspondan con si mismos. Estos puntos están ubicados en: [0,0], [0,N/2], [N/2,0] y [N/2,N/2].
Cada par de puntos en el dominio de frecuencias corresponde a una senoidal en el dominio espacial. El
valor en [0,0] corresponde a la senoide de frecuencia cero en el dominio espacial, es decir, la
componente continua de una imagen. Como se muestra en (a) y (b), otros pares de puntos corresponden
a senoides bidimensionales de otras frecuencias. Las senoides unidimensionales tienen frecuencia, fase
y amplitud. Las senoides bidimensionales también tienen una dirección.
59
Figura 6-10
La frecuencia y dirección de cada senoidal está determinada por la ubicación del par de puntos en el
dominio de frecuencia. Como se muestra, al dibujar una línea desde cada punto hacia la ubicación de la
frecuencia cero de la esquina exterior del cuadrante en que se encuentra el punto (indicado por círculos
en esta figura), su dirección determina la dirección espacial de la senoidal, mientras que su largo es
proporcional a la frecuencia de la onda. Esto resulta en bajas frecuencias ubicadas cerca de las esquinas
y altas frecuencias cerca del centro.
Cuando el espectro es graficado con la frecuencia cero en el centro (figura (6-10.d)) la línea desde cada
par de puntos está dibujada hacia el valor de la frecuencia cero en el centro de la imagen ([N/2,N/2]).
Esta organización es más simple de entender y de trabajar, porque todas las líneas son dibujadas hacia
el mismo punto. Otra ventaja de ubicar el cero en el centro es que concuerda con el espectro de
frecuencias de las imágenes continuas. Cuando el dominio espacial es continuo, el dominio de
frecuencias es aperiódico. Esto ubica la frecuencia cero en el centro, aumentando las frecuencias a
medida que nos alejamos de este punto hacia el infinito. En general, el espectro de frecuencias de las
imágenes discretas es graficado con la frecuencia cero en el centro, cuando la gente va a mirar los datos,
en libros artículos o documentación de algoritmos, aunque, la mayoría de los cálculos son realizados
guardando los datos en los arrays de la otra forma (frecuencias bajas en las esquinas). Esto es porque la
FFT tiene este formato.
Aún con la FFT, el tiempo requerido para calcular la transformada de Fourier es un tremendo cuello de
botella en el procesamiento de imágenes. Por ejemplo, la transformada de Fourier de una imagen de
512 x 512 requiere de algunos segundos en una PC. Esto es cientos de veces más lento que lo requerido
para el procesamiento de imágenes en tiempo real, 30 fotogramas por segundo. Estos largos tiempo
procesamiento resultan de la masiva cantidad de información contenida en las imágenes.
Convolución por FFT
Aunque la transformada de Fourier es lenta, es la forma más rápida de convolucionar una imagen con
un kernel grande. Por ejemplo, convolucionar una imagen de 512 x 512 con una PSF de 50 x 50 es
60
aproximadamente 20 veces más rápido usando FFT que usando la convolución convencional. En el
capítulo anterior vimos como trabaja la convolución por FFT para señales en una dimensión. La
versión bidimensional es una simple extensión.
Mostraremos la FFT con un ejemplo, un algoritmo para localizar un patrón predeterminado en una
imagen. Supongamos que construimos un sistema para inspeccionar billetes de 10 pesos. Como se
muestra en la figura (6-11), se toma una imagen de 256 x 256 pixeles del billete, centrada en el retrato
de Manuel Belgrano. El objetivo es verificar si en esta imagen se encuentra un patrón conocido, por
ejemplo una imagen de 64 x 64 pixeles del rostro. El problema es el siguiente: dada una imagen
adquirida y un patrón conocido, cual es la forma más efectiva de localizar dónde (o si) el patrón
aparece en la imagen. La solución a este problema es la correlación, vista en el capítulo 3, y puede ser
implementada usando convolución.
Figura 6-11
Antes de realizar la convolución hay dos modificaciones que realizarle a la imagen objetivo (el patrón
buscado) antes de convertirla en la PSF. Estas están ilustradas en la figura (6-12). La parte (a) muestra
la señal objetivo. En (b), la imagen ha sido rotada 180°. Como vimos en el capítulo 3, para realizar la
correlación usando convolución, la señal objetivo necesita ser invertida para contrarrestar la inversión
que ocurre durante la convolución.
Figura 6-12
La segunda modificación es un truco para mejorar la efectividad del algoritmo. En vez de tratar de
detectar la cara en la imagen original, es mas efectivo detectar los bordes de la cara en los bordes de la
imagen original. Esto es porque los bordes están mas marcados que las formas originales, haciendo que
la correlación tenga un pico más alto. Este paso no es obligatorio, pero hace que los resultados sean
significativamente mejores. En la forma más simple, un kernel de 3 x 3 de un filtro de detección de
bordes, es aplicado tanto a la imagen original como a la imagen objetivo antes de que la correlación sea
llevada a cabo. De la propiedad asociativa de la convolución, esto es lo mismo que aplicar el filtro de
detección de bordes a la señal objetivo dos veces y dejar la imagen original intacta. En la práctica,
aplicar el filtro de detección de bordes solo una vez generalmente es suficiente. Así es como (b) es
convertida a (c) en la figura (6-12). Esto hace que (c) sea la PSF a usar en la convolución.
61
La figura (6-13) muestra los detalles de la convolución por FFT. En este ejemplo convolucionamos la
imagen (a) con la imagen (b) para producir la imagen (c). El hecho de que estas imágenes hayan sido
elegidas y preprocesadas para implementar la correlación es irrelevante; esto es un diagrama de flujo de
la convolución. El primer paso es rellenar con ceros las imágenes a convolucionar hasta que sus lados
tengan tantos pixeles como la potencia de 2 más cercana a su tamaño original, debiendo quedar ambas
del mismo tamaño. Por ejemplo cuando convolucionamos las imágenes de 256 x 256 y 64 x 64 la
imagen resultante será de 256 x 256 pixeles. Así, las señales deben ser rellenadas con ceros hasta que
su tamaño sea de 256 x 256 (en este ejemplo, una de ellas ya tiene ese tamaño).
Figura 6-13
El algoritmo de FFT es usado para transformar (a) y (b) al dominio de las frecuencias. Esto resulta en
cuatro arrays de 256 x 256, las partes real e imaginaria de cada imagen transformada. Multiplicando las
62
partes real e imaginaria de (a) x (b), genera las partes real e imaginarias de (c). El algoritmo se
completa realizando la transformada inversa, que produce la imagen final convolucionada.
El valor de cada pixel en la imagen de la correlación nos da una medida de cuan parecida es la imagen
objetivo con la imagen adquirida en ese punto. En este ejemplo particular, la imagen de correlación en
(c) está compuesta de ruido más un solo pico de claridad, indicando una buena concordancia con la
señal objetivo. Simplemente localizando el pixel más claro en la imagen, obtenemos las coordenadas
del patrón detectado. Si no hubiéramos utilizado el filtro de detección de bordes en la señal objetivo, el
pico estaría aun presente, pero con mucho menos intensidad.
Mientras que la correlación es una herramienta muy potente en el procesamiento de imágenes, tiene una
limitación significativa: la imagen objetivo tiene que ser exactamente del mismo tamaño y orientación
rotacional que la correspondiente área en la imagen buscada. Ruidos y otras variaciones en la amplitud
de cada pixel son relativamente irrelevantes, pero es indispensable una concordancia exacta en el
espacio. Una mejora es correlacionar la imagen muchas veces con varias formas y rotaciones diferentes
de la imagen objetivo. En principio esto funciona pero los tiempos de ejecución pueden hacernos perder
el interés.
Figura 6-14
La convolución por FFT nos devuelve la misma imagen de salida que la convolución convencional.
Aunque los algoritmos son más complicados, la convolución por FFT es muy conveniente para PSFs de
tamaños relativamente grandes. La figura (6-14) compara los tiempos de ejecución de la convolución
realizada de la forma convencional usando punto flotante (PF), usando enteros (Ent), y mediante la
FFT usando punto flotante (FFT). Se muestran los datos de dos tamaños de imágenes diferentes, 512 x
512 y 128 x 128.
63
Primero notemos que el tiempo de ejecución requerido para la convolución por FFT no depende del
tamaño del kernel, resultando en líneas horizontales en el gráfico. En un Pentium MMX 233 MHz, una
imagen de 128 x 128 puede ser convolucionada en menos de medio segundo, mientras que una imagen
de 512 x 512 requiere más de 7 segundos.
El tiempo de ejecución para la convolución convencional es muy dependiente del tamaño del kernel
usado. Como se muestra en el gráfico de la figura (6-14), la convolución por FFT es más rápida que la
convolución convencional usando números con punto flotante si el kernel tiene más que 10 x 10
pixeles. En la mayoría de los casos, se pueden utilizar enteros para realizar la convolución
convencional. En este caso, esta diferencia se aumenta a 30 x 30 pixeles.
Aplicación de la deconvolución
Un método para mejorar imágenes que han sido obtenidas en forma imperfecta es deconvolucionarlas
con PSFs determinadas. Por ejemplo, una foto movida puede ser considerada como la misma foto
sacada correctamente y luego convolucionada con una PSF que le agregó el movimiento, puede ser
mejorada deconvolucionándola con esta PSF. En este caso el problema radica en encontrar la dirección
exacta y magnitud del movimiento.
Otro posible uso de la deconvolución es el de enfocar imágenes fuera de foco. Idealmente deberíamos
deconvolucionar con una Pillbox, pero en la práctica no siempre se obtienen resultados favorables, y
nos vemos obligados a utilizar algoritmos más complejos.
En la actualidad se encuentran disponibles numerosas técnicas para encontrar la PSF a usar para la
deconvolución (muchos utilizan algoritmos recursivos), que obtienen resultados bastante buenos. En la
NASA se realizan intensivas investigaciones sobre este tipo de técnicas, ya que son de gran utilidad en
la recuperación de imágenes deterioradas por un sistema que no funciona bien, como es el caso del
telescopio espacial Hubble.
Nuestra proyección de este trabajo es continuar con la investigación en restauración de imágenes,
utilizando estos métodos más modernos y efectivos. Debido a la falta de material disponible en el área
de procesamiento digital de imágenes, no hemos podido incorporar y aplicar estos conocimientos al
presente trabajo.♦
64
Descargar