Como se menciona en las otras respuestas, la difracción ha llevado a la falta de nitidez. Para poner esto a prueba, uno puede intentar enfocar la imagen usando la deconvolución usando la función de dispersión de puntos que corresponde a F / 29. Para difracción, tenemos (hasta una normalización general)
P (s) = {J 1 [π rs / ( λF )] / [π rs / ( λF )]} 2
donde J 1 es la función de Bessel del primer tipo de orden 1 ,
s es la distancia en la imagen medida en píxeles,
r es el tamaño de un píxel (normalmente unos 4,2 * 10 ^ (- 6) metros para sensores de recorte),
λ es la longitud de onda de la luz, y
F el número F, en este caso 29.
Esto es cierto para la luz monocromática, para aproximar la función de dispersión de puntos para los canales de color que podemos promediar en un rango apropiado de longitudes de onda. Además, uno debe integrar P (s) sobre el área del píxel especificado por s.
Si compilamos funciones de dispersión de 3 puntos para los 3 canales de color de esta manera, podemos enfocar la imagen transformándola en un espacio de color lineal y aplicando un algoritmo de deconvolución y luego transformándolo nuevamente a sRGB. Obtuve el siguiente resultado:
Por lo tanto, la cara se ha agudizado significativamente utilizando solo los datos sobre el número F y la suposición sobre el tamaño del píxel. Los artefactos de bandas son visibles en la parte oscura de la imagen, esto se debe a la posterización después de volver a transformarse en sRGB.
Según lo solicitado, agregaré algunos detalles más sobre los programas utilizados. Solía ImageJ y ImageMagick , que también utilizan Mathematica para el cálculo de la función de dispersión, pero también se puede hacer dentro ImageJ. Comenzaré explicando cómo hago la deconvolución con ImageJ cuando ya tengo la función de dispersión de puntos. Para realizar la deconvolución, debe instalar un complemento para ImageJ. Utilicé este complemento para este caso, pero también hay otros complementos disponibles, por ejemplo, el complemento DeconvolutionLab .
Primero, necesita convertir al espacio de colores lineal, utilicé ImageMagick para convertir la imagen de enfoque (input.jpg) a un espacio de colores lineal usando el comando:
convert input.jpg -colorspace RGB output.tif
Luego, con ImageJ, abre el archivo output.tif. Luego, desde las opciones del menú, selecciona "imagen", luego "color" y luego "Canales de escupir". Luego, desde el menú, seleccione "complementos" y luego "deconvolución iterativa paralela" y luego 2d deconvolución interactiva ".
Luego obtiene la ventana de deconvolución, luego selecciona la imagen y "PSF" significa la función de dispersión de puntos, allí selecciona el archivo de imagen que contiene la función de dispersión de puntos. Para el método, elijo "WPL", que se basa en el filtro Wiener, que generalmente funciona razonablemente bien para imágenes de bajo ruido. En las opciones para WPL, marque "normalizar PSF", y para el filtro de paso bajo cambie el valor a 0.2, por defecto es 1, pero un valor más bajo es mejor para imágenes con poco ruido (si lo elige más grande, ' obtendrá una imagen que sea menos nítida). Las otras opciones, Boundary se pueden elegir para que sean reflexivas, el cambio de tamaño se puede configurar a "la próxima potencia de 2", la salida se puede configurar a 32 bits, la precisión se puede configurar al doble. Elegí el número máximo de iteraciones para ser 15,
Luego ejecuta el programa haciendo clic en "deconvolucionar". Luego obtienes un archivo de imagen de 32 bits como salida. Por lo general, los valores de píxeles son bastante similares a los de la imagen original, pero puede tener algunos píxeles que exceden el máximo para el formato de imagen original. Entonces, en este caso, comenzamos con imágenes de 8 bits, pero en la imagen deconvolucionada, puede tener valores de gris que exceden 255, lo que hace que toda la imagen se vuelva demasiado oscura. Esto debe solucionarse recortando estos píxeles a 255, lo que puede hacer seleccionando en el menú "proceso" y luego "Matemáticas" y luego "Máx.". El valor máximo se utilizará para recortar los valores grises que excedan ese valor. Tenga en cuenta que esto se hará con la imagen en la que hizo clic por última vez. También puede ver qué archivo es el "archivo actual" seleccionando "
Luego, una vez que haya desconvolucionado los 3 componentes de color, puede combinarlos seleccionando en el menú "imagen", luego "color" y luego "Combinar canales". Luego obtienes una imagen compuesta que puedes convertir a RGB de 8 bits usando el comando "Apilar a RGB" que encuentras allí.
Luego guarda esa imagen, llamémosla im.tif. Finalmente, debe convertir esto a sRGB, puede hacerlo con ImageMagick usando el comando:
convert im.tif -set colorspace RGB -colorspace sRGB output.tif
La pregunta restante es cómo obtener la función de dispersión de puntos. En la práctica, si hubiera tomado una foto como la que se está discutiendo aquí, simplemente podría haber tomado una foto de una fuente puntual, por ejemplo, una estrella en F / 29 y utilizarla como su función de dispersión puntual. Alternativamente, puede mirar los límites de alto contraste y extraer la función de dispersión de puntos de la forma en que los valores grises cambian de un valor a otro a través del límite. Pero entonces estás tratando de enfocar la imagen lo mejor que puedes.
En este caso, el objetivo era compilar las funciones de dispersión de puntos para el canal de color en función de lo que cabría esperar de F / 29, deconvolver la imagen con eso y ver si el resultado parece haber mejorado lo suficiente. Utilicé Mathematica para hacer algunos cálculos y, como un programa de álgebra computacional tan avanzado, es bastante fácil hacer todo tipo de manipulaciones, incluido el promedio sobre un intervalo de longitud de onda y la integración sobre áreas de píxeles para hacer que el PSF sea más realista.
Pero ImageJ también le permite crear una nueva imagen que puede usar como función de dispersión de puntos. Si hace clic en "Archivo" y luego en "Nuevo", puede crear una imagen de tamaño de 32 bits, digamos, 64 por 64 llena de negro. Luego puede programar una fórmula para los valores grises seleccionando "proceso", luego "Matemáticas" y luego "Macro". Para obtener la función de dispersión de puntos para este caso que involucra la función de Bessel aquí, puede usar el hecho de que está bien descrito por los primeros términos de la expansión de la serie. La página de MathWorld con la que me vinculé le ofrece expansiones de esta serie, por lo que J 1 (x) 2 / x 2 con x = π rs / ( λF ) puede reemplazarse por una función de la forma A + B s 2 + C s 4. Esta aproximación será inválida si s es demasiado grande. Ahora, sabemos que el PSF tiende a cero, por ejemplo, a una distancia de aproximadamente 5 o 6 píxeles se puede establecer en cero. Suponiendo que el polinomio sigue siendo pequeño en estos valores, puede escribir la Macro como:
if(d<7) v = A + B * pow(d,2) + B * pow(d,4)
Luego crea 3 imágenes para, por ejemplo, lambda = 650 nm, 500 nm y 400 nm, o cualquier otro valor que considere apropiado para representar la difracción en los 3 canales de color. A continuación, puede hacer el promedio sobre algunas longitudes de onda diferentes creando imágenes para diferentes lambda y luego seleccionando "proceso", luego "calculadora de imagen", y allí selecciona "agregar". Luego puede agregar otra imagen a este resultado y cuando termine de agregar, puede dividir para obtener el promedio seleccionando "proceso", luego "matemáticas" y luego "dividir".