Woher wissen Sie, dass es im Fokus ist? Sie erkennen das Objekt natürlich, aber allgemeiner, weil es Details hat. Details bedeuten typischerweise eine drastische Änderung der Farbe über einen kurzen Bereich von Pixeln. Ich bin mir sicher, dass Sie eine Vielzahl von Kantenerkennungsalgorithmen über Google finden können. Ohne es zu viel Gedanken zu geben:
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;
}
Hinweis: Sie würden wahrscheinlich brauchen „benachbarte Pixel“ mit einem gewissen Abstand zu verwenden, nicht nur unmittelbare Randpixel. Selbst im Fokus können Bilder mit hoher Auflösung oft Gradienten aufweisen.
Vielleicht fügen Sie die Sprache, die Sie arbeiten in –
Ich glaube nicht, es ist wirklich wichtig, welche Sprache in dieser Frage verwendet wird, das ist eher ein mathematisches Problem. (Es sei denn, die beabsichtigte Sprache ist unbrauchbar langsam für Zahlenverarbeitung) –
@ Matti, aber er ist auch auf der Suche nach einer Open-Source-Implementierung, die für bestimmte Sprachen besser geeignet sein könnte. Auch einige Frameworks sind dafür besser geeignet. –