Ohne schwarze Balken meine ich. 1080 ist kein Vielfaches von 768, gibt es also einen Datenverlust?
Ohne schwarze Balken meine ich. 1080 ist kein Vielfaches von 768, gibt es also einen Datenverlust?
Antworten:
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.
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.
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.
Bild 2 : Überblick über den gesamten Prozess.
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!
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:
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.