139、锐化与边缘增强算法:非锐化掩模、拉普拉斯与自适应增益控制
139、锐化与边缘增强算法:非锐化掩模、拉普拉斯与自适应增益控制
去年在调试某款旗舰手机的后置主摄时,遇到一个让人抓狂的Bug:预览画面里人物的发丝边缘出现一圈“白边”,像给头发描了层荧光。客户反馈说“照片看起来像PS过度”,但ISP的锐化强度明明只开了30%。后来查了一周,发现是锐化算法里的增益控制没做空域自适应——暗部区域的噪声被当成边缘放大了,亮部边缘反而过冲。这种问题在车载摄像头里更致命,去年某Tier1的环视方案因为锐化导致车道线边缘出现伪影,ADAS系统误判了两次刹车。
今天这篇笔记,我把锐化里最常用的三种方法掰开揉碎讲清楚:非锐化掩模、拉普拉斯算子、自适应增益控制。这些算法在ISP Pipeline里通常放在去噪之后、色彩校正之前,位置错了会出大问题。
非锐化掩模:最朴素的“以毒攻毒”
非锐化掩模(Unsharp Masking,USM)名字听着玄乎,原理其实简单得让人想笑:先对原图做高斯模糊得到“钝化版本”,然后用原图减去钝化图得到“边缘残差”,最后把残差按比例加回原图。公式就一行:
sharp = original + alpha * (original - blurred)alpha是增益系数,一般取0.5到2.0之间。但这里有个坑:alpha不能全局固定。我见过有人把alpha设成1.5,结果天空区域出现颗粒感——因为天空的“边缘”其实是噪声,被放大了。
代码实现时踩过的坑: