轻轻拖动相机的“锐度”滑块,文字边缘变清楚、树叶更有层次;继续加大,建筑轮廓旁出现白线,皮肤毛孔和噪点也被一起放大。锐化没有创造新的光学分辨率,它只是增强局部变化,让边缘在人眼看来更陡。
锐化增强的是什么
图像中缓慢变化的区域属于低频,快速变化的边缘与纹理属于高频。一个简单模型是:
是模糊图,原图减去它得到高频层,再加回:
这就是 Unsharp Mask 的核心。
Unsharp Mask:先模糊,反而更锐
原图减去模糊图得到高频细节,再按 Amount 加回原图。名称来自暗房遮罩,不是把输出变模糊。
蓝线超过 1 或低于 0 的部分是过冲/欠冲。立即裁剪会隐藏数值,却留下可见 halo。
Radius 决定多大尺度被视为细节,Amount 决定加回多少。Radius 小主要强调细线,Radius 大会在宽边缘两侧产生更宽的亮暗带。
为什么“先模糊”反而能锐化
模糊图保留局部基底,原图与模糊图之差则突出变化。名称里的 unsharp mask 来自传统暗房:用一张不清晰的负片作为遮罩增强局部对比,并不是要求最终输出不清晰。
Python 实现:
import numpy as npfrom scipy.ndimage import gaussian_filter
def unsharp_mask(image, sigma=1.2, amount=1.0, threshold=0.0): image = image.astype(np.float32) blurred = gaussian_filter(image, sigma=sigma) detail = image - blurred detail = np.where(np.abs(detail) >= threshold, detail, 0.0) return image + amount * detail示例没有立即 clip,因为过冲和欠冲正是需要观察的结果。输出范围策略应由后续管线明确决定。
卷积核怎样完成锐化
拉普拉斯锐化可写成 核。四邻域版本的一种形式是:
卷积核里为什么有负数
中心权重大于 1,邻居为负,所有系数仍相加为 1:平坦区域保持不变,局部变化被增强。
核系数和不为 1 会同时改变 DC 亮度。整数实现还要考虑缩放、舍入和中间位宽。
系数和为 1,所以常量区域保持不变;中心正权重和邻域负权重会增强局部差。八邻域能感受对角方向,却更容易同时增强噪声。
Halo 从哪里来
理想黑白阶跃经过锐化后,亮侧可能超过白色,暗侧可能低于黑色。这叫 overshoot 与 undershoot。最终裁剪到显示范围以后,数值虽合法,边缘两侧仍留下亮带和暗带,也就是 halo。
大 Radius 产生宽 halo,高 Amount 产生强 halo。两者必须结合输出分辨率和观看距离判断:在缩略图上不明显的白边,原尺寸可能非常刺眼。
Threshold 为什么有用
平坦区域的微小变化大多是噪声,高频层却会把它们当细节。Threshold 只增强超过门限的残差:
Threshold:别把每个噪点都当细节
只有高频残差超过门限才增强。门限能保护平坦区,却也可能放弃低对比真实纹理。
门限应结合噪声尺度。固定阈值在高 ISO 暗部可能太松,在干净亮部又可能太紧。
门限太低会增强噪点,太高会损失低对比纹理。合理门限应参考噪声模型:高 ISO 暗部的阈值通常需要更高,干净亮部则可以更敏感。
锐化不能恢复已经丢失的信息
失焦、运动模糊和降采样会丢失频率信息。Unsharp Mask 只能提高剩余边缘的局部对比,不能知道原本被积分掉的细节是什么。去卷积可以在已知 PSF 和噪声模型下做更明确的逆问题,但同样会受到噪声和零频响应限制。
因此,“看起来更锐”不等于“真实分辨率更高”。评估时要同时看线对、斜边 MTF、halo 和噪声,而不能只看主观冲击力。
先降噪还是先锐化
先降噪,还是先锐化
锐化会把噪声当作高频细节放大。交换顺序后,最终边缘和残余噪声都不同。
先降噪是常见起点,但两阶段仍应联合调参。过度降噪后再锐化只能增强剩余轮廓,无法恢复已丢失纹理。
噪声属于高频。先锐化会把噪点扩大,后面的降噪不得不用更强参数压回去,真实纹理也更容易受损。常见顺序是先降噪,再进行适度锐化。
但过度降噪以后再锐化不会找回细节,只会强化被平滑后的轮廓。降噪和锐化应联合调参,而不是各自追求“最干净”和“最锐”。
Debayer 与锐化的关系
Debayer 会产生自身的边缘响应、假色和 zipper。过早锐化 Bayer 数据容易把 CFA 结构和噪声一起增强;通常先完成 DPC、降噪和 Debayer,再在亮度或 RGB 域锐化。
有些高质量 demosaic 会内部完成边缘重建,后续锐化要避免重复增强。测试必须包含斜线、细条纹和高饱和彩色边缘,而不只是灰度文字。
亮度锐化与 RGB 逐通道锐化
逐通道锐化可能让 R、G、B 在边缘产生不同过冲,形成彩边。把图像转换到亮度/色度表示,只锐化亮度,通常更稳定;但转换本身必须明确色彩空间和传递函数。
在线性光中锐化更接近信号模型,在 Gamma 编码亮度上锐化则更贴近显示对比感受。两者效果不同,不存在脱离管线目标的唯一正确域。
输出缩放之后为什么还要锐化
Resize、显示缩放和打印会再次改变边缘。因此常把锐化分成捕获锐化、创意锐化和输出锐化:
- 捕获锐化补偿镜头、低通和采样造成的轻微软化;
- 创意锐化强调主体或局部结构;
- 输出锐化针对最终尺寸与媒介补偿缩放。
在大图上一次性重锐化,再缩到很小,常常得到不合适的 halo。输出尺寸应成为参数的一部分。
整数和边界陷阱
带负系数的卷积不能直接在无符号类型中累计,否则会下溢。应使用足够宽的有符号或浮点中间值,再统一舍入。
图像边缘需要镜像、复制或明确有效区。零填充会让四周突然遇到黑色,锐化后出现亮边。Alpha 图像还要注意预乘:透明边缘的隐藏 RGB 可能被卷积带入可见区域。
验证清单
- 单色平坦区域均值是否保持不变;
- 黑白阶跃的 overshoot、undershoot 和 halo 宽度;
- 斜边、细线、文字、头发和周期纹理;
- 不同 ISO 下噪声放大程度;
- RGB 高饱和边缘是否产生彩边;
- 处理前后是否发生意外裁剪;
- 原尺寸、缩略图和目标显示尺寸分别检查;
- Denoise → Sharpen 与 Sharpen → Denoise 对比;
- 单次锐化和多阶段重复锐化对比。
锐化的核心不是“加清晰度”,而是控制高频层。Radius 选择尺度,Amount 选择强度,Threshold 选择哪些变化值得增强。理解过冲、噪声和处理顺序以后,白边就不再是偶然副作用,而是可以测量和约束的结果。