Python OpenCV 滤波

低通滤波器

均值滤波器

均值滤波(normalized box filter)就是用其像素点周围像素平均值代替元像素值,在滤除噪声的同时也会滤掉图像的边缘信息的方法。

但均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。特别是椒盐噪声。

blur
cv2.blur(src, ksize, dst=None, anchor=None, borderType=None)

方盒滤波的参数为True时,就是均值滤波,所以这个API用的不多。
dst = cv2.blur(scr, ksize, anchor, borderType)

  • scr:源图像(图像矩阵)
  • ksize:卷积核大小(x,y)(滤波窗口(算子)尺寸)
  • anchor:锚点
  • borderType:有映射类型,加一个黑边,默认不设置(边界扩充类型)

该函数使用内核将图像平滑化,表示为:
在这里插入图片描述
作用:使用归一化卷积模板模糊图像

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 均值滤波器
# 读取灰度图像 
img = cv2.imread("D:/Study/digital image processing/test/saltLena.bmp",0)
# 模板大虚5*5
blur = cv2.blur(img,(5,5))
plt.subplot(121),plt.imshow(img,'gray')
plt.subplot(122),plt.imshow(blur,'gray')
plt.show()

在这里插入图片描述

boxFilter()
import cv2
import numpy as np

img = cv2.imread('./image/lena.jpg')

# 方盒滤波(当为True时)变成均值滤波,当为False时,就只加和不变化,超过255的结果设置为255
img2 = cv2.boxFilter(img, -1, (5, 5), normalize=True)
img3 = cv2.boxFilter(img, -1, (5, 5), normalize=False)
# 展示图像
cv2.imshow('img', img)
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)

cv2.waitKey(0)

dst = cv2.boxFilter(src, ddepth, ksize , anchor, normalize, borderType)

  • src:输入图像
  • ddepth:输出图像的尺寸,默认为-1
  • ksize :卷积核大小(x, y)
  • anchor:锚点,默认随卷积核变化
  • normalize:布尔类型默认为True;True:a为1/W*H(均值滤波),false:a=1
  • borderType:有映射类型,加一个黑边,默认不设置

在这里插入图片描述

高斯滤波器

高斯滤波是一种线性平滑滤波器,对于服从正态分布的噪声有很好的抑制作用。在实际场景中,我们通常会假定图像包含的噪声为高斯白噪声,所以在许多实际应用的预处理部分,都会采用高斯滤波抑制噪声,如传统车牌识别等。

高斯滤波和均值滤波一样,都是利用一个掩膜和图像进行卷积求解。不同之处在于:均值滤波器的模板系数都是相同的为1,而高斯滤波器的模板系数,则随着距离模板中心的增大而系数减小(服从二维高斯分布)。所以,高斯滤波器相比于均值滤波器对图像个模糊程度较小,更能够保持图像的整体细节。

高斯滤波常见模板如下。

在这里插入图片描述

cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])

作用:根据像素距离使用高斯函数生成权重进行滤波

  • dst:输出图像
  • src:输入图像
  • ksize:卷积核的大小
  • sigmaX:x方向上的标准差
  • sigmaY:y方向上的标准差
  • borderType:边界模式,默认为BORDER_DEFAULT
  • 一般只需要看前三个参数
    在这里插入图片描述
# 高斯滤波器
img = cv2.imread("D:/Study/digital image processing/test/saltLena.bmp",0)
# 若只给了一个sigma则同时视为两轴的sigma,若均为0则根据尺寸自动生成。
dst = cv2.GaussianBlur(img,(5,5),0)

plt.subplot(121),plt.imshow(img,'gray')
plt.subplot(122),plt.imshow(dst,'gray')
plt.show()

在这里插入图片描述

import cv2
import numpy as np

img = cv2.imread('./image/Gaussian.png')

# 高斯去噪
img2 = cv2.GaussianBlur(img, (3, 3), 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值