Letterboxing
补边缩放会在保持宽高比的同时,将图像调整到目标尺寸并添加填充,从而避免物体变形并保留完整视野。
补边缩放是一种图像调整技术,它在添加填充以达到目标尺寸的同时保持图像的宽高比。它会按统一比例缩放图像,然后用边界像素填充未占用的空间,从而保持物体比例并保留完整视野。在计算机视觉中,它可以将形状不同的图像转换为模型所需的统一输入尺寸。
在人工智能之外,补边还指在显示宽银幕电影时添加横向黑边。
补边缩放如何保持图像几何结构#
宽高比是图像宽度与高度之间的比例关系。在数据预处理期间,补边缩放会从两个缩放比例中选择较小值:目标宽度除以原始宽度,以及目标高度除以原始高度。图像的宽度和高度都使用这个比例,因此缩放后的图像可以完整放入目标尺寸。剩余像素用作填充。TensorFlow 的调整大小并填充操作采用这种方法,并使用值为零的边框。
例如,将 1280 x 720 的图像放入 640 x 640 的目标尺寸时,缩放比例为 0.5。图像内容会变为 640 x 360,留下 280 行填充;居中时,上下各填充 140 行。纵向图像则会在两侧添加边框。因此,补边后的图像可以有水平或垂直填充,目标尺寸也可以是矩形。
Ultralytics YOLO 使用 LetterBox 变换,在检测、分割和姿态输入中保持几何结构,默认填充灰度值为 114。对于 YOLO26 的检测、分割和姿态预测,当 batch 形状和推理后端支持时,最小矩形填充会将边框缩减到与步幅兼容的倍数。
补边缩放与拉伸、裁剪的区别#
面对图像尺寸与目标尺寸不匹配的情况,三种调整方式的处理方法各不相同:
- 补边缩放会保持比例并保留完整图像,但输入区域的一部分会用于填充。
- 拉伸会分别调整宽度和高度,以填满目标尺寸。当两个缩放比例不同时,圆形会变成椭圆。
- 裁剪会在统一缩放的同时保持比例,然后移除所选区域以外的内容。靠近图像边缘的物体可能会被截掉。
这些选择会影响目标检测,因为形状和位置很重要;也会影响图像分类,因为裁剪会改变可用于判断类别的可见信息。
填充也会占用输入区域。在 1280 x 720 的示例中,图像内容占正方形区域的 56.25%,填充占 43.75%。下采样会减少图像内容中的精细细节;添加边界像素不会增加任何物体细节。对于含有小物体的高分辨率图像,分块推理会分别处理图像区域,从而在有效尺度上放大物体。
Python 补边缩放示例#
使用 pip install pillow 安装 Pillow。它的 ImageOps.pad 操作会调整图像大小,并将图像居中放置在带填充的画布上。本示例使用的是随视觉教程提供的公交车照片。
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}")输出尺寸为 (810, 1080) -> (640, 640),按宽度和高度表示。保存的图像包含完整照片,调整后的尺寸为 480 x 640,两侧各有 80 像素的边框。
映射标注和预测结果#
补边缩放不仅会变换像素,也会变换坐标系。每个边界框坐标都必须按比例缩放,并根据左侧或顶部填充量进行偏移。姿态估计中的关键点和实例分割中的物体轮廓也需要进行相同的几何变换。训练时若不调整标注,目标位置就会与其描述的物体错位。
推理后,坐标缩放还原会逆向执行这一变换:先减去填充偏移量,再除以缩放比例。对于位置正确且存在非零填充的边界框,如果忽略偏移量,边界框就会发生偏移,与真实标注之间的交并比也会降低。在公交车示例中,填充后坐标为 (320, 320) 的点,减去 x 坐标上的 80,再将两个坐标都除以 640 / 1080 后,会映射到原始坐标 (405, 540)。










