非局部平均(Non-local means)是一种影像降噪的算法,相较于局部(local)的算法(如高斯模糊、非等向性扩散)只使用各个目标像素附近的点来将影像平滑化来去除噪声,非局部平均算法则对各个目标像素周围定义一个区块,并且对整个影像的所有像素依照该像素周围区块的区块与目标像素区块的相似度赋予权重、进行平均,如此可以使经过处理的影像更为清晰,并且损失较少的细节。[1]
相较于其他的影像降噪算法,非局部平均在的方法噪声(method noise,定义为影像及其降噪后的结果的差值)与白噪声较为相似,而通常认为方法噪声应与白噪声尽可能相似,因此这是一个正向的结果。[2]非局部平均也被延伸至其他应用如去交错及影像内插等。
噪声模型
如同其他影像降噪算法,最简单并且普遍的噪声模型为在原始的图片上加上白噪声:
其中为原始的图片,为噪声,在白噪声的情况下为平均0标准差的i.i.d. 高斯函数,为所观测到包含噪声的图片。
算法
非局部平均的定义为:[3]
其中为要处理的图片,为整张图片的区域,为以为中心的一个区块
为及的欧几里得距离:
为一递减函数,常见的如:
为标准化的因子:
此式可以解释为图上一点经过降噪后的值为整张图片上所有点的加权平均,其中每个点的权重为该点的附近区块与附近区块的相似度(将两个区块各自的点以相同的排列视为一向量,计算欧几里得距离),再经过一指数衰减的的函数(权重将落在(0,1]区间)。
相较于局部的算法指考虑了每个点附近的点,非局部平均考虑了图上所有的点,故称为非局部。由于一张图片中最相似的点不一定是距离近的点,反之亦然,故搜寻整张图片上相似的点,利用周期性重复出现的部分如材质纹理或是伸长的边缘等进行降噪可以得到更好的结果,但由于对每个点都要搜寻整张图片上其他的点来比较相似度,故运算复杂度往往会比局部的算法高。
实作
上述的式子所定义的算法为连续的,无法在实际的数位影像中使用,在实际应用中离散化的版本为:[3]
其中为以及为中心的点的区块的相似度,作为计算点降噪后的值时点的权重,常见的作法为计算以及为中心的正方形区块的欧几里得距离的平方,再经过一个指数递减的函数,与前一节连续版本的例子相似,以彩色图片为例,完整的式子如下:
为以点为中心宽度为的正方形区域,即区间。
的下标代表图片每个像素值的三个分量(如RGB),黑白影像则无此项。
为噪声的标准差,为与相关的滤波器参数。
此权重函数可解释为将区块相似度大于某个程度(欧几里得距离的平方小于等于)的所有点都给予权重1,区块相似度较小的点权重则由于指数递减函数迅速的衰减。
区块级实作
除了上述以像素为单位的实作外(pixelwise),还有一种以区块为单位的实作(patchwise implementation):[3]
对于一个以为中心的区块,处理后的值
其中的算法与前一节的实作相同,以的大小限制搜索区域以降低计算复杂度。
最后将这些值平均可得降噪后的图片
与前一节像素级的实作相比,由于最后一步集成的步骤降低了噪声,PSNR较高,并且也减少了在边缘附近震荡的噪声,不过在保留图片细节的方面则没有明显的进步。
参考来源