2010-09-25 17 views
7

Si estuviera creando un servicio web que utilizara varias fotos para ilustrar un servicio, sería útil detectar realmente si las fotos están enfocadas o no.¿Hay alguna manera de detectar programáticamente si una fotografía está enfocada?

¿Hay alguna forma de hacerlo de manera programática? (Aún mejor, ¿existe una implementación de código abierto de dicha rutina?)

+0

Quizás agregue el idioma en el que está trabajando –

+3

No creo que realmente importe qué idioma se usa en esta pregunta, este es más un problema matemático. (A menos que, por supuesto, el lenguaje previsto sea inútilmente lento para el cálculo de números) –

+1

@Matti, pero también está buscando una implementación de código abierto que podría ser más adecuada para ciertos idiomas. Además, algunos marcos son más adecuados para este –

Respuesta

4

¿Cómo sabe que está enfocado? Reconoces el objeto, por supuesto, pero más generalmente, porque tiene detalles. El detalle, típicamente, significa un cambio drástico en el color en un rango corto de píxeles. Estoy seguro de que puedes 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: es probable que había necesidad de utilizar "píxeles adyacentes" con cierta distancia, no sólo los píxeles del borde inmediatos. Incluso en el enfoque, las imágenes de alta resolución a menudo pueden tener degradados.

+1

Una vez implementé una detección de bordes con un error de uno por uno que efectivamente agregaba la imagen original a los bordes. Cuando se aplica a una imagen de un compañero de clase en primer plano, en foco, con otras personas en el fondo, fuera de foco, mi compañero de clase parecía tener 90 años, mientras que las otras personas no habían cambiado. – Chris

+0

Excelente respuesta. Probablemente ejecutaré la detección de bordes sobre las imágenes y veré si puede detectar las fotos borrosas y seleccionar, por ejemplo, el x% inferior de ellas para que podamos volver a fotografiarlas. –

2

Investigue los métodos reales de detección de bordes, utilizando filtros laplacianos, filtros guasianos, LoG (laplaciano de gaussiano), etc. Estos métodos son mucho más ajustables para sus casos específicos que el método simple (aunque elegante) de PatrickV.

Cuestiones relacionadas