2010-09-25 2 views
7

Wenn ich einen Webdienst erstellen würde, der eine Reihe von Fotos zur Veranschaulichung eines Dienstes verwendet, wäre es hilfreich, tatsächlich festzustellen, ob Fotos im Fokus sind oder nicht.Gibt es eine Möglichkeit, programmatisch festzustellen, ob ein Foto scharf ist?

Gibt es eine Möglichkeit, dies programmatisch zu tun? (Noch besser, gibt es eine Open-Source-Implementierung einer solchen Routine?)

+0

Vielleicht fügen Sie die Sprache, die Sie arbeiten in –

+3

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

+1

@ 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. –

Antwort

4

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.

+1

Ich habe einmal eine Kantenerkennung mit einem Fehler nach dem anderen implementiert, der das ursprüngliche Bild effektiv zu den Kanten hinzugefügt hat. Wenn ich auf ein Bild eines Klassenkameraden im Vordergrund, im Fokus, mit anderen Menschen im Hintergrund, außerhalb des Fokus, sah mein Klassenkamerad 90 Jahre alt, während die anderen Menschen unverändert waren. – Chris

+0

Ausgezeichnete Antwort. Ich werde wahrscheinlich eine Kantenerkennung über die Bilder durchführen und sehen, ob sie die unscharfen Fotos erkennen und, sagen wir, die unteren x% von ihnen auswählen kann, so dass wir sie neu fotografieren können. –

2

Schauen Sie sich echte Kantenerkennungsmethoden an - mit Laplace-Filtern, Guassian-Filtern, LoG (Laplacian von Gaussian) usw. Diese Methoden sind viel besser anpassbar als PatrickVs einfache (wenn auch elegante) Methode.

Verwandte Themen