Gibt es eine Möglichkeit, programmatisch zu erkennen, ob ein Foto im Fokus steht?
-
05-10-2019 - |
Frage
Wenn ich einen Webdienst erstellt hätte, bei dem eine Reihe von Fotos verwendet wurden, um einen Dienst zu veranschaulichen, wäre es nützlich, tatsächlich festzustellen, ob Fotos im Fokus stehen oder nicht.
Gibt es eine Möglichkeit, dies programmatisch zu tun? (Noch besser, gibt es eine Open -Source -Implementierung einer solchen Routine?)
Lösung
Woher weißt du, dass es im Fokus steht? Sie erkennen das Objekt natürlich, aber allgemeiner, weil es Details enthält. Details bedeutet normalerweise eine drastische Änderung der Farbe über einen kurzen Pixelbereich. Ich bin sicher, Sie können viele Kantenerkennungsalgorithmen über Google finden. Ohne viel Gedanken zu machen:
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 müssten wahrscheinlich "benachbarte Pixel" mit einiger Entfernung und nicht nur mit unmittelbaren Randpixeln verwenden. Selbst im Fokus können hochres -Bilder oft Gradienten haben.
Andere Tipps
Schauen Sie sich die Real Edge -Erkennungsmethoden an - Verwenden von Laplace -Filtern, Guassian -Filtern, Protokoll (Laplace of Gaußschen) usw. Diese Methoden sind viel optimierbarer, um Ihre spezifischen Fälle zu entsprechen als Patrickvs einfache (wenn auch elegante) Methode.