BlurResolve
    Corrector Sobre nosotros Cómo funciona Privacidad Preocupaciones de privacidad
    Volver al Inicio

    Cómo funciona

    Más detalles sobre cuál es el problema y cómo la herramienta arregla tu imagen.

    Comprender el origen del problema

    Empecemos por una situación en la que todo está bien. Para cada punto de la "fuente de luz", la lente lo enfoca en un único punto del sensor de la cámara de tu dispositivo. La imagen de abajo presenta tal situación. A la derecha de la imagen hay una pantalla negra con un único punto de luz nítido.

    Source of light Lens Camerasensor Image "in-focus"point of light Tomar una foto en caso de "enfoque"

    Ahora veamos qué ocurre en caso de desenfoque. En ese caso, la lente de la cámara está en la posición incorrecta y la luz entrante, en lugar de un único punto, se dispersa alrededor del punto principal. A la derecha de la imagen hay una pantalla negra con un punto resplandeciente. En lugar de un solo punto, tenemos la misma cantidad de luz dispersa alrededor.

    Source of light Lens Camerasensor Image out of focusfor point source of light Tomar una foto en caso de "desenfoque"

    Un problema similar ocurre cuando una imagen se distorsiona por el movimiento: movimiento de los objetos o de la cámara al tomar la foto. En lugar de un único punto de enfoque, obtenemos una línea de luz.

    Resumen del proceso de deconvolución

    Lo bueno es que existen métodos capaces de reproducir una imagen "nítida" a partir de una versión desenfocada. Uno de esos métodos es la deconvolución de Richardson–Lucy. Es un algoritmo iterativo que utiliza la Función de Dispersión de Punto (PSF) para restaurar la versión original de una imagen. ¿Qué es la PSF? Esta función indica cómo se distorsiona cada píxel. Si miras el punto anterior, sería la "imagen de fondo negro" de las fotos de arriba.

    La deconvolución es el proceso en un bucle de retroalimentación que "adivina" la imagen original y luego perfecciona esa suposición a lo largo de varios pasos:

    • 1. Estimación inicial: Comienza con una estimación aproximada de la imagen original (a menudo solo la imagen borrosa en sí o un campo gris plano).
    • 2. Proyección directa: Toma la suposición actual y vuelve a "desenfocarla" utilizando la PSF conocida. Esto simula cómo debería verse la imagen si la suposición actual fuera correcta.
    • 3. Comparación: Compara esta versión re-desenfocada con la imagen observada (borrosa) real dividiendo una por la otra. Esto crea un "factor de corrección" para cada píxel.
    • 4. Retroproyección: Aplica ese factor de corrección de vuelta a la suposición actual. Básicamente dice: "En las áreas donde la imagen re-desenfocada era demasiado tenue comparada con la real, aumenta el brillo de la suposición; donde era demasiado brillante, disminúyelo".
    • 5. Repetir: Utiliza esta suposición actualizada como punto de partida para la siguiente ronda. Cada iteración suele hacer la imagen más nítida y restaura más detalles.

    Más información

    Estimando el tamaño del desenfoque para el punto de partida

    Un paso bastante importante es la estimación inicial de la función PSF. Las buenas estimaciones aceleran todo el proceso. ¿Cómo se hace aquí? Bueno, utilicé el mismo método que se usa para "detectar" si una imagen está desenfocada: calculando la desviación estándar de la transformación laplaciana de una imagen.

    En el primer paso se realiza una transformación laplaciana discreta. Esto genera una imagen en "blanco y negro" marcando todos los bordes. Si la imagen es nítida, hay muchos bordes entre áreas sin bordes. En el caso de imágenes desenfocadas, casi no hay bordes nítidos, sino una transición suave de un color a otro.

    A continuación, los píxeles de la imagen en "blanco y negro" se tratan como un conjunto de píxeles y se calcula la desviación estándar. Esto da un número que indica cuán uniforme es la imagen. Si el valor es alto, significa que la imagen tiene muchos cambios bruscos. Si es bajo, la imagen es bastante uniforme y está más bien "borrosa". El mismo método es utilizado por muchos software para detectar si una imagen es nítida o borrosa.

    El último paso es generar una función PSF que coincida con el valor de la desviación estándar. Esto fue algo complejo y requirió experimentación. Finalmente, parece que para valores específicos de desviación estándar se asignan funciones PSF adecuadas. Una nota importante: las funciones PSF generadas tienen forma gaussiana (un único punto con brillo máximo que se atenúa lentamente hasta el negro). Una PSF así preparada funciona bien como punto de partida para el algoritmo.

    Más información

    Algunas notas técnicas

    • Uso de GPU: Muchos cálculos de imagen son bastante costosos, pero utilizan operaciones similares para muchos píxeles. Esto se puede acelerar fácilmente usando la Unidad de Procesamiento Gráfico del dispositivo. Se accede a ella a través de la tecnología WebGL integrada en el navegador y se hace automáticamente mediante la librería gpu.js.
    • La lectura y el guardado de la imagen se realizan automáticamente mediante la API JS Canvas.
    • Aviso: Una vez que la aplicación se carga, puede funcionar sin conexión. Así que cuando cargues la página principal con el área para soltar imágenes, puedes usarla incluso si no tienes conexión a Internet. Prueba a procesar imágenes cuando estés en modo offline ;) . Toda la página/aplicación aún no es totalmente offline, pero planeo hacerlo.