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?)

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top