龙空技术网

OpenCV图像滤波:均值、方框、中值、高斯

Python名媛 238

前言:

如今同学们对“均值滤波c算法”都比较着重,朋友们都想要分析一些“均值滤波c算法”的相关内容。那么小编也在网摘上汇集了一些有关“均值滤波c算法””的相关文章,希望姐妹们能喜欢,各位老铁们快快来了解一下吧!

内容有: 均值滤波 cv2.blur(),方框滤波 cv2.boxFilter(),高斯滤波 cv2.GaussianBlur(),中值滤波 cv2.medianBlur()

滤波可理解为,平均卷积操作。对于图像上存在的噪声点,通过滤波平滑处理操作,可以去除噪声点。在开始前我们先导入需要用的库文件,获取需要用到的图片。

import cv2# 指定图像所在文件夹位置filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\opencv\\img'# 获取文件夹中某张图像img = cv2.imread(filepath+'\\lina.jpg')# 显示图像cv2.imshow('img',img) # (自定义窗口名,图象变量)cv2.waitKey(0) # 图像不会自动消失cv2.destoryAllWindows() # 按下任意键图像消失
1. 均值滤波

原理: 卷积核在图像上滑动,将核的锚点放在该特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合;对卷积核内的所有像素值求平均,将所得结果放到与锚点对应的像素上;对图像所有像素重复上述过程。

方法:cv2.blur(img, ksize)

img表示图像变量;ksize表示卷积核大小(n,n),卷积核是值全为1的矩阵

#(1)均值滤波# 参数:输入的图像数据,卷积核大小,即滑窗的宽和高,一般用奇数blur = cv2.blur(img,(3,3))# 显示图像cv2.imshow('blur',blur)cv2.waitKey(0)cv2.destoryAllWindows()

2. 方框滤波

原理: 卷积核在图像上滑动,将核的锚点放在该特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合;方框滤波有2种方法(1)将卷积核内所有像素值相加,超过255的像素值变成255;(2)对卷积核内的所有像素值求平均。将所得结果放到与锚点对应的像素上;对图像所有像素重复上述过程。

如果方框滤波使用第2种方法得到的结果和均值滤波的结果一样。

滤波函数: cv2.boxFilter(img, -1, ksize, normalize)

img代表输入图像;-1代表得到的结果在颜色通道上是一致的,一般不用改;ksize代表卷积核大小;normalize代表是否归一化,如果为True,得到的结果同均值滤波。

#(2)方框滤波# 卷积核3*3box = cv2.boxFilter(img,-1,(3,3),normalize=True)# 显示图像cv2.imshow('box',box)cv2.waitKey(0)cv2.destoryAllWindows()

下图左侧是normalize=False的图像,右侧是normalize=True的图像

3. 高斯滤波

原理: 卷积核在图像上滑动,将核的锚点放在该特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合;卷积核内的权重值服从高斯分布,离中心点越近的点权值越大。将卷积核内各值与相应像素值做内积,将乘积相加后求平均,将所得结果放到与锚点对应的像素上;对图像所有像素重复上述过程。

滤波方法: cv2.GaussianBlur(img, ksize, 标准差x, 标准差y)

img代表输入图像;ksize卷积核大小,滑窗宽度高度为奇数;标准差x代表沿x方向的卷积核的标准差;标准差y代表沿y方向的卷积核的标准差,不设置的话则和x轴的标准差一致

# 输入图像,卷积核大小,沿x轴方向的标准差=1,沿y轴标准差不设置的话和沿x轴一样aussian = cv2.GaussianBlur(img, (5,5), 1)# 显示图像cv2.imshow('aussian',aussian)cv2.waitKey(0)cv2.destoryAllWindows()

下图左侧为原图,右侧为高斯滤波后的图

4. 中值滤波

原理: 卷积核在图像上滑动,将核的锚点放在该特定位置的像素上,同时,核内的其他值与该像素邻域的各像素重合;被卷积核框住的像素值从小到大排序,取中间大小的像素值代替滑窗中最中间的值。将所得结果放到与锚点对应的像素上;对图像所有像素重复上述过程。

滤波方法: cv2.medianBlur(img, ksize)

img代表输入的图像,ksize代表滤波模板的尺寸大小,填一个数值,必须是大于1的奇数

#(4)中值滤波median = cv2.medianBlur(img,5) # 用5*5的卷积核去做滑窗,排序后,取中间那个值# 显示图像cv2.imshow('median',median)cv2.waitKey(0)cv2.destoryAllWindows()

下图左侧为原图,右侧为滤波后的图像。可以看出,中值滤波对处理椒盐噪声具有很好的效果。

最后我们来把这三种滤波(均值、高斯、中值)图像放在一起看一下

#(5)一个窗口显示多个图像# np.hstack()表示沿着横向堆叠# np.vstack()表示沿着纵向堆叠# 参数应该为一个元组import numpy as npres = np.hstack((blur,aussian,median))# 图像显示cv2.imshow('result',res)cv2.waitKey(0)cv2.destoryAllWindows()

标签: #均值滤波c算法 #高斯滤波的基本原理