Algorithmus zur Bestimmung der "visuellen Klarheit" oder Pixelierung eines Bildes

9

Gibt es einen solchen Weg zu bestimmen, wie stark ein Bild vergrößert werden kann, bis es als "unscharf" betrachtet wird?

Ein praktisches Beispiel (und das Problem, das ich lösen möchte):

Ich habe ein Bild in verschiedenen Größen gespeichert, z. B. 500x500, 250x250 und 120x120. Ich möchte das effizienteste Bild liefern, aber auch das klarste. Wenn ein Benutzer ein Bild bei 125x125 anfordern sollte, wäre es offensichtlich nicht nur am effizientesten, das 120x120-Bild anzupassen, sondern es würde höchstwahrscheinlich keine sichtbare Pixelierung verursachen.

Wenn jedoch ein Benutzer ein Bild bei 180x180 anfordern sollte, ist es möglicherweise effizienter, das 120x120 Bild zu vergrößern, aber höchstwahrscheinlich würde es ein unscharfes Bild ergeben. In diesem Fall würde ich das 250x250 Bild verkleinern wollen.

Offensichtlich kann die "Klarheit" eines Bildes relativ sein und von Auge zu Auge sowie von Bild zu Bild variieren, aber ich frage mich, ob es irgendeine Art von Algorithmus oder Funktion gibt, um einen "Pixelierungsindex" von zu bestimmen Sortiert ... Danke!

Hinweis: Verwenden von PHP & amp; ImageMagick für Bildmanipulationen, also wäre jede Antwort in diesem Bereich großartig ...

Zur Klärung: Ich suche nicht genau nach einer Lösung zu meinem obigen Beispiel. Ich suche nach einer Antwort auf die ursprüngliche Frage: is there an algorithm that could possibly determine how "pixelated" a blown up image is ... Das obige Problem ist nur ein praktisches Beispiel dafür, wie ein solcher Algorithmus nützlich sein könnte.

    
anson 30.05.2013, 19:06
quelle

4 Antworten

1

Sie könnten einen Graustufen-Sobel-Kantenerkennungsfilter für das Bild verwenden und die Pixelwerte der Kanten summieren und diese Summe dann mit der Anzahl der Pixel mitteln (SumOfEdges / (width * height)). Das würde dir die "Nervosität" des Bildes sagen. Dies könnte nur verwendet werden, um den Bildtyp zu vergleichen.

Dies ist mein sobel opencl Filterkernel

%Vor%     
Mercutio Calviary 10.06.2013 05:39
quelle
0

Das tut nicht genau das, was Sie gefragt haben, aber ich denke, es bringt, was Sie wollen. Einen Algorithmus zu schreiben, um zu quantifizieren, wie pixeliert ein Bild ist, wäre nicht trivial und es wäre definitiv bildformatspezifisch (zB nur für PNG-Bilder), und ich glaube wirklich nicht es ist notwendig zu erreichen, was Sie wollen.

Nehmen wir für dieses Beispiel an, dass alle Ihre Bilder perfekt quadratisch sind (dies zu ändern, um nichtquadratische Bilder zu berücksichtigen, ist ziemlich trivial):

Angenommen, Sie haben eine Liste von Quellbildern, deren Größe Sie ändern können, sowie eine "Ergebnisgröße" - sagen wir 500 Pixel mal 500 Pixel. Sie könnten so etwas tun:

%Vor%

Ich glaube nicht, dass ich mir über das "effizienteste" Bild Gedanken machen würde. Wenn Sie ein 100x100 Bild bis zu 200x200 skalieren, dann skaliert ein 300x300 Bild auf 200x200 zwei Bilder, die sehr ähnlich groß (besonders wenn Sie ein gutes Komprimierungswerkzeug verwenden, wie PNGOUT oder andere). Ich würde einfach vom Quellbild skalieren, das der gewünschten Größe am nächsten kommt.

    
CmdrMoozy 30.05.2013 19:44
quelle
0

Sie können den Algorithmus dieses " Duplicate Image Finder " verwenden > um den Fingerabdruck Ihres Bildes mit guter Qualität mit dem Fingerabdruck seines minderwertigen Zwillings zu vergleichen. Was denkst du?

    
RafaSashi 17.06.2013 20:03
quelle
0

Die Bildqualität ist völlig subjektiv und hängt weitgehend von der Komplexität des Originalbildes ab. Wenn Ihr Bild von einer weißen Katze in einem Schneesturm ist (im Grunde nur weiß), dann ist die subjektive Qualität eines 500x500 Bildes identisch, egal ob Sie ein 1000x1000 Bild verkleinern oder von einem 100x100 Bild erhöhen.

Wenn alle Dinge gleich sind, können Sie davon ausgehen, dass das Bild mit der höheren Auflösung auf eine bessere Qualität reduziert wird als die niedrigere Auflösung.

Sie könnten also von meinem Kopf aus das größere Bild auf die Zielgröße verkleinern und es dann als Maß verwenden (ein Ideal), um die Qualität des vergrößerten kleineren Bildes zu beurteilen (wie unterschiedlich ist Pixel 7 in Zeile 9) aus dem gleichen Pixel im Idealbild usw.). Dieser Vergleich könnte von allen Pixeln oder von Abtastpunkten innerhalb der Bilder durchgeführt werden. Das resultierende "outness" könnte dann gemittelt und als ein Hinweis auf die Qualität des vergrößerten Bildes verwendet werden.

    
Andy Taylor 21.07.2013 07:57
quelle