Letterboxing
Letterboxing passt Bilder unter Beibehaltung des Seitenverhältnisses und mit Auffüllung an eine Zielform an, sodass Objekte unverzerrt bleiben und das gesamte Sichtfeld erhalten bleibt.
Letterboxing ist eine Technik zur Größenanpassung von Bildern, bei der das Seitenverhältnis eines Bildes erhalten bleibt und Auffüllungen hinzugefügt werden, um eine Zielgröße zu erreichen. Das Bild wird gleichmäßig skaliert, anschließend wird der ungenutzte Platz mit Randpixeln aufgefüllt, sodass die Proportionen der Objekte und das gesamte Sichtfeld erhalten bleiben. In der Computer Vision bereitet das Verfahren Bilder mit unterschiedlichen Formen für Modelle vor, die eine einheitliche Eingabeform erwarten.
Außerhalb der KI bezeichnet Letterboxing auch die Darstellung von Breitbildfilmen mit horizontalen Balken.
So bewahrt Letterboxing die Bildgeometrie#
Das Seitenverhältnis beschreibt das Verhältnis zwischen Bildbreite und Bildhöhe. Bei der Datenvorverarbeitung wählt Letterboxing den kleineren von zwei Skalierungsfaktoren: Zielbreite geteilt durch Originalbreite und Zielhöhe geteilt durch Originalhöhe. Beide Abmessungen verwenden diesen Faktor, sodass das skalierte Bild in die Zielgröße passt. Die verbleibenden Pixel werden als Auffüllung verwendet. Die Resize-and-Pad-Operation von TensorFlow setzt diesen Ansatz mit Rändern aus Nullwerten um.
Ein 1280 x 720 großes Bild, das beispielsweise in eine Zielgröße von 640 x 640 eingepasst wird, verwendet einen Skalierungsfaktor von 0,5. Sein Inhalt wird auf 640 x 360 verkleinert, sodass 280 Zeilen für die Auffüllung übrig bleiben: bei zentrierter Ausrichtung 140 oben und 140 unten. Hochformatbilder erhalten seitliche Ränder. Ein Bild mit Letterboxing kann daher horizontale oder vertikale Auffüllungen haben; auch die Zielgröße kann rechteckig sein.
Ultralytics YOLO verwendet die LetterBox-Transformation, um die Geometrie bei Eingaben für Erkennung, Segmentierung und Posenschätzung zu bewahren; standardmäßig wird mit Grau im Wert 114 aufgefüllt. Bei der Erkennung, Segmentierung und Posenvorhersage mit YOLO26 verringert die Auffüllung auf das minimale Rechteck die Ränder auf ein kompatibles Vielfaches der Schrittweite, sofern die Formen des Batches und das Inferenz-Backend dies unterstützen.
Letterboxing im Vergleich zu Streckung und Zuschneiden#
Drei Möglichkeiten zur Größenanpassung gehen unterschiedlich mit abweichenden Bild- und Zielformen um:
- Letterboxing bewahrt die Proportionen und das vollständige Bild, wobei ein Teil der Eingabe für Auffüllungen verwendet wird.
- Streckung passt Breite und Höhe unabhängig voneinander an die Zielgröße an. Kreise werden zu Ellipsen, wenn sich die Skalierungsfaktoren unterscheiden.
- Zuschneiden bewahrt bei gleichmäßiger Größenanpassung die Proportionen und entfernt anschließend Inhalte außerhalb des ausgewählten Bereichs. Objekte nahe den Bildrändern können abgeschnitten werden.
Diese Optionen wirken sich auf die Objekterkennung aus, bei der Formen und Positionen eine Rolle spielen, und auf die Bildklassifizierung, bei der das Zuschneiden die sichtbaren Hinweise auf eine Klasse verändert.
Auffüllungen beanspruchen ebenfalls Eingabefläche. Im Beispiel mit 1280 x 720 nimmt der Bildinhalt 56,25 % der quadratischen Fläche ein, die Auffüllung 43,75 %. Durch das Verkleinern gehen feine Details innerhalb dieses Inhalts verloren; das Hinzufügen von Randpixeln schafft keine zusätzlichen Objektdetails. Bei hochauflösenden Bildern mit kleinen Objekten verarbeitet die gekachelte Inferenz einzelne Bildbereiche, sodass die Objekte effektiv größer skaliert werden.
Ein Letterboxing-Beispiel in Python#
Installiere Pillow mit pip install pillow. Die ImageOps.pad-Operation skaliert ein Bild und zentriert es auf einer aufgefüllten Fläche. Dieses Beispiel verwendet das Busfoto, das für Tutorials zur Bildverarbeitung bereitgestellt wird.
from urllib.request import urlretrieve
from PIL import Image, ImageOps
urlretrieve("https://ultralytics.com/images/bus.jpg", "bus.jpg")
image = Image.open("bus.jpg")
image = image.convert("RGB")
# Preserve proportions and fill the unused area with gray.
letterboxed = ImageOps.pad(image, (640, 640), color=(114, 114, 114))
letterboxed.save("letterboxed_bus.png")
print(f"{image.size} -> {letterboxed.size}")Die Ausgabedimensionen sind (810, 1080) -> (640, 640) und werden als Breite und Höhe angegeben. Das gespeicherte Bild enthält das vollständige Foto, verkleinert auf 480 x 640, mit einem 80 Pixel breiten Rand auf jeder Seite.
Annotationen und Vorhersagen zuordnen#
Letterboxing transformiert neben den Pixeln auch das Koordinatensystem. Jede Koordinate einer Bounding Box muss skaliert und um den linken oder oberen Auffüllungsrand verschoben werden. Dieselbe Geometrie gilt für Keypoints bei der Posenschätzung und für Objektkonturen bei der Instanzsegmentierung. Werden Annotationen während des Trainings nicht angepasst, stimmen die Zielwerte nicht mehr mit den beschriebenen Objekten überein.
Nach der Inferenz macht die Skalierung der Koordinaten zurück die Transformation rückgängig: Ziehe den Auffüllungsversatz ab und teile anschließend durch den Skalierungsfaktor. Bei einer ansonsten korrekt positionierten Box mit nicht null großen Auffüllungen verschiebt das Weglassen dieses Versatzes die Box und verringert ihre Schnittmenge über Vereinigungsmenge mit der Ground Truth. Im Busbeispiel wird ein Punkt mit den aufgefüllten Koordinaten (320, 320) auf die ursprünglichen Koordinaten (405, 540) abgebildet, indem 80 von x abgezogen und beide Koordinaten durch 640 / 1080 geteilt werden.










