29 votos

Cómo recuperar una imagen desenfocada

Si los objetivos de una cámara no están bien ajustados, el sujeto previsto estará "desenfocado" en la imagen resultante. En este caso no parece haber pérdida de información. Los fotones sólo se dirigen al elemento del CCD equivocado. Si conociéramos la especificación y la configuración exactas de las lentes, ¿sería posible aplicar una tranformación a la imagen para ver el sujeto enfocado?

Los filtros de nitidez se utilizan a menudo para mejorar las imágenes "desenfocadas", pero sospecho que se podría obtener un resultado mucho mejor si se tuviera en cuenta la física de la óptica.

34voto

CuriousOne Puntos 8519

Por desgracia, hay una pérdida de información en las imágenes físicas, es decir, en las imágenes con una relación señal/ruido finita por píxel. Una lente desenfocada actúa como una transformación lineal, es decir, una matriz entre la imagen ideal enfocada y la imagen real. Para invertir esa transformación hay que calcular la inversa de la matriz. Dependiendo de la gravedad del desenfoque, esa inversa puede no existir o puede, si existe, amplificar mucho el ruido y los errores de muestreo en la imagen resultante. Imaginemos la peor matriz de desenfoque de una imagen de dos píxeles:

$\begin{bmatrix}0.5&0.5\\0.5&0.5\end{bmatrix}$

Esta matriz es singular y no se puede invertir en absoluto.

Tomemos un caso menos grave (20% de desenfoque), ahora la matriz es

$\begin{bmatrix}0.8&0.2\\0.2&0.8\end{bmatrix}$

y la inversa es:

$\begin{bmatrix}4/3&-1/3\\-1/3&4/3\end{bmatrix}$

Hay dos problemas con éste: debido a los coeficientes negativos en la inversa puede terminar con valores de píxeles negativos en la imagen reconstruida, lo que no es físico. En segundo lugar, los elementos diagonales son mayores que uno, lo que amplifica el ruido.

Dicho esto, se pueden conseguir resultados notables si la imagen resultante tiene una relación señal/ruido muy alta y si la transformación inversa puede reconstruirse con gran precisión.

Si te interesa este tema, te animo a que hagas tus propios experimentos con algunas matrices para hacerte una idea de lo que ocurre. Lo ideal es que el desenfoque de la imagen sea un fenómeno local, es decir, que podamos limitarnos a las zonas de una imagen que sólo tienen unos pocos (quizá 2-5) píxeles de ancho. Esto reduce el problema a matrices pequeñas. Wolfram Alpha puede hacer la inversión de la matriz por ti, así que no tienes que configurar ningún paquete matemático (aunque numpy es fácil de usar, si sabes Python).

En cuanto al aspecto experimental, la forma adecuada de calibrar una lente requiere producir una serie de imágenes de prueba de alto contraste de agujeros de alfiler (funciones delta) para recuperar la matriz de desenfoque directamente o, incluso mejor, utilizar patrones de rayas de alta frecuencia para medir el desenfoque en el dominio de Fourier.

8voto

Fabrice NEYRET Puntos 1697

Desenfocar es convolucionar la imagen con un filtro de paso bajo (eso es lo que hace el sistema óptico a la señal de origen aquí). Si las frecuencias altas se distorsionan, no se puede esperar recuperarlas por simple álgebra, ya que significaría dividir por cero en el dominio espectral. (las frecuencias altas del filtro son cero en el mundo real, porque las colas gaussianas o de Bessel serían demasiado bajas para hacer un bit de nivel de gris).

Aun así, hoy en día hay soluciones para eso, por muy poco intuitivas que sean. Consisten en utilizar "lentes malas" hechas a propósito para que la transformada de Fourier del "filtro bluring" contenga las altas frecuencias -y, de hecho, sea densa en el dominio de Fourier- , de modo que se pueda invertirlas (es decir, procesar una "desconvolución"). La palabra clave es " apertura codificada ", y se aplica a muchos casos similares (profundidad de campo, desenfoque de movimiento, etc.). Varios documentos del grupo de gráficos del MIT desarrolló esto.

Aparte de esto: Obsérvese también que bajo algunas hipótesis regularizadoras, a veces se pueden recuperar también las altas frecuencias si se tienen múltiples imágenes (con ángulos de visión variables). Básicamente, así es como tomografía funciona.

6voto

riddler Puntos 141

Esto debería ayudar: http://yuzhikov.com/articles/BlurredImagesRestoration1.htm

Es capaz de calcular/aproximar el núcleo y también hay código para implementarlo que podría traducirse a Python.

Una deconvolución más precisa, la "deconvolución ciega", se consigue mediante un método ajustado iterativamente con un filtro de Wiener que se utiliza para tener en cuenta la aleatoriedad del ruido en la imagen.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X