¿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.
Quizás agregue el idioma en el que está trabajando –
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) –
@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 –