Aislar la parte no borrosa de la imagen sucia

10

Tengo una imagen tomada por la cámara de un teléfono móvil con foco en una parte, digamos una cara o lo que sea. Quiero saber, aproximadamente, dónde está el área enfocada. Por ejemplo, un cuadro delimitador alrededor del área enfocada. ejemplo: Original Después de la detección

Humam Helfawi
fuente

Respuestas:

7

En general, este es un problema de segmentación de imagen ( http://en.wikipedia.org/wiki/Image_segmentation ) en el que intentaría aislar las regiones enfocadas de las no enfocadas de la imagen.

Las lentes ópticas son equivalentes a los filtros de paso bajo de todos modos y el efecto de un filtro de paso bajo en una señal es suavizarlo limitando el contenido de frecuencia más alta.

En el procesamiento de imágenes digitales, las frecuencias bajas corresponden a objetos grandes (forma general) y las frecuencias más altas corresponden a objetos pequeños (detalles).

Por lo tanto, para aislar la región enfocada, podría estar buscando áreas que tengan una desviación estándar más alta en relación con las áreas borrosas que estarían en una desviación estándar más baja debido a la operación de suavizado de la lente desenfocada.

M×N

M×N

En el caso de la imagen en su publicación, es probable que el histograma muestre dos modos. Uno correspondiente a valores relativamente altos de desviación estándar (área enfocada) y uno correspondiente a valores relativamente bajos de desviación estándar (áreas borrosas).

Luego puede colocar un umbral, por ejemplo, solo entre los dos modos para establecer un criterio entre sus regiones enfocadas y desenfocadas y luego seleccionar todos los "parches" (o áreas de ventana MxN) cuya desviación estándar es mayor que su umbral. (Para obtener más información, consulte: http://en.wikipedia.org/wiki/Thresholding_%28image_processing%29 )

Esto aislará las partes enfocadas de la imagen para usted.

Espero que esto ayude.

AUTOMÓVIL CLUB BRITÁNICO
fuente
Voy a hacer una lectura profunda de su respuesta y volveré con un
comentario
Muchas gracias, excelente y detallada respuesta, voy a compartir la implementación si obtuve buenos resultados usando opencv, gracias de nuevo
Humam Helfawi
Por cierto, ¿es suficiente un representante gris de la imagen o necesito procesar cada canal?
Humam Helfawi
Me alegra que lo hayas encontrado útil. Trabajar en escala de grises funcionaría bien para la discriminación entre áreas borrosas y enfocadas, pero incluir información de color adicional podría ayudarlo a prescribir áreas más complejas (por ejemplo, rastrear el área de una cara en un retrato o aislar solo la flor en la imagen en tu publicación)
A_A
La pregunta fue editada nuevamente a su forma original luego de la discusión en: meta.dsp.stackexchange.com/questions/1337/… @ vast-academician Por favor agregue sus comentarios como una respuesta por separado. La parte principal se ha conservado en: pastebin.com/kjCC1wM6
A_A
5

Aquí hay un enfoque más fácil, que no implica análisis de ventana deslizante.

  • Convierta su imagen a escala de grises (esto no es obligatorio, pero supondré que solo tiene un canal en aras de la claridad)

  • Calcule el gradiente en ambas direcciones.

  • Calcule la magnitud (o simplemente cuadre el gradiente)

  • Suma ambas imágenes de gradiente en ambas direcciones

Como ya se dijo, la parte enfocada de la imagen tendrá frecuencias más altas que el área no enfocada. A partir de la suma, terminará con dos proyecciones, donde hay mucha variación (valores más altos) en esa parte donde el objeto enfocado se coloca a lo largo de esta dirección. Ahora puede hacer lo siguiente:

  • Determine el punto inicial y final de estos valores más altos. Puede usar un umbral simple (por ejemplo, 0.7 * valor_máximo) o suavizar los perfiles, tomar la segunda derivada y verificar los valores más altos allí.

  • Las posiciones de Inicio / Detención del paso anterior le dan las posiciones de píxeles a lo largo de ambas direcciones donde colocar su rectángulo indicador de área de nitidez.

M529
fuente