从像素污渍到 HD:我与旧资产和 AI 修复的斗争

发布: (2026年1月16日 GMT+8 16:46)
8 min read
原文: Dev.to

Source: Dev.to

那是2023年末的一个星期四凌晨2点,我撞上了瓶颈。我正在为客户处理一次迁移工作,将他们的电商目录从旧的 Magento 1 系统迁移到现代的无头架构。后端迁移非常顺利——Postgres 正常,API 响应时间在 50 毫秒以下。但前端的效果却糟透了。

问题出在哪儿?资产。客户多年前已经丢失了原始的高分辨率摄影作品。剩下的只有 4,000 张产品图片,全部压缩到 400 × 400 像素,而且——关键点是——每一张图片的右下角都直接烙印了 “SUMMER SALE 2019” 的文字覆盖。

我的第一反应是:“我可以用代码解决这个问题。”于是我打开了 Jupyter Notebook,尝试使用 OpenCV 来掩盖文字并修复缺失的像素。我以为自己很聪明。

import cv2
import numpy as np

img = cv2.imread('product_042.jpg')
result = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
cv2.imwrite('result_smudge.jpg', result)

结果如何?看起来像是有人用湿拇指把产品抹了一遍。纹理消失了,光照也被破坏了。虽然在纯白背景下还能凑合,但在有纹理的面料或复杂渐变的场景中根本无法使用。我意识到,算法式的修复(Telea 或 Navier‑Stokes)并不理解 上下文;它只会根据相邻像素进行填补。

我需要一种能够理解图像结构的方式。我需要一种 生成式 的方法。

转向生成式修补

标准计算机视觉库的局限在于它们是减法式或操作式的——它们只是移动已有的数据。要真正修复这些图像,我需要以一种“好”的方式去幻化(hallucinate)那些从未出现过、隐藏在文字背后的数据。

这正是 AI Text Removal 与 Photoshop 中的克隆印章工具或 cv2.inpaint 根本不同的地方。它不再是复制像素,而是让扩散模型分析图像的语义上下文。如果文字覆盖在格子衬衫上,AI 不会仅仅填充成红色,而是重建格子图案,使网格线对齐。

我使用专门为此调校的现代 AI 模型进行了一批测试。效果天壤之别。AI 将 “SUMMER SALE” 文本识别为外来对象层。当它将其移除时,不会留下模糊,而是重建产品在地面投射的阴影。

权衡: 并非每次都能 100 % 完美。在约 5 % 的图像中——尤其是那些具有复杂链环图案或文字覆盖在人脸上的图像——AI 有时会生成与原始略有不同的纹理。但相较于我 Python 脚本产生的“涂抹”效果,这样的权衡是我愿意接受的。

对于开发者来说,集成此功能时,你不再考虑“掩码坐标”,而是思考“意图”。你不只是擦除,而是让模型 Remove Elements from Photo 并预测应该出现的内容。

解决分辨率危机

一旦我把文字去掉后,接下来就要面对噩梦的下半场:400 × 400 的分辨率。在现代 Retina 或 4K 显示器上,这些图像看起来像像素艺术。即使是干净的、没有文字的图像仍然模糊不清。

过去,“放大”仅仅意味着双三次插值——本质上是把像素变大并平滑边缘。这样会产生柔软、失焦的效果。我需要注入在源文件中根本不存在的细节。

我转而使用了一个 Free photo quality improver——它利用了 GAN(生成对抗网络)。以下是关键的技术差异:

方法过程结果
双三次重采样基于数学的周围像素平均。模糊,没有新细节。纹理显得平坦。
AI 照片质量增强器在数百万高/低分辨率配对上训练的深度学习模型。边缘锐利,产生逼真的幻觉纹理(例如皮肤毛孔、织物纹理)。

照片质量增强器 不仅仅是拉伸图像;它会识别出“嘿,这是皮革”,并对放大区域应用类似皮革的噪声特征。这避免了早期放大器常见的“塑料”外观。

“工作流”架构

我意识到把这些当作独立任务来处理效率低下。最佳效果来自特定的流水线顺序。如果先进行放大,我也会把文字周围的压缩伪影一起放大,使得后期更难去除文字。

拯救项目的工作流

  1. 输入 – 原始、低质量的源图像。
  2. 清理 – 首先运行 AI 文本去除(AI Text Removal)步骤。模型在未添加任何人工锐化的原始像素上表现更好。
  3. 验证 – 快速人工检查(或通过 API 的置信度评分检查)。
  4. 增强 – 将清理后的图像交给放大器(upscaler)提升分辨率至 4×。

对于少数背景完全无法挽救的主图,我实际上使用了一个 AI 图像生成应用 来创建全新的、工作室质量的背景,并将产品重新合成进去。听起来像是投机取巧,但在实际生产中,结果比纯粹性更重要。

最后思考

我花了三天时间尝试构建一个自定义的 Python 流程来保存这些图像,结果失败了。于是我转而使用专门的 AI 工作流,并在一个下午完成了迁移。

有时候需要自己动手打造工具,而有时候则要认识到技术已经超越了简单脚本的范畴。如果你在处理质量不佳的客户资产,请不要手动去纠正每个像素。重建现实的技术已经就位——只要按正确的顺序使用它即可。

Back to Blog

相关文章

阅读更多 »

AWS 如何重新定义云

在 AWS re:Invent 的现场,Ryan 与 AWS 高级首席工程师 David Yanacek 一起聊起所有关于 AWS 的话题,从 AWS 的 Black F 的真相……