图像处理—方框滤波,均值滤波,高斯滤波,中值滤波,双边滤波

目录

  • 线性滤波
    • 方框滤波
    • 均值滤波
    • 高斯滤波
  • 非线性滤波
    • 中值滤波
    • 双边滤波

平滑处理:也叫做模糊处理,通常用来减少图像上的噪点或者失真。

图像滤波:在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制。**目的:**①抽出对象的特征作为图像识别的特征模式。②适应图像处理的要求,消除图像数字化时混入的噪声。

滤波器:可以把它看作一个窗口,当使用滤波器进行平滑滤波操作时,就相当于把窗口放在我们要处理的图像上,看到的图像就是处理后得到的结果。

线性滤波器:剔除输入信号中不想要的频率或者选取想要的频率。

滤波和模糊的区别:低通滤波(允许低频率通过)就是模糊。高通滤波(允许高频率通过)就是锐化。

算子:广义的讲,对任何函数进行某一项操作都可以认为是一个算子,甚至包括求幂次,开方都可以认为是一个算子只是有的算子我们用了一个符号来代替他所要进行的运算罢了,所以大家看到算子就不要纠结,他和f(x)中的f没区别,它甚至和加减乘除的基本运算符号都没有区别,只是他可以对单对象操作罢了(有的符号比如大于、小于号要对多对象操作)。

领域算子:利用给定像素周围的像素值来决定像素的最终输出值。

滤波器有很多种,接下来我们一个个介绍。

线性滤波

方框滤波

函数:cv2.boxFilter(src, ddepth, ksize, dst=None, anchor=None, normalize=None, borderType=None)
参数含义:src:处理的图像,ddepth:输出图像的深度,-1表示原图深度。ksize:内核的大小,下图中的ksize为(3,3)。anchor:锚点,表示被平滑的那个点。 normalize:表示核的内部是否被归一化处理,默认为True。即被归一化处理。

图像处理—方框滤波,均值滤波,高斯滤波,中值滤波,双边滤波_第1张图片

均值滤波

均值滤波就是方框滤波中参数normalize为True的情况。即归一化的方框滤波。
原理:用一片图像区域的均值作为该像素点的值。
函数:cv.blur(src, ksize, dst=None, anchor=None, borderType=None)
参数含义和上边的方框滤波相同。

**缺点:**不能很好地保护图像的细节,不能很好的去除噪声点。

高斯滤波

加权平均值:点这里
原理:方框不变,原来每个方框的值是相等的(均值滤波),现在里面的值是符合高斯分布(正态分布)的,方框中心的值最大,其余方框根据距离中心元素的距离递减,构成一个高斯小山包。原来的求平均数现在变成求加权平均数。

高斯平滑也用于计算机视觉算法的预先处理阶段,以增强图像在不同比例大小下的图像效果。从数学角度看,图像的高斯模糊过程就是图像与正态分布做卷积。

函数:cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
参数含义:sigamX:高斯核函数在X方向上的标准偏差。sigmaY同理。如果两个标准差都是 0,那么函数会根据核函数的大小自己计算。高斯滤波可以有效的从图像中去除高斯噪音。

非线性滤波

中值滤波

原理:用像素点邻域灰度值中的中值来代替该像素的灰度值。 对消除孤立的噪声点非常有效。
优点:在消除脉冲噪声,椒盐噪声方面有优势,并且还能保留图像的边缘细节。
缺点:花费的时间是均值滤波的5倍以上。

函数:cv2.medianBlur(src, ksize, dst=None)

双边滤波

原理:双边滤波同时使用空间高斯权重和灰度值相似性高斯权重。空间高斯函数确保只有邻近区域的像素对中心点有影响,灰度值相似性高斯函数确保只有与中心像素灰度值相近的才会被用来做模糊运算。所以这种方法会确保边界不会被模糊掉,因为边界处的灰度值变化比较大。

优点:去噪的同时保留了边界信息。
缺点:只能对低频信息进行较好的过滤。

函数:cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
参数含义:d:邻域直径(必须是大于1的奇数)。sigmaColor:灰度值相似性高斯函数标准差。sigmaSpace:空间高斯函数标准差。

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

img=cv2.imread('../002.jpg',0)  #0是灰度图,默认是三通道彩色图像

#方框滤波
blur1=cv2.boxFilter(img,(5,5),normalize=False)

#均值滤波
blur2=cv2.blur(img,(5,5))

#高斯滤波
blur3=cv2.GaussianBlur(img,(5,5),0)

#中值滤波
blur4=cv2.medianBlur(img,5)

#双边滤波
blur5=cv2.bilateralFilter(img,9,75,75)

images=[img,blur1,blur2,blur3,blur4,blur5]

titles=['img',"blur1",'blur2',"blur3","blur3","blur5"]
for i in range(5):
    plt.subplot(3,2,i+1)
    plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    # 给坐标轴赋值,这里赋值为空
    plt.xticks([])
    plt.yticks([])
plt.show()

图像处理—方框滤波,均值滤波,高斯滤波,中值滤波,双边滤波_第2张图片

你可能感兴趣的:(OpenCV学习笔记,opencv,计算机视觉,java,边缘检测,cv)