自学内容网 自学内容网

图像锐化(Sharp)

sharp在ISP中的位置

图像锐化模块是ISP中的重量级模块,它决定了ISP最终输出的清晰度,该模块一般都在Y域做,紧跟在降噪的后面,把降噪丢失的细节补充回来。

1.1. 图像锐化的原理

图像锐化的目标就一个:推高边缘的梯度。图像锐化的算法很多,ISP中比较常用的算法是Unsharp Masking(USM),所以本文着重介绍USM算法。USM算法的原理是先把原始图像经过低通滤波,然后用原图减去低通滤波的结果,这个时候就可以获得图像的高频分量,对高频分量乘以系数,再叠加回原图,就得到了锐化后的图像,这个过程如公式(1)所示,其中LPF是低通滤波器,λ是高频的系数,λ>0。

output=input+\lambda \times(input-LPE(input)) (1)

以下图1中左边的输入图像为例(输入图像像素值范围为0~1),LPF选择高斯滤波,窗口大小为13x13,先把输入图像做一个13x13的高斯滤波,然后用输入图像减去高斯滤波的结果得到的就是图像的高频分量,如图1(b)所示(为了把高频显示出来,对高频加了0.5,这样可以把负数也当成正数显示),设置λ=3.5,把高频分量叠加回input,得到的结果如图1(c)所示:

图1 USM锐化原理

图1(c)看起来清晰了很多,如果把图1(c)局部放大,可以看见在边缘处存在一些亮白色(其实也有黑色),这种现象称为shoot(过冲),其产生的原因是过度锐化,窗口固定不变的情况下,调整锐化系数λ可以控制shoot的明亮程度。图2就是配置不同λ获得的3种锐化效果:

图2 锐化shoot问题

从图2可以看出,λ越大,叠加到原图的高频就越大,对应的shoot也就越明显。在图像锐化算法中,锐化的shoot是评价锐化算法是否优秀的重要指标之一,shoot有时候也和调试风格有关,有些厂家会觉得保留多一点shoot可以让图像看起来更清晰,所以一般设计锐化算法的时候,都会让shoot可调,满足不同图像风格的需求。

1.2. 锐化中的shoot是什么

shoot产生的真实原因是在像素突然变化的地方窗口内的能量过于集中。图3是一张来自于论文《Adaptive Sharpening with Overshoot Control》的shoot原理说明图,它其实是图像边缘的水平灰度剖面图,表达的是图像边缘沿水平方向像素灰度值的变化情况,图中把shoot分为“overshoot”和“undershoot”两种,中文分别翻译为“上冲”和“下冲”。

图3 论文中的shoot原理图

之前提过锐化就是推高边缘的梯度,图3就是拿了一条边缘来举例,并且指明了斜率才是让图像变清晰的原因,这种实验随便找一个边缘自己也可以做,比如在图1中挑选一个边缘,为了说明这条边缘在图像中的位置,在图4中用白色横线标记出了它的位置。

图4 边缘位置示意图

图5的横坐标是图4中白色横线的位置,总共显示了200个像素,纵坐标是这些像素的灰度值,锐化前的变化趋势用黑色表示,锐化后的变化趋势用蓝色表示,其结果如图5所示:

图5 shoot示意图

 图5中的黑色是原图的边缘,在灰色进入黑色的时候灰度值是从高到低的,而从黑色进入灰色的时候正好是相反的,这个过程是有斜率存在的,斜率越平缓,边界就越模糊,斜率越陡峭,边界就越锐利。蓝色是锐化后的结果,和黑色相比,蓝色看起来更陡峭,这意味着蓝色的边缘在图像中会更清晰。

蓝色中上下突出的部分就是shoot,它和图3论文中显示出的效果类似,论文中用的是图5中右边边缘的例子,本文为了看得更清楚把窗口调的到了13x13,这样shoot就格外明显。

另外说明一下,图5和图4对比的时候,可能会感觉图4中只显示出了白色的overshoot(上冲),没有显示出黑色的undershoot(下冲),其实是有undershoot的,这是因为图4中黑色边缘的下冲显示的时候被imshow函数自动截至到0了,没显示出来,但它是存在的。

1.3. shoot和窗口size的关系

shoot在评价锐化算法的时候是一个重要的指标,通常都要求图像足够清晰的情况下shoot尽可能的小,这样图像边缘看起来更加自然,但是shoot就没什么优点了吗?不一定的,如果把图4中的黑色部分的宽度变小一些,shoot也是有积极作用的。

这次取ISO12233-2000分辨率卡的一小部分做例子,如图6(a)所示,还是用白色的线条标记出取例的位置,(b)和(c)分别是13x13和7x7窗口的锐化效果,和原图(a)相比,(b)和(c)的黑色线条都加深了,字体和线条都变得很清晰,这其实是shoot的功劳,但是细看又会发现,(b)和(c)也有少许不同,(c)的白边要比(b)弱很多,图像看起来更自然。

图6 不同窗口的shoot对比

 从图像能观察到的细节是很有限的,把图6(b)和(c)shoot亮度变化显示出来才能看得更清楚一些,图6(b)和(c)shoot亮度变化图如图7所示。

先看图7的(a)图,红框圈出的部分其实是边缘两边shoot的间隔,左边的红框还能看出两个shoot之间有一定的间隔(就是凹下去的部分),越往右shoot的间隔也就越小,到右边红框的时候两个shoot就完全合并成一个shoot了,这也是视觉上觉得线条变黑的原因。把图7中的(a)和(b)对比一下,可以看出7x7窗口的时候,两个shoot合并成一个shoot的位置要更远一点。

图7 不同窗口的shoot灰度图

 

图7的两个例子说明,锐化中shoot其实分两种,一种拥有两个波峰,另一种只有一个波峰,这两种shoot取决于边缘的宽度和低通滤波器的窗口size,如果能让低通滤波器的窗口size完美匹配图像中的所有边缘,则会获得较好的锐化效果,但是这不太可能,图像中边缘是多种多样的,而目前比较常用的几个低通滤波器,比如高斯滤波器和双边滤波器,其窗口size是不能自适应的,因此又出现了减小shoot的算法。

1.4. 减小shoot的常用方法

减少shoot的办法很多,本文挑两个常用的来测试一下效果,第一种是直接限制高频的叠加量,第二种是窗口极值法。

第一种方法很简单,设置最大阈值thred_max和最小阈值thred_min,把高频分量限制在thred_max和thred_min之间,然后再叠加回原图,就能起到减小shoot的效果,这种直接限制叠加量的方法只能解决shoot的亮度过量问题,不能解决shoot过宽的问题,于是有了第二种方法。

第二种是窗口极值法,指定shoot限定的窗口size,假设窗口大小为5x5,锐化后图像为output:

  1. 在输入图像input的每个5x5窗口内找到最大值blk_max和blk_min。
  2. 设置比例系数ratio,套用下面的公式计算限制后的shoot值:
    • Overshoot=blk_max + ratio * (output - blk_max)
    • Undershoot=blk_min - ratio * (blk_min - output)
  3. 调整最终输出,在output>blk_max的位置上用overshoot的值替换,在output<blk_min的位置上用undershoot的值替换,其它位置像素值不变。

把上面这两种shoot限制的效果分别显示出来,其结果如下图8所示:

图8 shoot限制后的效果对比

 

直接对比图8的(b)~(d)三幅图像很难看出哪种shoot效果好,有两方面的原因,第一是显示出来的时候imshow函数会自动把像素范围限制在0~1,负数部分就看不见了,第二是图像保存和上传的时候都经历了压缩,一些细节已经丢失了,所以最好的办法仍然是把边缘的灰度值显示出来仔细对比。

目前明确的知道shoot存在于两个方面,一方面是灰度值,另一方面是shoot的宽度,那么仍然用shoot原理图的方式来分析(b)~(d)的这三种有什么不同,还是用白色横线标记出取样的位置(图8红色箭头指向的位置),显示的结果如图9所示:

图9 三种shoot的原理图

图9中黑色是原图,蓝色是不做shoot限制的结果,红色是直接限制的结果,绿色是5x5窗口极值的结果。对比三种shoot的表现可以看出,直接限制的红色曲线就是在蓝色shoot的基础上砍掉了一部分,其shoot的形状和蓝色几乎完全吻合,只在峰值处有所收敛,shoot的宽度几乎没变。但是5x5窗口限制的绿色曲线明显往内收缩了,峰值和shoot宽度均有明显变化,这说明窗口限制shoot的效果要更优。

1.5. 图像锐化的另一个难点——噪声抑制

USM算法是通过增强图像的高频成分来实现锐化的图像中的噪声也属于高频成分,因此在锐化过程中,噪声往往会被一同放大。这种现象在图像的平坦区域(即没有太多细节的区域)尤为明显,因为这些区域的高频信息较少,因此噪声相对于信号的比例更高。

图10的左边是输入图像,右边是锐化后的图像,可以看见右图有明显的颗粒感,这些就是输入图像中的噪声又被锐化放大了,这在图像的平坦区域特别明显。

图10 锐化后噪声变大

一般噪声抑制的思路是调整公式(1)中的λ,高频乘以系数λ的时候把平坦区域的λ设置为0,这样平坦区域的高频信息就不会被叠加到原图上,噪声就不会被放大。

检测图像平坦区域的常用方法是检测图像纹理,这方面的常规算法是均值或者是方差,当然也有其他的算法,这里如果展开又可以另外写一篇了,暂且跳过。

1.6. 总结

总的来说,锐化也是ISP中比较难的一个模块,并且大多数时候要和图像降噪一起调试,设计锐化算法的时候有以下三点需要注意:第一是选择合适的窗口提取高频信息,窗口太小,高频信息不够,窗口太大,shoot又会很宽;第二是减小shoot;第三是抑制噪声。


原文地址:https://blog.csdn.net/OdellSwan/article/details/143027630

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!