¿Hay alguna forma de detectar programáticamente si una fotografía está enfocada?

StackOverflow https://stackoverflow.com/questions/3793519

  •  05-10-2019
  •  | 
  •  

Pregunta

Si estuviera construyendo un servicio web que usara una serie de fotos para ilustrar un servicio, sería útil detectar si las fotos están enfocadas o no.

¿Hay alguna forma de hacerlo programáticamente? (Aún mejor, ¿hay una implementación de código abierto de tal rutina?)

¿Fue útil?

Solución

¿Cómo sabes que está enfocado? Reconoces el objeto, por supuesto, pero en general, porque tiene detalles. El detalle, típicamente, significa un cambio drástico en el color en un corto rango de píxeles. Estoy seguro de que puede encontrar muchos algoritmos de detección de bordes a través de Google. Sin pensarlo mucho:

edgePixelCount = 0;

for each pixel in image
{
    mixed = pixel.red + pixel.blue + pixel.green;
    for each adjacentPixel in image.adjacentPixels(pixel)
    {
        adjacentMixed = 
           adjacentPixel.red + 
           adjacentPixel.blue + 
           adjacentPixel.green;
        if ( abs ( adjacentMixed - mixed ) > EDGE_DETECTION_THRESHOLD )
        {
             edgePixelCount++;
             break;
        }
    }
}

if (edgePixelCount > NUMBER_OF_EDGE_PIXELS_THRESHOLD)
{
     focused = true;
}

Nota: Probablemente necesite usar "píxeles adyacentes" con cierta distancia, no solo píxeles de borde inmediato. Incluso en el enfoque, las imágenes de alta RES a menudo pueden tener gradientes.

Otros consejos

Busque métodos reales de detección de bordes: utilizando filtros laplacianos, filtros guassianos, log (laplaciano de gaussiano), etc. Estos métodos son mucho más ajustables para adaptarse a sus casos específicos que el método simple de Patrickv (aunque elegante).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top