目录
1. 噪声模型
💡 对于目前效果最好的深度学习降噪算法,其难于实际应用的一个方面就是训练模型所用的噪声都是高斯噪声,而我们摄像头拍摄图像的实际噪声要远比高斯噪声复杂,因此如果更好地对图像噪声进行建模非常重要
💡 通常用均方误差(MSE)和峰值信噪比(PSNR)描述噪声:MSE越大,失真率越大;PSNR越大,失真度越小
- 高斯噪声,随机噪声,服从高斯分布,主要特点表现为麻点,是最常见也是最重要的的一种噪声,众多的图像降噪算法都是以降低高斯噪声为目标设计
- 椒盐噪声(脉冲噪声、尖峰噪声),由图像传感器、传输信道、解码处理等产生的黑白相间的亮暗点噪声。往往由图像切割引起。去除脉冲干扰及椒盐噪声最常用的算法是中值滤波
- 一种是盐噪声( salt noise ,白色) ,另一种是胡椒噪声( pepper noise,黑色 )
- 前者是高灰度噪声,后者为低灰度噪声。椒盐噪声同时出现,呈现在图像上就是黑白杂点
- 瑞利噪声,对于图像直方图近似倾斜的图像中的噪声建模较为有效
- 伽马噪声,相对瑞利噪声分布会更加倾斜
- 指数噪声,相对伽马噪声又会进一步倾斜
- 均匀噪声(量化噪声),由于将模拟数据转换为数字数据而引起,是幅度量化过程中固有的
- 泊松噪声(散粒噪声),我们知道,光源每秒发射的光子到达CMOS的越多,则该像素的灰度值越大。但是因为光源发射和CMOS接收之间都有可能存在一些因素导致某个光子并没有被CMOS接收到或者某个像素一时间段内发射的光子特别多,所以这就导致了灰度值的波动,也就产生了泊松噪声
- 斑点噪声,在相干成像系统(如雷达,激光和声学等)中可以看到斑点噪声的出现,在光学成像系统中很少出现
- 周期性噪声,无法用概率密度函数进行描述,也无法在空间域中进行消除,通常的方法是通过频域中的带阻滤波器进行消除
2. 图像滤波
图像降噪:滤波、稀疏表达、聚类低秩、统计模型、深度学习。本文重点介绍图像滤波算法【其他算法有时间再补充】。有关滤波、模糊、去噪、平滑这些概念的区别,可以参考这里
2.1 均值滤波(线性,局部)
- 基本思想:在图像上对目标像素给一个模板,该模板包括了其周围的临近像素,用模板中的全体像素的平均值来代替原来像素值
- 存在缺陷:既没有很好地去除噪声点,也破坏了图像的细节反而使图像变得模糊
2.2 中值滤波(非线性,局部)
- 基本思想:它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值,从而消除孤立的噪声点
- 优点:在一定程度上可衰减噪声影响(拉小灰度差异),对椒盐噪声非常有效
- 不足:图像的边缘轮廓细节变模糊(边缘轮廓也做均值,导致变模糊)
2.3 高斯滤波(线性,局部)
- 基本思想:平滑高斯滤波就是将均值滤波中的平均值改为高斯加权平均值,邻域中距离目标像素越远的像素灰度值权重越小。在实际场景中,我们通常会假定图像包含的噪声为高斯白噪声,所以在许多实际应用的预处理部分,都会采用高斯滤波抑制噪声,如车牌识别等
- 模拟人眼,关注中心区域。【人眼特性:离关注中心越远,感受精度越模糊】
- 顺势会问:
- OpenCV怎么调用?
- 答:cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)
- src:输入的图像
- ksize:高斯卷积核的大小。注意:卷积核的高度和宽度都应为奇数,且可以不同
- sigmaX:水平方向的标准差
- sigmaY:垂直方向的标准差,默认值为0,表示与sigmaX相同
- borderType:边界类型
- 参数标准差σ的设置
- σ越大,分布越分散,各部分比重差别不大,于是生成的模板各元素值差别不大,类似于平均模板
- σ越小,分布越集中,关注区域越集中,反映到高斯模板上就是中心元素值远远大于其他元素值,于是自然而然就相当于中间值得点运算
- 怎么实现高斯滤波?更高效的方式是什么【面试被问到过🐱👤】
- 答:最常见的就是滑窗实现,其循环运算次数为m×n×ksize×ksize,其中m,n为图像的尺寸;ksize为高斯滤波器的尺寸。这样其时间复杂度为O(ksize^2),随滤波器的模板的尺寸呈平方增长,当高斯滤波器的尺寸较大时,其运算效率是极低的
- 为了,提高滤波的运算速度,可以将二维的高斯滤波过程分解开来。由于高斯函数的可分离性,尺寸较大的高斯滤波器可以分成两步进行:首先将图像在水平(竖直)方向与一维高斯函数进行卷积;然后将卷积后的结果在竖直(水平)方向使用相同的一维高斯函数得到的模板进行卷积运算。 这样分解开来,算法时间复杂度为O(ksize),运算量和滤波器的模板尺寸呈线性增长。具体实现过程可以参考这里
-
第三种方式,先经过一次FFT,然后再乘上高斯滤波函数,最后反变换
-
- OpenCV怎么调用?
2.4 双边滤波(非线性,局部)
- 在高斯滤波的基础上,双边滤波的权重不仅考虑了像素的欧氏距离(如普通的高斯低通滤波,只考虑了位置对中心像素的影响),还考虑了像素范围域中的辐射差异(例如卷积核中像素与中心像素之间相似程度、颜色强度,深度距离等)
- 对于高斯噪声,高斯滤波和双边滤波效果上肉眼看上去可能差不多,但都比均值滤波要好,但是毕竟局部空间域算法比较简单
2.5 引导滤波
- 一种自适应权重滤波器,是何凯明在读博士期间提出的一种去噪保边算法,主要应用于图像增强、融合、去噪、去雾以及三维重建等。能够克服双边滤波的梯度翻转现象,在滤波后图像的细节保持上效果更好
- 最大的优势在于时间复杂度与窗口大小无关,因此在使用大窗口处理图片时,其效率更高
2.6 离散傅里叶变换DFT(变换域)
- 原始图像经过二维DFT得到二维频谱,进行各种滤波操作(低通、高通等)通过反变换得到降噪图像,具体细节参考这里
-
将二维频谱与设计好的滤波模板进行乘积,为什么是乘积呢?因为根据傅里叶变换的性质,频率域中的乘积相当于空间域中的卷积
-
二维离散傅里叶变换是最基本的形式,而实际应用中采用的肯定是快速傅里叶变换
-
采用离散傅里叶进行滤波会有更直观,但是由于空间域可以进行并行计算,因此实际滤波是还是更加倾向于空间域滤波
2.7 维纳滤波(变换域)[推导参考这里]
- 不仅可以进行图像降噪,还可以消除由于运动等原因带来的图像模糊
- 在图像拍摄过程中由于各种原因会造成图像退化(退化模型),空域滤波器无法解决图像退化问题,逆滤波效果因为噪声的存在会变得非常差,这个时候就需要用到维纳滤波
- 这里引入图像退化模型(模糊、抖动)的概念(区别于噪声模型)
- 维纳滤波是采用优化的方法推导的,优化的目标是估计退化图像和参考图像频谱的均方差最小
2.8 小波硬阈值滤波(变换域)
- 在小波变换之后,将输出系数进行由大到小的排序,然后将前10%大的通过小波反变换成图像,因为噪声不属于图像的主要信息,因此通过这种方法会有降噪的效果,这种算法又称为小波硬阈值滤波
- 通过图像小波变换进行降噪的效果起码比傅里叶变换的效果要好,但是小波变换的速度还是比较慢,实时运行应该比较困难
- 小波变化提取信息主要是在水平、垂直和对角线三个方向,在小波的基础上,还有curvelet、contourlet等一些更加高级的变化,之后有需要再进一步了解
2.9 BM3D算法(混合域)
- BM3D算法是目前非AI降噪算法中最经典的算法之一,在此算法上改进得到的算法不计其数
- 算法一共分为两阶段,第一阶段主要实现了一个基于patch的硬阈值滤波,第二阶段主要实现了一个基于patch的维纳滤波,这里注意,BM3D的处理都是基于patch进行的,其中硬阈值滤波的过程只是一个预滤波的过程,而实际的降噪结果是来自于第二阶段的维纳滤波。
参考来源:
数字图像处理(六)图像降噪处理_xcjlk的博客-CSDN博客_数字图像处理降噪
【数字图像处理基础算法】_小武~~的博客-CSDN博客_数字图像处理算法
图像降噪算法——图像降噪算法总结_Leo-Peng的博客-CSDN博客_图像降噪算法