Frage

Für einen Miniatur-Motor Ich mag würde, einen Algorithmus zu entwickeln, die x zufällige Thumbnails nimmt (Ernte, kein Resize) aus einem Bild, analysiert sich für Kontrast und wählt den mit dem höchsten Kontrast. Ich arbeite mit PHP und Imagick aber ich würde für einige allgemeine Tipps zu freuen, wie Kontrast von Bildern zu berechnen.

Es scheint, dass viele Dinge einfacher, als Kontrast Berechnung, beispielsweise Farben Zählen, Berechnen Helligkeit, etc.

Was sind Ihre Erfahrungen mit der Analyse von Bildmaterial?

War es hilfreich?

Lösung

Ich würde es tun, dass die Art und Weise (Pseudo-Code):

L[256] = {0,0,0...}

loop over each pixel:
    luminance = avg(R,G,B)
    increment L[luminance] by 1

for i = 0 to 255:
    if L[i] < C: L[i] = 0       // C = threshold of your chose

find index of first and last non-zero value of L[]
contrast = last - first

Andere Tipps

Bei der Suche nach dem Bild „mit dem höchsten Kontrast,“ Sie müssen sehr vorsichtig sein, wie Sie den Kontrast für das Bild definieren. In der einfachsten Weise, Kontrast ist die Differenz zwischen der niedrigsten Intensität und der höchsten Intensität in dem Bild. Das wird als nicht sehr nützlich in Ihrem Fall.

Ich schlage vor, Sie ein Histogramm Ansatz verwenden, um den Kontrast eines bestimmten Bildes zu beschreiben und vergleichen dann die Eigenschaften der Histogramme das Bild mit dem höchsten Kontrast zu bestimmen, wie Sie es definieren. Sie könnten eine Vielzahl von bekannten Behältern verwenden, um das Histogramm in Code zu repräsentieren, oder eine Klasse erstellen, um Ihre spezifischen Bedürfnisse zu erfüllen. (Ich damit nicht sagen, dass Sie brauchen, um ein Histogramm in Form eines Diagramms zu schaffen -. Nur eine statistische Darstellung der Intensitätswerte) Sie haben die Varianz jedes Histogramm direkt als Maß für den Kontrast oder verwenden Sie die Standardabweichung verwenden könnte, wenn das ist einfacher zu arbeiten.

Der Schlüssel wirklich liegt darin, wie man den Kontrast des Bildes definieren. Im Allgemeinen würde ich ein Bild mit hohem Kontrast als einen mit Werten vorhanden für alle, oder fast alle die möglichen Werte definieren. Und ich würde weiter hinzufügen, dass in dieser Definition eines Bildes mit hohem Kontrast, die Intensitätswerte des Bildes sind in der Regel über den Bereich der möglichen Werte in einer einheitlichen Art und Weise verteilt werden.

Mit diesem Ansatz, ein Bild mit geringem Kontrast dazu neigen würde, relativ wenige diskrete Intensitätswerte zu haben, und sie würden dazu neigen, eng gruppiert werden zusammen anstatt gleichmäßig verteilt. (Als allgemeine Regel gilt, werden sie auch in Richtung der Mitte des Bereichs gruppiert werden neigen.)

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