图像降噪方法如下图:
空间域局部滤波
线性滤波
原图:
给原图加了四类噪声以后:
均值滤波
主要原理: 用像素邻域的灰度均值代替该像素的值
opencv里面有api 直接用api
size 用的是7
对这四张图用均值滤波 (上下是一一对应的):
size是10的时候:
尺寸越大 效果越好 但是越来越模糊。
高斯滤波
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
对应均值滤波和方框滤波来说,其邻域内每个像素的权重是相等的。而在高斯滤波中,会将中心点的权重值加大,远离中心点的权重值减小,在此基础上计算邻域内各个像素值不同权重的和。
这里简单说说自己写高斯滤波器 就三个步骤
首先根据二维高斯分布确定核里面每个位置的权重。
然后归一化
最后扩充边界 遍历像素进行卷积即可
一句话概括: 高斯滤波是根据模板中各位置的权重分布对邻域内像素进行加权平均的过程,最后用得到的值代替中心像素的值
我们先设置size是7:
size是15:
均值滤波去除椒盐噪声比 高斯滤波强
均值滤波适合去除椒盐噪声 高斯滤波适合去除高斯噪声
中值滤波也可以去除椒盐噪声
泊松噪声俩个方法都还可以 毕竟泊松噪声看起来改变不是很大
这俩方法都比较依赖尺寸大小 越大效果越好但是越模糊
毕竟是简单的滤波方法 要求不能太高。
非线性滤波
中值滤波
跟均值滤波一样 实现起来很简单
size=7:
双边滤波
一种非线性的保边滤波算法 是一种结合图像的空间邻近度与像素值相似度的处理办法 在滤波时,该滤波方法同时考虑空间临近信息与颜色相似信息,在滤除噪声、平滑图像的同时,又做到边缘保存。
几何空间距离 + 像素差值 这两个因素
简单来说 就是计算权值时不只考虑 空间邻近度(距离)还考虑了像素相似度(像素差值)
对高斯噪声 进行处理:
opencv自带的 处理效果:
**小结 双边滤波是一种非线性的保边滤波算法
主要是结合了空间邻近度和像素值相似度
相比于高斯滤波 它在确定权重系数时不仅考虑了像素间的几何距离 还考虑了像素值之间的差距
在消除噪声 平滑图像的同时 也能保留边缘 常用到磨皮美颜算法中 但是缺点在于只能保留整体的一个形状 **
空间域非局部滤波 NLM
Non-Local Means顾名思义,这是一种非局部平均算法。局部平均就是在像素周围的邻域取均值 非局部均值滤波就意味着它使用图像中的所有像素,这些像素根据某种相似度进行加权平均。滤波后图像清晰度高,而且不丢失细节。
它利用了整幅图像进行去噪。即以图像块为单位在图像中寻找相似区域,再对这些区域取平均,较好地滤除图像中的高斯噪声。
怎么衡量图像块间的相似度呢
可以根据 两个邻域里像素间亮度差值的平方 来估计
高斯滤波使用当前滤波点与矩形窗口内其它点的空间欧式距离来计算权重,距离越近权重越大;而非局部均值滤波则使用当前滤波点的邻域块与矩形窗口内其它点的邻域块的相似度来计算权重,相似度越大则权重越大。
计算太慢了
非局部算法获得的信噪比比双边滤波略高,有时候还不如双边滤波。但是,非局部滤波是一种基于快的匹配度来计算滤波权值的,所以能获得比较好的视觉效果。然而,它的计算复杂度实在是太高了。最原始非局部均值算法是在整个图片中进行块搜索,根据块的匹配度来计算权值。实际执行过程,都会把搜索区域限定在一个局部的搜索窗口中。
小结:NLM 非局部平均算法 主要涉及一大一小两个矩形 首先是待处理的局部区域 另一个较大的矩形叫纹理替换搜索区域 这俩矩形咋选取呢 就是以遍历到的像素为中心 取一大一小矩形区域
然后将大的矩形区域 分成若干个小区域 计算待处理的局部区域和 每个分割的小区域的相似度(均方误差MSE) 通过相似度确定权重 从而计算取值
频率域滤波
小波变换
总结
①对于均值滤波来说 尺寸越大 效果越好 但是越模糊
均值滤波会把噪声分化/弱化到周围像素上,然后噪声幅度变小,但是噪声面积变大
②高斯滤波是利用基于邻域的加权平均值代替中心点像素值 但是权重仅考虑距离 没有考虑图像本身的内容
③中值滤波对椒盐去除效果较好 但是因为选取的是中值 如果存在一些点 线之类的让像素发生突变的邻域 那么中值滤波可能就会把这些不是噪声的点 线去掉 从而丢失图像信息
④双边滤波 加了像素相似度计算权值 优点在于可以保存边缘 但是它只能保留整体形状 比较适合美颜磨皮之类的。
关于磨皮美颜 其实可以用双边滤波 但是可能需要先人脸识别 涉及更复杂的知识
如果只是关于人脸的图片 可以直接双边滤波试下 可以看下面的例子