sábado, 9 de febrero de 2013

Deconvolucióname esa miopía.

Como todo el mundo sabe, cuando se lanzó el telescopio Hubble tenía un defecto en el espejo. Algo que posteriormente se solucionó con lo que la prensa denominó unas "gafas", es decir, un conjunto de espejos accesorios que contrarrestaban los errores del espejo principal.

Pero eso no quiere decir que mientras tanto el Hubble no estuviera operativo. Algo que es menos conocido es que las imágenes con aberración se procesaron con programas que eran capaces de reconstruir, con bastante precisión, la imagen real.

La técnica usada se denomina deconvolución que, como su nombre indica, es una forma de deshacer el efecto de una  convolución.

La convolución se suele definir en términos de integrales del producto de dos funciones cualesquiera; sin embargo, en la práctica, las dos funciones suelen ser distintas cualitativamente. Una suele ser una señal y la otra una "máscara". En el caso que nos ocupa (imágenes), un caso típico de convolución podría ser sustituir cada píxel de una imagen con la media de ese píxel y los ocho que lo rodean. En ese caso, una de las funciones es la propia imagen, la otra un cuadrado formado por nueve píxeles y el resultado de la convolución, un simple suavizado.

Por supuesto, la convolución no tiene por qué ser un suavizado/desenfocado, pero en este artículo voy a suponer que sí.

Como vemos, la convolución descrita más arriba es una operación lineal, que puede expresarse como el producto de una matriz por un vector que representa a la imagen:

\begin{aligned} b=Ax \end{aligned}

En ese caso, \(b\) representa la imagen desenfocada y \(x\) la imagen original.

En principio parece posible obtener la imagen original a partir de la desenfocada simplemente haciendo:

\begin{aligned} x=A^{-1}b \end{aligned}

En realidad, las cosas no son tan sencillas porque la matriz \(A\) es singular, sin embargo es posible convertirla en no singular haciendo ciertas suposiciones sobre el comportamiento de la imagen en los contornos.

Esto último es mucho más sencillo en el caso de imágenes del espacio ya que éstas tienen una estructura más o menos conocida (puntos luminosos sobre negro).


Hasta aquí nada realmente nuevo. Cualquiera con interés puede echarle un vistazo al paquete de procesado de señal de Matlab.

Lo que quiero contar en esta entrada es otra cosa. Hace tiempo tuve la idea de que quizás fuese posible hacer lo contrario, es decir, aplicar una deconvolución a una imagen y luego aplicarle una convolución para recuperar la imagen original.

En principio, no existe ningún problema y estoy seguro de que aquellos que tengan Matlab (yo no) pueden probarlo fácilmente. Lo interesante de mi idea es que la parte de la convolución la harían mis propios ojos con la ayuda de unas pocas dioptrías.

Uno de los problemas de esto es que al deconvolucionar una imagen enfocada obtenemos otra "imagen" que incluye números negativos. Puesto que no parece posible hacer una imagen real con intensidades negativas (quizás con láseres...), es necesario desplazar las intensidades "hacia arriba", de forma que todos los valores sean positivos. Eso implica que la imagen final no va a tener negros bien definidos.

Hoy, finalmente, creí haber encontrado en Google un artículo sobre el tema. Resultó ser una inocentada (el artículo trata de unas gafas virtuales); pero creo que las imágenes que usan son reales. Aquí están:


Lo llamo "Bodegón deconvolucionado"


Lenna

No se ven perfectas, pero a cierta distancia y sin gafas, las veo muchísimo mejor que con gafas. Evidentemente, es necesario probar con diferentes tamaños de imagen y distancias.

Ahora sólo falta mejorarlo un poco y podré volver a ver la tele sin gafas.