Letterboxing
El letterboxing cambia el tamaño de las imágenes a una forma objetivo y conserva la relación de aspecto mediante relleno, manteniendo los objetos sin distorsiones y todo el campo de visión.
El letterboxing es una técnica para cambiar el tamaño de una imagen que conserva su relación de aspecto y añade relleno para alcanzar un tamaño objetivo. Escala la imagen de forma uniforme y, después, rellena el espacio sobrante con píxeles de borde, manteniendo las proporciones de los objetos y todo el campo de visión. En visión artificial, prepara imágenes de distintas formas para modelos que aceptan una forma de entrada común.
Fuera del ámbito de la IA, letterboxing también describe la visualización de películas panorámicas con barras horizontales.
Cómo conserva el letterboxing la geometría de la imagen#
La relación de aspecto es la proporción entre la anchura y la altura de una imagen. Durante el preprocesamiento de datos, el letterboxing elige el menor de dos factores de escala: la anchura objetivo dividida por la anchura original y la altura objetivo dividida por la altura original. Ambas dimensiones usan ese factor, por lo que la imagen redimensionada cabe dentro del tamaño objetivo. Los píxeles restantes se convierten en relleno. La operación de TensorFlow para cambiar el tamaño y añadir relleno aplica este método con bordes de valor cero.
Por ejemplo, una imagen de 1280 x 720 ajustada a un tamaño objetivo de 640 x 640 usa un factor de escala de 0,5. Su contenido pasa a medir 640 x 360, por lo que quedan 280 filas de relleno: 140 arriba y 140 abajo si se centra. Las imágenes verticales reciben bordes laterales. Por tanto, una imagen con letterboxing puede tener relleno horizontal o vertical, y el tamaño objetivo también puede ser rectangular.
Ultralytics YOLO usa la transformación LetterBox para conservar la geometría en las entradas de detección, segmentación y estimación de pose, con un valor predeterminado de 114 para el relleno gris. Para la predicción de detección, segmentación y pose con YOLO26, el relleno con rectángulo mínimo reduce los bordes a un múltiplo de stride compatible cuando las formas del lote y el backend de inferencia lo permiten.
Letterboxing frente a estiramiento y recorte#
Tres opciones de cambio de tamaño gestionan de forma distinta las discrepancias entre las formas de la imagen y del tamaño objetivo:
- Letterboxing conserva las proporciones y la imagen completa, y destina parte de la entrada al relleno.
- El estiramiento cambia por separado la anchura y la altura para llenar el tamaño objetivo. Los círculos se convierten en elipses cuando los factores de escala son distintos.
- El recorte conserva las proporciones al combinarlo con un cambio de tamaño uniforme y, después, elimina el contenido que queda fuera de la región seleccionada. Los objetos cercanos a los bordes de la imagen pueden quedar cortados.
Estas opciones afectan a la detección de objetos, donde importan las formas y las posiciones, y a la clasificación de imágenes, donde el recorte modifica la información visible de una clase.
El relleno también consume espacio de entrada. En el ejemplo de 1280 x 720, el contenido de la imagen ocupa el 56,25 % del cuadrado y el relleno ocupa el 43,75 %. El submuestreo reduce los detalles finos del contenido; añadir píxeles de borde no aporta detalles adicionales de los objetos. Para imágenes de alta resolución que contienen objetos pequeños, la inferencia por mosaicos procesa regiones separadas de la imagen con una escala efectiva mayor para los objetos.
Ejemplo de letterboxing en Python#
Instala Pillow con pip install pillow. Su operación ImageOps.pad cambia el tamaño de una imagen y la centra en un lienzo con relleno. Este ejemplo usa la fotografía de un autobús distribuida para tutoriales de visión.
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}")Las dimensiones de salida son (810, 1080) -> (640, 640), expresadas como anchura y altura. La imagen guardada contiene la fotografía completa redimensionada a 480 x 640, con un borde de 80 píxeles a cada lado.
Transformación de anotaciones y predicciones#
El letterboxing transforma tanto el sistema de coordenadas como los píxeles. Todas las coordenadas de los cuadros delimitadores deben escalarse y desplazarse según el relleno izquierdo o superior. La misma geometría se aplica a los puntos clave en la estimación de pose y a los contornos de los objetos en la segmentación de instancias. Si no cambias las anotaciones durante el entrenamiento, los objetivos quedan desalineados respecto a los objetos que describen.
Tras la inferencia, el reajuste de escala de coordenadas invierte la transformación: resta el desplazamiento del relleno y, después, divide por la escala de redimensionamiento. En un cuadro correctamente situado por lo demás y con relleno distinto de cero, omitir ese desplazamiento desplaza el cuadro y reduce su intersección sobre unión con la verdad de referencia. En el ejemplo del autobús, un punto en las coordenadas con relleno (320, 320) se transforma en las coordenadas originales (405, 540) tras restar 80 a x y dividir ambas coordenadas por 640 / 1080.










