7.l滤波

学习视频可参见python+opencv3.3视频教学 基础入门

今天写的是滤波

outline

  • 均值滤波
  • 中值滤波
  • 自定义滤波
  • 高斯滤波(模糊)

图像基础常识:

噪声

  • 椒盐噪声(Salt & Pepper):含有随机出现的黑白亮度值。(加了胡椒粉,很形象了)
    • 盐=白色,椒=黑色
    • image-20201006164722769
  • 高斯噪声:含有亮度服从高斯或正态分布的噪声。高斯噪声是很多传感器噪声的模型,如摄像机的电子干扰噪声。
    • 原图与加了高斯噪声后的图片

滤波器

  • 线性滤波器
    • 线性滤波器的原始数据与滤波结果是一种算术运算,即用加减乘除等运算实现,
    • 均值滤波器(模板内像素灰度值的平均值)、高斯滤波器(高斯加权平均值)等。
    • 由于线性滤波器是算术运算,有固定的模板,因此滤波器的转移函数是可以确定并且是唯一的(转移函数即模板的傅里叶变换)。
  • 非线性滤波
    • 非线性滤波器的原始数据与滤波结果是一种逻辑关系,即用逻辑运算实现。
    • 如最大值滤波器、最小值滤波器、中值滤波器等。
    • 通过比较一定邻域内的灰度值大小来实现的,没有固定的模板,因而也就没有特定的转移函数(因为没有模板作傅里叶变换),另外,膨胀和腐蚀也是通过最大值、最小值滤波器实现的。

滤波、模糊等之间的关系

  • 一张图明白易懂
    • image-20201007120318552
  • 滤波
    • 对输入信号进行卷积处理的一个过程,其实滤波 = 卷积
    • 卷积模板/掩膜 的不同决定了不同的滤波方式,也因此产生了高通、低通、带通、带阻等基本的滤波方式。(高斯掩模最后要进行归一化处理,即映射到0-1的范围)
    • 低通滤波:就是保留将信号中的低频部分,抑制高频部分。可用均值滤波,高斯滤波处理。
    • 均值滤波:采用均值掩膜对输入信号进行卷积的滤波方式叫均值滤波。
    • 高斯滤波:采用高斯掩膜对输入信号进行卷积的滤波方式叫高斯滤波;

1.均值滤波

  • 均值滤波是低通滤波,线性滤波器,其输出为邻域模板内像素的平均值,用于图像的模糊和降噪。

  • def blur_demo(image):
        dst = cv.blur(image, (5,5))  # 卷积核为5x5,均值
        cv.imshow("blur",image)
    
  • image-20201007120959801

  • 均值滤波器使用滤波器窗口内的像素的平均灰度值代替图像中的像素值,这样的结果就是降低图像中的“尖锐”变化。这就造成,均值滤波器可以降低噪声的同时,也会模糊图像的边缘。

2.中值滤波

  • 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。

  • 中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。

  • def memedianBlur(image):
        dst = cv.medianBlur(image, 5)  # 中值模糊,对椒盐噪声去噪较好
        cv.imshow("medianBlur",dst)
    
  • image-20201006170623888

  • 去除椒盐噪声较好。

  • 中值滤波对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。这些优良特性是线性滤波方法所不具有的

3.自定义滤波

  • def custom_blur_demo(image):
        #自定义滤波器
        kernel = np.ones([5, 5], np.float32) / 25  # 卷积核核大小
        # filter2D(src, ddepth(图像深度,-1表示默认和src一样深度), kernel, dst=None, anchor=None(锚点,卷积核中心), delta=None, borderType=None)
        dst=cv.filter2D(image, -1, kernel=kernel)  # 二维滤波器
        cv.imshow("blur_demo", dst)
    
  • image-20201006171619674

  • kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)  # 锐化算子
    
  • image-20201006171809217

    • 可以观察到比原来更加立体

    • 算子为奇数,总和为0,做边缘梯度,即边缘检测,总和为1,做增强

    • 总和为0的算子:

    • image-20201007162342891

    • image-20201007162701745

    • 测试用例:

    • kernel = np.array([[0,1,2], [-1, 0,1], [-2, -1,0]], np.float32)  # 锐化算子
      
    • 结果:

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XLROQlgM-1604485791381)(https://gitee.com/guohui7/weixinpicture/raw/master/img/image-20201104180922566.png)]

4.高斯滤波(模糊)

  • 高斯分布(正态分布)

  • image-20201006173137036

  • 高斯滤波是最常用的图像去噪方法之一,它能很好地滤除掉图像中随机出现的高斯噪声

  • 对原图加高斯噪声

    • #0-255范围
      def clamp(pv):
          if pv > 255:
              return 255
          elif pv < 0:
              return 0
          else:
              return pv
      
      
      def gaussian_noise(image):  # 加高斯噪声
          h, w, c = image.shape
          for row in range(h):
              for col in range(w):
                  s = np.random.normal(0, 20, 3)  # normal(loc=0.0, scale=1.0, size=None),均值,标准差,大小
      
                  b = image[row, col, 0]
                  g = image[row, col, 1]
                  r = image[row, col, 2]
      
                  image[row, col, 0] = clamp(b + s[0])
                  image[row, col, 1] = clamp(g + s[1])
                  image[row, col, 2] = clamp(r + s[2])
      
          cv.imshow("gaussian_noise", image)
      
    • 得到结果如下:

    • image-20201006180035023

  • 运用高斯滤波处理图像:

    • # GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
          # ksize表示卷积核大小,sigmaX,Y表示x,y方向上的标准差,这两者只需一个即可,并且ksize为大于0的奇数
          dst = cv.GaussianBlur(src, (5, 5), 0)  # 高斯模糊,sigmaX与ksize一个为0
          cv.imshow("Gaussian blur", dst)
      
    • 得到处理前后的图像为

      • image-20201006180405192
    • 关于高斯滤波的详细内容可参见【图像处理】数字图像傅里叶变换的物理意义及简单应用

    • 高斯模糊就是高斯滤波,因为这个高斯滤波的效果看起来像是把图像给弄模糊了,所以又有了“高斯模糊”的叫法。

关于高斯滤波的详细内容可参见【图像处理】数字图像傅里叶变换的物理意义及简单应用

  • 高斯模糊就是高斯滤波,因为这个高斯滤波的效果看起来像是把图像给弄模糊了,所以又有了“高斯模糊”的叫法。

结语

以上内容仅是自我学习时记录的笔记,欢迎大家批评指正,一起学习进步。欢迎大家关注我的公众号小郭学数据。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值