Es ist ein Community-Wiki, also kannst du diesen schrecklichen, schrecklichen Beitrag reparieren.
Grrr, kein LaTeX. :) Ich denke, ich muss einfach mein Bestes geben.
Definition:
Wir haben ein Bild (PNG oder ein anderes verlustfreies * Format) mit dem Namen A der Größe A x von A y . Unser Ziel ist es, es um p = 50% zu skalieren .
Bild ( "array") B wird eine "direkt skalierten" Version seiner A . Es wird B s = 1 Anzahl von Schritten haben.
A = B B s = B 1
Bild ( „array“) C wird eine „schrittweise skaliert“ Version seiner A . Es wird C s = 2 Anzahl von Schritten haben.
A ≅ C C s = C 2
Das lustige Zeug:
A = B 1 = B 0 × p
C 1 = C 0 × p 1 ÷ C s
A ≤ C 2 = C 1 × p 1 ≤ C s
Sehen Sie diese gebrochenen Kräfte? Sie verschlechtern theoretisch die Qualität von Rasterbildern (Raster innerhalb von Vektoren hängen von der Implementierung ab). Wie viel? Wir werden das als nächstes herausfinden ...
Das gute Zeug:
C e = 0, wenn p 1 ÷ C s ∈ ∈ ist
C e = C s, wenn p 1 ÷ C s ∉ ℤ
Wobei e den maximalen Fehler darstellt (Worst-Case-Szenario), aufgrund ganzzahliger Rundungsfehler.
Jetzt hängt alles vom Downscaling-Algorithmus ab (Super Sampling, Bicubic, Lanczos Sampling, Nearest Neighbor usw.).
Wenn wir Nearest Neighbor verwenden (der schlechteste Algorithmus für irgendetwas von irgendeiner Qualität), ist der "wahre maximale Fehler" ( C t ) gleich C e . Wenn wir einen der anderen Algorithmen verwenden, wird es kompliziert, aber es wird nicht so schlimm sein. (Wenn Sie eine technische Erklärung wünschen, warum es nicht so schlimm sein wird wie der nächste Nachbar, kann ich Ihnen keine einzige Ursache nennen, die nur eine Vermutung ist. HINWEIS: Hey Mathematiker! Korrigieren Sie das!)
Liebe deinen Nächsten:
Lassen Sie uns ein "Array" von Bildern D mit D x = 100 , D y = 100 und D s = 10 erstellen . p ist immer noch dasselbe: p = 50% .
Algorithmus für den nächsten Nachbarn (schreckliche Definition, ich weiß):
N (I, p) = mergeXYDuplicates (floorAllImageXYs (I x, y × p), I) , wobei nur die x, y selbst multipliziert werden; nicht ihre Farbwerte (RGB)! Ich weiß, dass man das in Mathe nicht wirklich kann, und genau deshalb bin ich nicht DER LEGENDÄRE MATHEMATIKER der Prophezeiung.
( mergeXYDuplicates () behält nur die x, y "Elemente" ganz unten / ganz links im Originalbild I für alle gefundenen Duplikate bei und verwirft den Rest.)
Nehmen wir ein zufälliges Pixel: D 0 39,23 . Wenden Sie dann immer wieder D n + 1 = N (D n , p 1 ÷ D s ) = N (D n , ~ 93,3%) an .
c n + 1 = Boden (c n × ~ 93,3%)
c 1 = Boden ((39,23) × ~ 93,3%) = Boden ((36,3,21,4)) = (36,21)
c 2 = Boden ((36,21) × ~ 93,3%) = (33,19)
c 3 = (30,17)
c 4 = (27,15)
c 5 = (25,13)
c 6 = (23,12)
c 7 = (21,11)
c 8 = (19,10)
c 9 = (17,9)
c 10 = (15,8)
Wenn wir nur einmal eine einfache Verkleinerung vornehmen würden, hätten wir:
b 1 = Boden ((39,23) × 50%) = Boden ((19,5,11,5)) = (19,11)
Vergleichen wir b und c :
b 1 = (19,11)
c 10 = (15,8)
Das ist ein Fehler von (4,3) Pixel! Versuchen wir dies mit den Endpixeln (99,99) und berücksichtigen die tatsächliche Größe des Fehlers. Ich werde hier nicht noch einmal rechnen , aber ich sage Ihnen, es wird (46,46) , ein Fehler von (3,3) von dem, was es sein sollte (49,49) .
Kombinieren wir diese Ergebnisse mit dem Original: Der "echte Fehler" ist (1,0) . Stellen Sie sich vor, wenn dies bei jedem Pixel passiert, kann dies einen Unterschied machen. Hmm ... Nun, es gibt wahrscheinlich ein besseres Beispiel. :) :)
Fazit:
Wenn Ihr Bild ursprünglich groß ist, spielt es keine Rolle, es sei denn, Sie führen mehrere Downscales durch (siehe "Beispiel aus der Praxis" weiter unten).
In Nearest Neighbor wird es um maximal ein Pixel pro inkrementellem Schritt (nach unten) schlechter. Wenn Sie zehn Downscales durchführen, wird die Qualität Ihres Bildes leicht beeinträchtigt.
Beispiel aus der Praxis:
(Klicken Sie auf die Miniaturansichten, um eine größere Ansicht zu erhalten.)
Mit Super Sampling schrittweise um 1% verkleinert:
Wie Sie sehen können, "verwischt" das Super Sampling es, wenn es mehrmals angewendet wird. Dies ist "gut", wenn Sie eine Verkleinerung durchführen. Dies ist schlecht, wenn Sie es schrittweise tun.
* Je nach Editor, und das Format, dies könnte möglicherweise einen Unterschied machen, so dass ich es einfach bin zu halten und es lossless aufrufen.
(100%-75%)*(100%-75%) != 50%
. Aber ich glaube, ich weiß, was Sie meinen, und die Antwort darauf lautet "Nein", und Sie werden den Unterschied nicht wirklich erkennen können, wenn es einen gibt.