JPEG 压缩伪影修复:重压缩照片用什么参数
什么是 JPEG 压缩伪影
JPEG 是有损压缩,反复保存会累积 artifact:
- 块状:8×8 像素格子明显可见
- 振铃效应:高对比度边缘周围的彩色小点
- 色彩分块:渐变区域出现色带
- 涂抹感:细节被糊成一块
老照片扫描件、微信转发的照片、反复导出的设计文件都常中招。
CodeFormer 处理 JPEG artifact 的原理
CodeFormer 的 Codebook 里存的是高质量人脸纹理原子,它会把原图中被 JPEG artifact 破坏的纹理替换成 Codebook 里"干净的"版本。本质上是"重建"而不是"消除"。
推荐参数
python inference_codeformer.py \
-w 0.6 --input_path jpeg_artifact_photo.jpg
| 参数 | 推荐 | 理由 |
|---|---|---|
| -w | 0.5 ~ 0.7 | 居中——既让 Codebook 帮忙去 artifact,又保留原图的色彩基调 |
| --bg_upsampler | realesrgan | Real-ESRGAN 也擅长去背景 JPEG artifact |
| --face_upsample | 可选 | 看成品效果 |
和 GFPGAN 对比
GFPGAN 的 GAN 判别器对 JPEG artifact 更激进——它会直接"画"掉 artifact,效果通常比 CodeFormer 更干净。但代价是身份漂的风险更大(GAN 倾向于把脸拉向"理想人脸")。
| 维度 | CodeFormer w=0.6 | GFPGANv1.4 |
|---|---|---|
| artifact 去除率 | ~80% | ~90% |
| 身份保持 | ✅ 好 | ⚠️ 可能漂 |
| 色彩保真 | ✅ 好 | ⚠️ 可能偏色 |
| 计算速度 | 慢 | 快 |
结论:重压缩但身份重要的照片 → CodeFormer;重压缩 + 已经看不出是谁 → GFPGAN。
严重 artifact 的特殊处理
如果 artifact 非常严重(块大到影响人脸结构):
两步法:先去 artifact 再做人脸修复
# 第一步:Real-ESRGAN 单独去整图 artifact
python inference_realesrgan.py -n RealESRGAN_x4plus -i jpeg_heavy.jpg -o artifact_removed.jpg
# 第二步:CodeFormer 修脸
python inference_codeformer.py -w 0.6 artifact_removed.jpg
Real-ESRGAN 去背景和整体 artifact,CodeFormer 处理人脸细节。
为什么不能一步到位
直接跑 --bg_upsampler realesrgan 理论上是同一效果,但显式分两步有两个好处:
- 显存压力小(可以分两次跑,每次显存占一半)
- 可以在 Real-ESRGAN 那步先看到整体效果,再决定 CodeFormer 的 w 值
避免产生新 artifact 的技巧
修复完成后保存输出图时:
- ✅ 用 PNG 或 WebP(无损 / 近无损)
- ❌ 不要用 JPEG 反复保存(每次都会重新引入 artifact)
- 如果必须用 JPEG,质量设 ≥ 90
JPEG vs WebP vs PNG
| 格式 | CodeFormer 输入 | CodeFormer 输出 |
|---|---|---|
| JPEG | 可以(artifact 会被处理) | 尽量不要 |
| PNG | ✅ 最佳 | ✅ 无损 |
| WebP | ✅ 可以 | ✅ 近无损 |
小结
- CodeFormer w=0.6 + Real-ESRGAN 背景增强是处理 JPEG artifact 的标准配置
- 严重 artifact 分两步跑(先 Real-ESRGAN 去 artifact,再 CodeFormer 修脸)
- GFPGAN 去 artifact 更彻底但身份漂
- 修复后一定存成 PNG/WebP,别再回写成 JPEG