Wie skaliert ein Computer die Auflösung von 1024 x 768 auf 1920 x 1080?

8

Ohne schwarze Balken meine ich. 1080 ist kein Vielfaches von 768, gibt es also einen Datenverlust?

V0ight
quelle
5
Es gibt Skalierungsalgorithmen wie die bikubische Skalierung, die Splines verwenden, um die Farbe von Pixeln zu approximieren, wenn sie auf eine beliebige Größe skaliert werden.
EvilTak
@ EvilTak, kannst du deinen Kommentar zu einer kleinen Antwort erweitern?
Glampert
@glampert hat das gemacht. Soll ich meinen Kommentar entfernen?
EvilTak
@ EvilTak, ich denke du kannst es verlassen. Schöne Antwort übrigens, danke!
Glampert

Antworten:

8

Im Wesentlichen ist ein Bild eine Gruppe von Punktabtastwerten (lesen Ein Pixel ist kein kleines Quadrat 3 ). Wenn Sie das Bild transformieren oder skalieren, müssen Sie es erneut abtasten. Theoretisch nehmen Sie also die Punktproben und wandeln sie in eine kontinuierliche Funktion um. Dann tasten Sie diese kontinuierliche Funktion ab und rekonstruieren ein Signal. Hier gibt es also zwei oder drei verschiedene Phasen.

  1. Umwandlung der Proben in eine kontinuierliche Funktion (Funktionsrekonstruktion).
  2. (Transformieren)
  3. Erneutes Abtasten des Signals

Beachten Sie, dass keiner dieser Schritte eine feste Form hat. In der Praxis ist es bei einer Optimierung unmöglich zu sagen, dass es Schritte gibt. Die Transformation muss nicht wirklich einfach sein, sie könnte die Form in eine Spirale usw. abbilden.

Rekonstruktion des Signals

Bild 1 : Ein 1-D-Signal, das von verschiedenen Filtern rekonstruiert wurde.

In der Praxis ist einiges über die Signalrekonstruktion im Bereich der Signalverarbeitung bekannt. Das Entwerfen dieser Filter und das Auswählen des richtigen Filters ist eine Kunstform für sich. Im Wesentlichen ist die Wahl des Filters jedoch ein Kompromiss zwischen Unschärfe und Klingeln . Natürlich hat der Algorithmus auch andere Eigenschaften, wie z. B. wie viele Anweisungen für die Implementierung erforderlich sind, wie schnell und wie viel Speicher er benötigt usw. Dies kann in Echtzeit- oder eingebetteten Anwendungen sehr wichtig sein.

Der Prozess

Bild 2 : Überblick über den gesamten Prozess.

joojaa
quelle
5

Es stehen zahlreiche Upscaling- und Downscaling-Algorithmen zur Verfügung, um Bilder von jeder Auflösung auf jede andere beliebige Auflösung zu skalieren. Jeder Algorithmus beinhaltet typischerweise einen Kompromiss zwischen Effizienz, Glätte und Schärfe mit unterschiedlichen Graden jedes Kompromisses für verschiedene Algorithmen.

In diesem Wikipedia-Artikel finden Sie solche Algorithmen und Beispiele für solche Algorithmen.

Der bekannteste (und am häufigsten verwendete) Algorithmus ist der bikubische Interpolationsalgorithmus . Es interpoliert zwischen 2D-Punkten in einem rechteckigen Raster. Bei Verwendung von kubischen Splines (oder kubischer Interpolation) wird zuerst in einer Dimension interpoliert (die interpolierte Zeile / Spalte wird gefunden) und dann die interpolierte Zeile / Spalte in der anderen Dimension interpoliert.

Die bilineare Interpolation ähnelt der bikubischen Interpolation, außer dass die erstere unter Verwendung einer linearen Funktion interpoliert und nur zwischen zwei Werten interpolieren kann und die letztere eine kubische Funktion verwendet und zwischen vier Werten interpolieren kann.

Die einfache Funktion für die bikubische Interpolation lautet wie folgt:

f(f(p00, p01, p02, p03, y),
  f(p10, p11, p12, p13, y),
  f(p20, p21, p22, p23, y),
  f(p30, p31, p32, p33, y),
  x)

Dabei ist (x, y) die interpolierte Position und p [] [] das 2d-Array, das das 4 * 4-Gitter darstellt.

Überprüfen Sie diesen Link für weitere Informationen und Beispielcode, was wirklich sehr hilfreich ist!

EvilTak
quelle
0

Obwohl die anderen Antworten korrekt sind, bin ich mir nicht sicher, ob sie Ihre Frage vollständig beantworten. Um keine schwarzen Balken zu erhalten, haben Sie zwei Möglichkeiten, wenn das Ziel nicht die gleiche Form (oder das gleiche Seitenverhältnis) wie die Quelle hat:

  1. Füllen Sie das Ziel und lassen Sie einige Pixel von der Quelle außerhalb des Ziels. In Ihrem Beispiel ist die Quelle 1024 x 768 und das Ziel 1920 x 1080. Wenn Sie das Originalbild so skalieren, dass das Ergebnis 1920 x 1440 ist, können Sie die Ober- und / oder Unterseite zuschneiden, um es 1920 x 1080 zu erhalten.
  2. Dehnen Sie das Zielbild passend. Sie würden also vertikal um 1080/768 = 1,40625 und horizontal um 1920/1024 = 1,875 skalieren. Dies ist fast nie das, was Sie wollen, und sieht in den meisten Fällen schrecklich aus. (Dies lässt Menschen viel breiter aussehen als sie sollten und verwandelt Kreise in Ovale und Rotationen in Scheren.)

Es gibt noch eine andere Option, die jedoch nicht Ihren Kriterien entspricht - einheitlich skalieren, sondern nur, bis eine Dimension so groß wie das Ziel ist. In diesem Fall würden Sie sowohl horizontal als auch vertikal um 1,40625 skalieren, um ein Ergebnis von 1440 x 1080 zu erhalten. Dies wird normalerweise als "Scale to Fit" bezeichnet.

Für jede dieser Optionen können Sie den Skalierungsalgorithmus verwenden, der Ihren Anforderungen entspricht.

user1118321
quelle
1
Sie könnten auch weiße Balken haben. Sie können auch eine Bildsynthesefunktion verwenden, um die Pixel zu füllen. Sie können ein Bild mit sich selbst überlagern, eines, das beschnitten ist, und eines, das sich beispielsweise erstreckt. Hier gibt es einfach unendlich viele Möglichkeiten, mit keinen Daten umzugehen. Ich denke, die meisten von uns haben einfach angenommen, dass es sich um eine ungleichmäßige Skala handelt.
Joojaa
Sehr richtig. Ich nahm an, dass das Originalplakat speziell nicht mit einer Volltonfarbe gefüllt werden wollte und sich nur für den Skalierungsaspekt interessierte, da sie danach fragten. Es gibt aber auch viele andere Füllmethoden. Es gibt auch nichtlineare Skalierungsmethoden, bei denen das Zentrum sein Seitenverhältnis beibehält und die Kanten beispielsweise gestreckt werden.
user1118321