Super Resolution
超分辨率通过预测插值无法恢复的细节,从低分辨率图像重建出更高分辨率的图像。内容涵盖模型和代码。
超分辨率(SR)是一类计算机视觉技术,旨在从低分辨率输入重建出更高分辨率的图像或视频。传统的放大方法,例如双三次插值,只是将现有像素铺展到更大的网格上,因此边缘会变软,精细纹理也会变模糊。经过学习的 SR 模型会根据它从低分辨率和高分辨率图像对中学到的模式,预测缺失的高频细节,例如清晰的边缘、文字笔画以及织物或树叶纹理。单图像超分辨率(SISR)仅使用一张图像;视频超分辨率还会利用相邻帧,因为每帧都包含有关同一场景的略有不同的信息。
超分辨率如何运作#
超分辨率是一个病态问题:许多不同的高分辨率图像缩小后都会变成同一张低分辨率图像,因此模型必须根据从自然图像中学到的知识,选出最合理的结果。训练图像对的制作方法是:取高分辨率图像,并通过模糊、按 2× 或 4× 等比例下采样、添加噪声和压缩等方式降低其质量。退化模型决定了网络能够处理哪些真实输入;Real-ESRGAN使用随机串联的退化操作进行训练,因此既能修复真实照片和视频,也能修复经过干净下采样的图像。
超分辨率架构的发展紧随深度学习的整体趋势。SRCNN 于 2014 年证明,三层卷积神经网络(CNN)优于传统方法。ESPCN在低分辨率下执行卷积,只在最后通过子像素卷积放大图像;子像素卷积会将通道重新排列成更大的图像,使其速度足以处理实时 1080p 视频。EDSR 堆叠了大量残差块,SwinIR由移位窗口视觉 Transformer块构建而成,而扩散模型则通过迭代去噪生成细节。
损失函数决定了“更好”的含义。L1 或均方误差等像素损失会最大限度地贴合原始图像,但会对各种可能结果取平均,因此画面看起来会很平滑。SRGAN加入了基于深层特征的感知损失,以及来自生成对抗网络(GAN)的对抗损失,从而生成清晰、逼真的纹理;但这些纹理可能无法与真实场景逐像素匹配。在医学和法证成像中,这会带来风险,因为虚构的细节可能被误认为证据。
超分辨率的衡量方法#
保真度通常用峰值信噪比(PSNR)和结构相似性指数(SSIM)衡量。PSNR 是一种以分贝为单位、采用对数刻度的均方误差度量。LPIPS 等感知指标会比较深层特征,更贴近人类对真实感的判断。下面的对比会将图像缩小 4×,再分别用双三次插值和来自 OpenCV 的预训练 ESPCN 模型重建:
import urllib.request
import cv2 # cv2.dnn_superres requires: pip install opencv-contrib-python
# Download a pretrained 4x ESPCN model and a test image cropped to a multiple of 4
urllib.request.urlretrieve("https://github.com/fannymonori/TF-ESPCN/raw/master/export/ESPCN_x4.pb", "ESPCN_x4.pb")
urllib.request.urlretrieve("https://ultralytics.com/images/bus.jpg", "bus.jpg")
original = cv2.imread("bus.jpg")[:1080, :808]
# Simulate a low-resolution capture by shrinking the image 4x
low_res = cv2.resize(original, (202, 270), interpolation=cv2.INTER_CUBIC)
# Upscale 4x with bicubic interpolation and with the learned ESPCN model
bicubic = cv2.resize(low_res, (808, 1080), interpolation=cv2.INTER_CUBIC)
sr = cv2.dnn_superres.DnnSuperResImpl_create()
sr.readModel("ESPCN_x4.pb")
sr.setModel("espcn", 4)
espcn = sr.upsample(low_res)
# Higher PSNR means the reconstruction is closer to the original image
print(f"Bicubic: {cv2.PSNR(original, bicubic):.2f} dB, ESPCN: {cv2.PSNR(original, espcn):.2f} dB")它会打印 Bicubic: 19.51 dB, ESPCN: 20.52 dB。1 dB 的提升相当于均方误差降低约 21%,模型文件大小约为 100 KB。
超分辨率与相关术语的比较#
- 图像复原: 从退化图像中恢复干净图像的更广泛领域,包括去噪、去模糊和去除压缩伪影。超分辨率是同时增加像素数量的复原任务;现代模型通常还能一次处理多种退化。
- 图像修复: 填补缺失或被遮挡的区域;超分辨率则为完整但粗糙的图像补充细节。
- 帧插值: 在现有帧之间合成新帧,以提高时间分辨率,是空间超分辨率在时间轴上的对应任务。
- 生成式 AI: 文生图模型根据提示词创建图像。超分辨率以输入图像为条件,必须忠实保留图像内容;许多图像生成器会将扩散式放大器用作最后一个阶段。
实际应用#
- 游戏: NVIDIA DLSS 以较低分辨率渲染帧,再用神经网络进行放大,从而在保持相近视觉质量的同时提高帧率。
- 视频流媒体与档案影像: 广播机构和电影修复人员会将标清及档案影像放大,以适配 HD 和 4K 显示器。
- 卫星图像分析: 分析人员会增强低成本影像的清晰度,以绘制建筑物、道路和车辆的位置。
- 医学图像分析: 研究系统会根据采集速度更快、分辨率更低的 MRI 数据重建高分辨率 MRI,从而缩短患者在扫描仪中的停留时间。
超分辨率也可作为预处理步骤,用于在低分辨率来源中检测小目标。Ultralytics YOLO26会通过调整每个输入的尺寸,将其缩放到 imgsz,默认值为 640 像素,并使用双线性插值;因此,320×240 的摄像头画面会在检测前放大 2 倍。如果使用 2 倍超分辨率模型取代插值,检测器就能获取重建后的边缘,改善对面部、车牌以及航拍视图中车辆等小型远距离目标的检测效果。










