打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
好色之图 | 玩转图形信号处理,最复杂的细节问题要如何入手?

前言:

这篇文章是我从事ISP研究数年来的一些经验总结,没有用到深奥的理论知识,有的只是根据实际状况来处理的一些常规方法,以及曾经犯过的错误总结。我想把ISP function的原理用简单浅显的语言描述出来,希望对初学者有所帮助。这里的ISP主要是指从CMOS  sensor输出的bayer pattern,到转换成通用的YUV或者YCbCr格式的过程,通常用于USB摄像头/监控摄像头/手机/平板等芯片设计中。

 

4.细节

细节部分会介绍去噪denoise,Bayer pattern 转 RGB(即interpolation),Edge enhance(即Sharp)以及边缘伪彩色false color。这部分内容是ISP中最复杂的,需要较庞大的计算量和Memory。任何一个function都可以在网上找到不少的论文,这里我只说明一些基本原理和关键因素,不讨论详细的实现算法。


4.1 去噪Denoise

首先我们把Noise 分成三类,分别是高斯白噪声,坏点,受伤点。这三类分别有不同的处理方法。


坏点Dead pixel是指有些像素不受拍摄景物影响,始终为固定的一个数值,通常为最大值或者最小值,也就是常说的亮点和黑点。检测坏点的算法比较容易,因为坏点和周围的像素差异非常大,检测出来之后,可以用附近点均值替换即可。


受伤点wound pixel是指有些点在低照度下,sensor gain很大的时候,会出现一定的偏差,能够被人眼明显察觉。这些受伤点输出的值不固定,同时也受拍摄景物影响,例如比周围正常像素的数值大一些,形成不太明显的亮点,有时候还会随着时间改变,一闪一闪的。对于受伤点,不是很容易被检测输出来,好在它一般只出现在暗光条件下,如果受伤点处在平坦区域,那么可以用最大值(最小值)替换,或者中值滤波等方法消除,如果正好处在边缘上,那么就较难辨别出来,中值滤波等处理方法会使得图像模糊。坏点和受伤点对应到课本中就是椒盐噪声。


一般我们说的噪声都是指高斯白噪声,噪声的大小和sensor的增益大小成比例关系,同时ISP中的很多运算(例如Gamma,LSC,AWB,CCM等)都会放大Noise幅度。从频域来看,噪声遍布整个频域。对于高频噪声,比较容易消除,但是高频噪声和实际景物容易混淆,消除噪声的时候也会使得图像模糊。对于低频噪声,就需要花代价来消除,在任何二维空间域的去噪算法中,都需要一个以当前像素为中心的窗口,这个窗口越大,就越能检测出低频的Noise,同时也意味着越多的Memory和计算量。从空间域来看,落在平坦区域的Noise比较容易消除,落在景物边缘的Noise则真假难辨,必须在清晰度和Noise之间做一个折中的选择。
 

我所知道的可用于ISP中去除Noise的方法大概有以下一些分类(没有广泛研究过,肯定有疏漏,请包涵)。

1.首先是空间域和时间域的划分。图像是二维的,空间域是指仅对一幅图像中的二维数据处理,一般照片的去噪都是在二维空间域。时间域是指多帧图像之间的去噪,在视频中,前后Frame有着较大的相关性,对于静态场景来说就更加明显。空间域去噪算法需要考虑的是Noise和图像清晰度之间的权衡,而时间域去噪算法需要考虑的是Noise和移动物体的拖尾残影现象的权衡。
 

2.其次是基于位置和基于数值的划分。要消除Noise,一般人第一个想到的方法就是低通滤波器,以当前像素为中心,选择一个一定范围的中心对称的低通滤波器,到中心距离越近,对应位置像素的weighting越高,越远则越小,这就是基于位置的方法。另外一种是基于数值的方法,先同样选择以当前像素为中心的一个范围,把这个范围内的像素按照数值大小来排成一个序列,然后再做处理,处理的方法可以是直接选择某些点(例如最大值/最小值替换,中值滤波),也可以对这个序列再做低通滤波计算。鼎鼎有名的双边滤波就是结合了位置和数值两种思想合二为一的算法,不过其公式计算太过复杂,不适合数字电路设计实现,但是其思想是完全可以借用的。
 

3.各种变换域的处理方法。例如傅立叶变换,离散余弦变换,最有名的就是小波变换。这些域变换的基本原理都差不多,基于人眼对高频分量较不敏感的特性,对转换域中的部分数据进行归0或者缩小,以达到消除Noise(或者图像压缩)的目的。小波变换效果较好,不过由于计算量很大,在ISP中实现有很大的难度。
 

在实际应用中,变换域的方法太过复杂,不适合实时视频处理,所以常用的还是上面两大类方法。一般来说Noise的幅度总是有限度的,和实际景物边缘的变化程度有较大差距,所以通常会在平坦区域尽可能的多消除noise, 而在物体边缘则尽量保护景物细节,少做denoise处理,根据景物内容动态调整去噪算法是必须的。在另一方面,Noise的幅度大小和sensor的增益相关,当环境变换导致AE gain变化的时候,Noise的幅度变化非常大,有些sensor在低光照条件下会有64倍的AE gain,Noise满屏跳跃,几乎掩盖实际景物。有时候常会说“评价ISP好坏,就是看暗光情况下的Noise大小”,不同的Noise 幅度意味着不同的ISP算法(或者算法中的参数),所以还需要SW根据实际情况来动态调整去噪算法。因此,在真实的ISP电路设计中,去噪算法的多样性和可调整性是非常必要的。

 

Figure4.1.1 空间域去噪效果

 

除了去噪算法以外,抑制Noise根源也是去噪的一个重要手段。Noise本身无处不在,问题根源在于Noise被不断放大,也就是各种增益Gain(或者说乘法)把Noise放大了许多倍。为了达到一定的亮度,Sensor的AE gain通常没有办法改变,能改变的只有ISP自身。常用的抑制Noise手段包括:

  • 降低Lens shading correction曲线的幅度,让周边稍微暗一些,减少周边Noise。
  • 降低Gamma curve在暗处的斜率,减少暗处Noise。
  • 降低CCM系数绝对值,减少彩色噪声。
  • 降低edge enhance幅度,减少景物边缘Noise。
     

去噪方法可以说是ISP中牵涉最广,实现难度最大的一个功能,它渗透进AE,LSC,Gamma,AWB,interpolation,edge enhance等多个function,是一个系统工程。

 

4.2 Interpolation

这里说的interpolation是指把Bayer pattern data 转化为RGB data的过程,每个像素都要有完整的[R G B]三个分量。先看一下最简单的双线性插值算法。

 

Figure4.2.1 双线性插值

 

这是最简单原始的方法,确实可以得到一幅RGB图像,不过存在一些问题,例如拉链现象,有些模糊,分辨率不高,边缘有些彩色(false color)等。评价插值算法的好坏,通常用ISO12233测试纸,如下图。

 

Figure4.2.2 ISO12233测试纸
 

观察细节算法的好坏,必须把图像放大到像素级别,直接研究数值大小,下面以拉链现象为例。拉链现象出现在水平或者垂直的边缘上,是由于G分量计算不当所致。以一条水平边为例,如下图,用双线性插值的话,在水平边缘上就会出现[90, 82.5, 90, 82.5…]这样的循环重复规律。

 

Figure4.2.3
 

从图像效果来看就是类似拉链状。

 

Figure4.2.4 拉链现象(双线性插值和沿着edge方向插值)

 

要解决拉链现象,保持边缘的光滑,很直观的想法就是对G分量采取沿着边缘方向去插值,在上图中,就让G5 =(G4 + G6)/2。这样就意味着要做边缘方向性的判断,如果是垂直边,那么就会是G=(G2+G8)/2,还有各种其他方向,则可以对周边四个G分量采用不同的加权平均算法得到中心点G分量数值。边缘方向判断是interpolation算法中最重要的一个环节,是各家ISP算法的核心之一,有兴趣的同学可以查看这个方面的论文。评价图像分辨率(清晰度)的一个指标,是看ISO12233中对细密纹理的识别程度。一个好的算法可以判断出只有一个像素宽度的细条纹。

 

Figure4.2.5 interpolation识别细密纹理
 

在Bayer pattern中,一半像素是G,R和B都只占1/4,R和B信息缺失比较严重。在双线性插值算法中,R分量的计算只和周围的R相关,如果用G分量的信息去修正缺失的R分量,那么清晰度会有不小的提升。以水平方向的边缘为例:

 

Figure4.2.6 水平edge上利用G分量修正R或B
 

上图中a1和a2是修正系数,范围在0~1之间。这种常用的计算方法不仅提高了清晰度,也可以缓解false color现象。不过从另一方面来看,这种修正会增加Noise幅度,原本R分量自身有一定的Noise分布概率,现在叠加了G分量的Noise,那么最大Noise幅度会提高。因此系数a1和a2需要根据场景,Noise幅度等因素权衡选择。

 

整体来说,Interpolation算法大致过程就是先边缘方向检测,然后沿着方向去做插值,兼顾Noise和清晰度的平衡,顺便还可以做一些false color的处理。

 

4.3 Edge enhance

边缘增强Edge enhance和一般所说的sharp是一个近似的概念。我这样区分二者:sharp是对图像所有内容增加锐利度,包括Noise也会被放大;而edge enhance是要让真正的edge变得锐利,Noise则尽量不被放大显现出来。从算法上来说Sharp很好实现,任何课本中都会提到sharp算子,而edge enhance则要有效区分出edge和Noise,并且判断edge方向来做增强,增强的方法也很有难度,既要达到一定的锐利度MTF,又要解决边缘粗糙roughness,overshot和undershot等问题。
 

边缘增强一般在YCbCr空间进行,并且只对Y分量处理,Cb和Cr保持不变,其原理如下:

 

Figure4.3.1 edge enhance 原理

 

浅蓝色为原值,深蓝色为enhance之后的数值。从波形上看,edge enhance就是要让线条的斜率更陡一些,甚至允许出现小幅度的过冲。从数值上来看,就是让数据朝着远离邻近点均值的方向走,而且和邻近点均值的差越大,走过的距离也越大,把当前像素值和邻近点均值的差记为d;另外,edge enhance的幅度还和整个edge的变化范围有关,可以认为上图中最大值和最小值的差,记为g;最后是用户设定的锐利度s,这三者可以得出像素的edge enhance函数H(x)。

 

H(x) = x + f(d, g, s)

 

f(d, g, s)是一个和d,g,s三者都正相关的函数,但并非线性关系。这里没有统一的数学模型可以给出答案,只有仔细研究规律,多做实验,可以说的是想要得到较好的视觉效果,这个模型非常复杂,参数众多。通过不断的对参数调试练习,慢慢建立起数学计算模型和实际图像效果之间的映射关系,才能较好的平衡锐利度MTF和roughness,overshort,undershort等因素。
 

为了避免把Noise enhance出来,edge enhance在实现中还需要判断当前像素处于光滑区域还是物体边缘。当处于光滑区域的时候,则不要做edge enhance运算,或者做的幅度很小;只有在较明显的边缘上才做处理,这样避免不了边缘上的noise的影响,所以在锐利度s设定较大的时候,可以发现边缘上会有Noise闪动跳跃的情况。为了缓解这种Noise的跳跃,通常会对f(d, g, s)做最大值和最小值限制保护,并且沿着edge 方向做低通滤波来缓解Noise。

 

Figure 4.3.2 egde enhance 前后效果比对
 

整个Edge enhance的大致流程为先判断平坦区域还是边缘,对平坦区域可以不做或者少做edge enhance(甚至做smooth处理),对边缘要判断幅度大小,边缘方向,选则相对应的高通滤波器处理,最后对enhance的幅度做一定程度的保护处理。

 

4.4 False color

False color一般出现在物体边缘上,特别是白纸黑字。如下,白纸上的黑色线条,一侧偏黄,一侧偏蓝。

 

Figure 4.4.1 放大后的false color现象


False color的原因有两个,一是bayer pattern中R和B信息丢失比较严重,插值出来的R和B分量带有误差;二是镜头对不同波长的光的折射率不一样。前者比较容易理解,后者则可以通过观察发现规律。对ISO12233测试纸拍摄图片,我分别截取四周的局部图片,放大比较来看。

 

 


左上角              右上角

 

 


左下角            右下角

Figure 4.3.2 flase color呈现中心对称的特点


从上图中可以发现,黑色方块靠近图像中心的边缘有点橙色,背离中心的边缘呈现蓝色。以左上角的黑色方块为例,三种颜色分量的数值曲线有位移,如果其位移的规律按照figure4.3.3的形状,那么刚好可以解释边缘偏色的情况。

 

Figure4.3.3 RGB曲线位移


如果可以纠正这种位移,那么false color就可以明显消除。从原理上分析,解决方法比较简单,只要把B分量向着中心位置收缩,收缩的距离和像素到镜头中心的距离有关,这可以通过数学建模得到(例如抛物线)。同样R分量则要向外扩张,扩张的方式也一样用数学建模得到。实现起来则有不小难度,毕竟像素是按照矩阵方式排列的,而收缩或者扩张是360度的,需要复杂的三角函数和数据流控制机制。


对位移较小的false color处理起来相对容易,毕竟我们已知其规律,并且有周边像素作为参考。对于较大范围的false color(上图中位移较大的情况)则难有很好的解决方法,因为在当前像素的一个小范围内都是异常的色彩,无法分辨到底是true or false。


4.5小结

细节相关的function都比较复杂,较难像色彩和亮度那样直观的理解。我自己感觉细节设计其实就是数学和信号处理,需要细致的思考和探究,种种现象都可以从数学上找到对应的关系。另外像自动对焦Auto focus和缩放Zoom也和细节设计相关,前者需要边缘检测,后者需要多采样滤波。

 

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
门限图像隐藏技术的实施与改进
手摆手教你把小图片放大 且不降低质量的技巧
亚像素边缘检测评述
ISP工程师谈视频监控的图像处理和优化
限制对比度自适应直方图均衡化算法原理、实现及效果
虚增像素功能的DC“插值陷阱”
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服