这一章来整理下图像去噪相关的内容,主要包括:噪声类型,评估方法,传统去噪方法,深度学习去噪方法,常用数据集,这一章主要讲前三部分。后两部分见:计算摄影——图像去噪(二)_Turned_MZ的博客-CSDN博客
摄影中的噪声主要有3种:固定噪声、随机噪声、非均匀响应噪声。
固定噪声:这种噪声来自电路本身,在各类信号处理系统中广泛存在,信噪比(signal no noise ratio, SNR)曲线是一条斜率为20dB/dec的直线,20dB代表信号幅度是噪声信号幅度的10倍,此时信号能够比较好的保证质量。
随机噪声:光子进入传感器的过程在数学上可以用泊松分布进行建模,此时带来的噪声是与亮度的平方根成正比的,信噪比曲线是一条斜率为10dB/dec 的直线。
非均匀响应噪声:这种噪声来源于每个像素在制造时候的个体差异,即使感受相同的亮度,不同像素给出的响应也是不同的,它的信噪比是一条水平线,它决定了相机信噪比的上限。
常用的客观评估标准包括峰值信噪比(PSNR)和结构一致性相似因子(SSIM)
这是原图像与处理图像之间均方误差(MSE)相对于的对数值,其中n是每个采样值的位数,8位图像即256,PSNR定义如下:,PSNR越大表示失真越小。MSE的计算如下:,yi是去噪后图像灰度值,yi^是无噪声真实图像灰度值。
PSNR从底层信噪的角度来评估图像的质量,但是人眼对于质量的评估关注的层次其实更高,根据人类视觉系统模型,人眼观察图像有以下几个特点:
结构相似性因子是一种来源于结构相似性理论,建立在人眼的视觉特征基础上的衡量两张图像相似度的指标,其值越大越好,最大值为1,广泛用于图像质量评估领域。
结构相似性理论认为自然图像信号是高度结构化的,空域像素间有很强的相关性并蕴含着物体结构的重要信息。它没有试图通过累加与心理物理学简单认知模式有关的误差来估计图像质量,而是直接估计两个复杂结构信号的结构改变,并将失真建模为亮度、对比度和结构三个不同因素的组合。用均值作为亮度的估计,标准差作为对比度的估计,协方差作为结构相似程度的度量。
SSIM具体的计算如下:首先结构信息不应该受到照明的影响,因此在计算结构信息时需要去掉亮度信息,即需要减掉图像的均值;其次结构信息不应该受到图像对比度的影响,因此计算结构信息时需要归一化图像的方差。通常使用的计算方法如下,其中C1,C2,C3用来增加计算结果的稳定性,光度L,对比度C,结构对比度S计算如下:
ux,uy为图像的均值
dx,dy为图像的方差
d(x,y)为图像x,y的协方差。而图像质量SSIM = L(x,y)^aC(x,y)^bS(x,y)^c,其中a,b,c分别用来控制三个要素的重要性,为了计算方便可以均选择为1,C1,C2,C3为比较小的数值,通常C1=(K1×L)^2, C2=(K2×L)^2,C3 = C2/2, K1 << 1, K2 << 1,L为像素的最大值(通常为255)。当a,b,c都等于1,C3=C2/2时,SSIM的定义式就为:
SSIM发展出了许多的改进版本,其中较好的包括Fast SSIM,Multi-scale SSIM。
根据噪声引入方式的不同,噪声可分为加性噪声和乘性噪声。加性噪声的幅度和信号的幅度无关,是叠加到图像信号上的,去除相对容易。而乘性噪声取决于信号的幅度,与信号的幅度成正比,去除相对困难,但是如果将其取对数,则乘性噪声也可以认为是加性噪声,因此可以假设噪声均为加性噪声。,其中, u(x) 是原来没有噪声的图像。 x 是像素集合, η(x) 是加性噪声性,代表噪声带来的影响。 Ω 是像素的集合即整幅图像。
根据噪声的性质不同,噪声可分为脉冲噪声,椒盐噪声,高斯白噪声,莱斯噪声等。在大多数去噪的研究中,通常都将噪声当做高斯噪声进行处理。
传统的去噪方法根据去噪的原理不同可分为基于空域像素特征的方法,基于频域变换的方法和基于特定模型的方法。
基于空域像素特征的方法是通过分析在一定大小的窗口内中心像素与其他相邻像素之间早灰度空间的直接联系,来获取新的中心像素的方法。
均值滤波与高斯滤波的不同之处在于:均值滤波中,滤波器中每个像素的权重是相同的,即滤波器是线性的。而高斯滤波器中像素的权重与其距中心像素的距离成比例。
算术均值滤波用像素邻域的平均灰度来代替像素值,适用于脉冲噪声,因为脉冲噪声的灰度级一般与周围像素的灰度级不相关,而且亮度高出其他像素许多。从频率域观点来看均值滤波是一种低通滤波器,高频信号将会去掉,因此可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能。
高斯滤波矩阵的权值,随着与中心像素点的距离增加,而呈现高斯衰减的变换特性。这样的好处在于,离算子中心很远的像素点的作用很小,从而能在一定程度上保持图像的边缘特征。通过调节高斯平滑参数,可以在图像特征过分模糊和欠平滑之间取得折中。与均值滤波一样,高斯平滑滤波的尺度因子越大,结果越平滑,但由于其权重考虑了与中心像素的距离,因此是更优的对邻域像素进行加权的滤波算法。
中值滤波器是一种常用的非线性滤波器,其基本原理是:选择待处理像素的一个邻域中各像素值的中值来代替待处理的像素。主要功能使某像素的灰度值与周围领域内的像素比较接近,从而消除一些孤立的噪声点,所以中值滤波器能够很好的消除椒盐噪声。不仅如此,中值滤波器在消除噪声的同时,还能有效的保护图像的边界信息,不会对图像造成很大的模糊(相比于均值滤波器)。
中值滤波器的效果受滤波窗口尺寸的影响较大,在消除噪声和保护图像的细节存在着矛盾:滤波窗口较小,则能很好的保护图像中的某些细节,但对噪声的过滤效果就不是很好,因为实际中的噪声不可能只占一个像素位置;反之,窗口尺寸较大有较好的噪声过滤效果,但是会对图像造成一定的模糊。另外,根据中值滤波器原理,如果在滤波窗口内的噪声点的个数大于整个窗口内非噪声像素的个数,则中值滤波就不能很好的过滤掉噪声。
双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单、非迭代、局部处理的特点。之所以能够达到保边去噪的滤波效果是因为滤波器由两个函数构成:一个函数是由几何空间距离决定滤波器系数,另一个是由像素差值决定滤波器系数。
双边滤波器中,输出像素的值依赖于邻域像素的值的加权组合,其公式如下:
权重系数w(i,j,k,l)取决于定义域核和值域核的乘积:
通俗来讲就是双边滤波模板主要有两个模板生成,第一个是高斯模板,第二个是以灰度级的差值作为函数系数生成的模板,然后这两个模板点乘就得到了最终的双边滤波模板。空域滤波器对空间上邻近的点进行加权平均,加权系数随着距离的增加而减少。值域滤波器则是对像素值相近的点进行加权平均,加权系数随着值差的增大而减少。
双边滤波器可以很好的保存图像边缘细节而滤除掉低频分量的噪音,但是双边滤波器的效率不是太高,花费的时间相较于其他滤波器而言也比较长。
引导滤波是一种复杂度为O(N)的滤波算法,去噪性能非常优良,已经被广泛应用于图像去噪、高对比度图像压缩、图像融合以及图像去噪等领域。引导滤波是在引导图像的作用下指导滤波的算法,引导图像可以是图像本身或者是另外的图像。其原理可以参考下图:引导滤波(guided filter)理解和代码实现_一只菜鸟的学习日常博的博客-CSDN博客
引导滤波不像高斯滤波等线性滤波算法所用的核函数相对于待处理的图像是独立无关的,而是在滤波过程中加入了引导图像(去噪时用的是图像本身)的信息,所以引导滤波本质上就是通过一张引导图像I,对初始图像P(输入图像)进行滤波处理,使得最后的输出图像大体上与初始图像P相似,但是纹理部分与引导图像I相似,在滤波效果上,引导滤波和双边滤波差不多,在一些细节上,引导滤波更好。
非局部均值(NL-means)滤波算法的原理与实现。其核心思路与高斯滤波很相似:计算矩形窗口内所有像素点的像素值加权和,权重服从高斯分布。区别在于:高斯滤波使用当前滤波点与矩形窗口内其它点的空间欧式距离来计算权重,距离越近权重越大;而非局部均值滤波则使用当前滤波点的邻域块与矩形窗口内其它点的邻域块的相似度来计算权重,相似度越大则权重越大。
假设点A为当前待滤波点,邻域块分别取以点A和点B为中心的ksize*ksize区域,矩形窗口(也称为搜索窗口)取以点A为中心ssize*ssize大小。由于ksize和ssize都是奇数,通常传入它们的半值:half_ksize和half_ssize。所以,邻域块的大小为(2*half_ksize+1)*(2*half_ksize+1),搜索窗口的大小为(2*half_ssize+1)*(2*half_ssize+1)。如下图所示:
点A的滤波值由搜索窗口内所有点的像素值加权平均得到:
原始的NLM算法利用图像中所有的像素来估计一个像素的值,其计算量非常大,因此研究者们不断对该算法做出了以下几点改进:
NLM滤波算法对于边缘的保持能力最差。
图像变换域去噪算法的基本思想其实就是首先进行某种变换,将图像从空间域转换到变换域,然后从频率上把噪声分为高中低频噪声,用这种变换域的方法就可以把不同频率的噪声分离,之后进行反变换将图像从变换域转换到原始空间域,最终达到去除图像噪声的目的。
傅立叶变换用于分析各种滤波器的频率特性,对于一幅图像来说在分析其频率特性时,它的边缘,突出部分以及颗粒噪声往往代表图像信号的高频分量,而大面积的图像背景区则代表图像信号的低频分量。因此,使用滤波的方法滤除其高频部分也就可以去除噪声,使得图像得到一定的平滑。具体原理可以参考下面的文章,这里不再细讲了:传统的图像去噪方法(四)之变换域去噪算法_打着灯笼摸黑的博客-CSDN博客_变换域算法
有两种噪声算法,一种是非局部去噪方法Non-local method,是一种空间算法,另一种transform method是一种转换算法,都在图像去噪中得到很好的效果,所以自然而然地想:同时使用两种算法效果如何?这便引出了BM3D去噪算法。
BM3D(Block-matching and 3D filtering,3维块匹配滤波)是当前效果最好的算法之一。该算法通过相似判定找到与参考块相近的二维图像块,并将相似块按照组合成三维群组,对三维群组进行协同滤波处理,再将处理结果聚合到原图像块的位置。该算法的思想跟NL-Means有点类似,也是在图像中寻找相似块的方法进行滤波,但是相对于NL-Means要复杂许多。
算法总体流程图如下,其原理可以参考:BM3D算法学习 - 知乎
参考文档:
传统图像去噪方法(一)_打着灯笼摸黑的博客-CSDN博客_传统去噪方法
图像滤波常用算法实现及原理解析_小白学视觉的博客-CSDN博客
引导滤波(guided filter)理解和代码实现_一只菜鸟的学习日常博的博客-CSDN博客
非局部均值滤波(NL-means)算法的原理与C++实现 - 知乎
传统的图像去噪方法(四)之变换域去噪算法_打着灯笼摸黑的博客-CSDN博客_变换域算法
BM3D算法学习 - 知乎
书籍:《深度学习之摄影图像处理》