最近学习了很多卷积神经网络后,回到图像去噪的问题上,在网上找了一些资料了解图像去噪,下面主要是一些总结和实现。
对于这些算法的实现用的是opencv-python。
目前常用的图像去噪算法大体上可非为两类,即**空域像素特征去噪算法和变换域去噪算法。**前者是直接地在图像空间中进行的处理,后者是间接地在图像变换域中进行处理。

(一)空域像素特征去噪算法

这个方法是针对随机噪声的。那么什么是随机噪声呢?相比于图像的真实信号来说随机噪声就是一种或高或低呈现出不确定变化的一种信号,所有的随机噪声信号求和后结果为0
基于空域像素特征的方法,是通过分析在一定大小的窗口内,中心像素和其他相邻像素之间在灰度空间的直接联系,来获取新的中心像素值的方法。
因此,该方法往往存在典型的输入参数,即滤波半径。

(1)算术均值滤波与高斯滤波

均值滤波与高斯滤波的不同之处在于:均值滤波中,滤波器中每个像素的权重是相同的,即滤波器是线性的。而高斯滤波器中像素的权重与其距中心像素的距离成比例。

算术均值滤波用像素邻域的平均灰度来代替像素值,适用于脉冲噪声,因为脉冲噪声的灰度级一般与周围像素的灰度级不相关,而且亮度高出其他像素许多。从频率域观点来看均值滤波是一种低通滤波器,高频信号将会去掉,因此可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能。

  1. 方法: 连续取N个采样值进行算术平均运算 。 L值较大时:信号平滑度较高,但灵敏度较低。L值较小时:信号平滑度较低,但灵敏度较高。均值滤波结果A’(i,j)随着L(滤波半径)取值的增大而变得越来越模糊,图像对比度越来越小。

  2. 优点: 适用于对一般具有随机干扰的信号进行滤波 这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。

  3. 缺点: 对于测量速度较慢或要求数据计算速度较快的实时控制不适用, 比较浪费RAM。
    (网图)

    import cv2
    img=cv2.imread("E:\opencv\long.jpg")
    result=cv2.blur(img,(5,5))  # OpenCV中的blur函数也就是低通滤波器
    #参数1是输入的待处理图像,参数2是低通滤波器大小
    cv2.imshow("original",img)
    cv2.imshow("Blur",result)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    


高斯模糊
高斯滤波矩阵的权值,随着与中心像素点的距离增加,而呈现高斯衰减的变换特性。这样的好处在于,离算子中心很远的像素点的作用很小,从而能在一定程度上保持图像的边缘特征。通过调节高斯平滑参数,可以在图像特征过分模糊和欠平滑之间取得折中。与均值滤波一样,高斯平滑滤波的尺度因子越大,结果越平滑,但由于其权重考虑了与中心像素的距离,因此是更优的对邻域像素进行加权的滤波算法。cv::GaussianBlur函数可作为滤波器用下面的方法调用:

gaussianResult=cv2.GaussianBlur(img,(5,5),1.5)

(2)统计均值滤波

非线性过滤器——中值滤波器。由于中值滤波不会处理最大和最小值,所以就不会受到噪声的影响。相反,如果直接采用blur进行均值滤波,则不会区分这些噪声点,滤波后的图像会受到噪声的影响。中值滤波器在处理边缘也有优势。但中值滤波器会清除掉某些区域的纹理(如背景中的树)。

方法:中值滤波首先确定一个滤波窗口及位置(通常含有奇数个像素),然后将窗口内的像素值按灰度大小进行排序,最后取其中位数代替原窗口中心的像素值。特别是消除椒盐噪声,中值滤波的效果要比均值滤波更好。

  1. 优点: 能有效克服因偶然因素引起的波动干扰, 对温度、液位的变化缓慢的被测参数有良好的滤波效果。
  2. 缺点: 对流量、速度等快速变化的参数不宜。
    当噪声像素个数大于窗口像素总数的一半时,由于灰度排序的中间值仍为噪声像素灰度值,因此滤波效果很差。此时如果增加窗口尺寸,会使得原边缘像素被其他区域像素代替的几率增加,图像更容易变模糊,并且运算量也大大增加。
import cv2
import numpy as np
def salt(img,n):  #椒盐图像for k in range(n):i=int(np.random.random()*img.shape[1]);j=int(np.random.random()*img.shape[0]);if img.ndim==2:  #灰度图img[j,i]=255elif img.ndim==3:img[j,i,0]=255img[j,i,1]=255img[j,i,2]=255return img  #BGR图像
if __name__=='__main__':img=cv2.imread("E:\opencv\long.jpg")  #读取原图像imgcopy=img.copy() #复制一份saltImage=salt(img,500)  #对图像加上椒盐噪声img_mean=cv2.blur(img,(5,5)) #均值去噪img_median=cv2.medianBlur(img,5)  #中值去噪cv2.imshow("Salt",saltImage)  #在窗口显示图像cv2.imshow("Img_Mean",img_mean)cv2.imshow("Img_Median",img_median)cv2.imshow("Img",imgcopy)cv2.waitKey(0)  #显示图像必备cv2.destroyALLWindows()  #释放窗口

可以看到确实中值滤波比均值滤波对椒盐噪声的效果要好一点。

常规的中值滤波器的窗口尺寸是固定大小不变的,就不能同时兼顾去噪和保护图像的细节。这时就要寻求一种改变,根据预先设定好的条件,在滤波的过程中,动态的改变滤波器的窗口尺寸大小,这就是自适应中值滤波器 Adaptive Median Filter。在滤波的过程中,自适应中值滤波器会根据预先设定好的条件,改变滤波窗口的尺寸大小,同时还会根据一定的条件判断当前像素是不是噪声,如果是则用邻域中值替换掉当前像素;不是,则不作改变。

(3)双边滤波

双边滤波是一种非线性的滤波方法,是结合图像的空间邻近度和像素值相似度的一种折中处理,同时考虑空间与信息和灰度相似性,达到保边去噪的目的,具有简单、非迭代、局部处理的特点。之所以能够达到保边去噪的滤波效果是因为滤波器由两个函数构成:一个函数是由几何空间距离决定滤波器系数,另一个是由像素差值决定滤波器系数。
双边滤波器中,输出像素的值依赖于邻域像素的值的加权组合,其公式如下:

权重系数w(i,j,k,l)取决于定义域核和值域核的乘积:
通俗来讲就是双边滤波模板主要有两个模板生成,第一个是高斯模板,第二个是以灰度级的差值作为函数系数生成的模板,然后这两个模板点乘就得到了最终的双边滤波模板。空域滤波器对空间上邻近的点进行加权平均,加权系数随着距离的增加而减少。值域滤波器则是对像素值相近的点进行加权平均,加权系数随着值差的增大而减少。
双边滤波器可以很好的保存图像边缘细节而滤除掉低频分量的噪音,但是双边滤波器的效率不是太高,花费的时间相较于其他滤波器而言也比较长。

void bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT )

参数解释:
. InputArray src: 输入图像,可以是Mat类型,图像必须是8位或浮点型单通道、三通道的图像。
. OutputArray dst: 输出图像,和原图像有相同的尺寸和类型。
. int d: 表示在过滤过程中每个像素邻域的直径范围。如果这个值是非正数,则函数会从第五个参数sigmaSpace计算该值。
. double sigmaColor: 颜色空间过滤器的sigma值,这个参数的值越大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
. double sigmaSpace: 坐标空间中滤波器的sigma值,如果该值较大,则意味着颜色相近的较远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当d>0时,d指定了邻域大小且与sigmaSpace无关,否则d正比于sigmaSpace.
. int borderType=BORDER_DEFAULT: 用于推断图像外部像素的某种边界模式,有默认值

img_bilater = cv2.bilateralFilter(img,9,75,75)


很明显的看到利用双边滤波得到的图像没有那么模糊,但是对于对于高频噪声的过滤也不干净。

用网上找到的一张图总结一下:

参考文章:
https://blog.csdn.net/sunny2038/article/details/9155893
https://zhuanlan.zhihu.com/p/51403693
https://blog.csdn.net/qq_27261889/article/details/80822270
https://blog.csdn.net/keith_bb/article/details/54427779

传统图像去噪方法(一)相关推荐

  1. 传统图像去噪方法(二)之引导滤波

    各向同性滤波 我们知道对于滤波器而言,在均值滤波中W时是1/n,n是w中所有像素个数.在高斯平滑中,W服从二维的高斯分布. 但是无论是均值滤波还是高斯滤波,他们都有一个共同的弱点,它们都属于各向同性滤 ...

  2. 传统图像去噪方法(三)之非局部均值去噪(NLM)

    前面基于邻域像素的滤波方法,基本上只考虑了有限窗口范围内的像素灰度值信息,没有考虑该窗口范围内像素的统计信息如方差,也没有考虑整个图像的像素分布特性,和噪声的先验知识. NLM算法使用自然图像中普遍存 ...

  3. 综述 | 图像去噪方法比较

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:CV君  来自:我爱计算机视觉 图像去噪是计算机视觉领域的传 ...

  4. dncnn图像去噪_基于强化学习的图像去噪方法与流程

    本发明属于图像处理技术领域,涉及一种基于机器学习技术,采用强化学习去除图像噪声的方法. 背景技术: 随着计算机技术的发展,人们对于图像质量的要求越来越高.但是,由于环境或拍摄设备等因素,能够获得图像通 ...

  5. 计算机视觉图像去噪原理,图像去噪方法研究进展

    管美静 珠杰 吴燕如 摘  要: 图像在采集或传输的过程中会受到随机噪声的污染,给后续的图像分割.特征提取等处理造成干扰.常见噪声分为椒盐噪声.高斯噪声和混合噪声,为了进行图像处理,需对图像去噪.文章 ...

  6. 基于深度学习的图像去噪方法归纳总结

    目录 图像去噪概述: (1)数据预处理 (2)特征提取 (3)去噪模型设计和选择 基于深度学习的图像去噪方法 基于卷积神经网络的去噪方法 基于CNN自监督学习去噪 基于CNN监督学习去噪 基于残差网络 ...

  7. 图像去噪方法总结,最全、最详细……

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 编者荐语 图像降噪的英文名称是Image Denoising, 图 ...

  8. 基于小波变换的图像去噪方法

    基于小波变换的图像去噪 前言 一.小波变换的发展 二.阈值去噪法的介绍 2.1. 基本原理 2.2. 流程图 2.3. 阈值函数的选取 2.4. 阈值的选取 2.5. 分解函数和重构函数 2.6. 峰 ...

  9. 噪点检测matlab,基于噪点检测的中值滤波图像去噪方法

    摘  要: 图像去噪是图像处理中一个非常重要的环节.针对传统中值滤波方法存在的不足,提出一种新的基于噪点检测的自适应中值滤波图像去噪方法.该方法通过自适应地改变滤波窗口的大小,局部检测并判断极值点是否 ...

最新文章

  1. iscsi-server端配置,以及clients连接。
  2. GPU Gems2 - 11 近似的双向纹理函数(Approximate Bidirectional Texture Functions)
  3. [前台]---图片上传和校验
  4. 四剑客查找字符_linux 四剑客 find 、grep、sed、awk整理
  5. 中高级PHP程序员应该掌握哪些技术
  6. PE学习.动手写PE.见缝插针
  7. Flink Kafka 端到端 Exactly-Once 分析
  8. Zookeeper、Hadoop、Sqoop、Mahout、HBase整合安装
  9. LaTeX入门——如何独立排版出一篇期刊论文
  10. 自动化技术、计算机技术核心期刊整理及介绍
  11. MySQL中文存到数据库是,springMVC保存数据到mysql数据库中文乱码问题解决方法
  12. 安卓9可用的性能监视器_监视应用程序生态系统的性能和可用性
  13. 超级好用 VMWare14 安装Mac OS10.12系统(图解)
  14. 免费AWS EC2实例
  15. Linux-DRBD
  16. 计算机系统最大的加速能力,w7系统优化加速到最大性能
  17. 当《出师表》翻译成白话文
  18. GitLabCICD实战----在.gitlab-ci.yml文件的步骤中使用git clone 另一个代码仓报错的解决办法
  19. 当前打印机不可用,请选择其他打印机
  20. 基于神经网络的人工智能,人工智能的实现路径是

热门文章

  1. 大数据开发平台-数据同步服务
  2. Java中日志的使用
  3. python编程控制机器人_基于Python开发的微信图灵机器人
  4. 【.NET】网站的打包与发布
  5. 关于单级PID及串级PID
  6. 【C语言】C语言函数
  7. 嵌入式学习(二)——刷机和led实验(看门狗、c语言、icache、重定位、SDRAM)
  8. 【疯壳·无人机开发教程1】开源编队无人机-开机测试
  9. 动态链接库、静态链接库
  10. android n miui 4s,小米Android 7.0升级:包含小米4c/4s/小米Note