4.6 基本滤波
写在前面:
1.低通滤波平滑图像
低通滤波可以简单的认为:设定一个频率点,当信号频率高于这个频率时不能通过,在数字信号中,这个频率点也就是截止频率,当频域高于这个截止频率时,则全部赋值为0。因为在这一处理过程中,让低频信号全部通过,所以称为低通滤波。其目的可以理解为:降低图像的变化率。
1.1 blur滤波
在Opencv中,可以通过使用blur函数进行低通滤波:
result = cv2.blur(image,(5,5));
其中 result返回时处理后的图像。blur函数第一个参数为待处理图像,参数二则是设置滤波器的大小。
1.2 boxfilter
在Opencv可以通过boxfilter函数进行:
result1 = cv2.boxFilter(img, -1, (5, 5))
其中第二个参数的-1表示输出图像使用的深度与输入图像相同
高斯模糊
在某些情况下,需要对一个像素的周围的像素给予更多的重视。因此,可通过分配权重来重新计算这些周围点的值。这可通过高斯函数(钟形函数,即喇叭形数)的权重方案来解决。
在Opencv中,可以通过GaussianBlur函数进行处理:
gaussianResult = cv2.GaussianBlur(img,(5,5),1.5)
区别:
低通滤波与高斯滤波的不同之处在于:低通滤波中,滤波器中每个像素的权重是相同的,即滤波器是线性的。而高斯滤波器中像素的权重与其距中心像素的距离成比例。
代码(上述三种滤波方式):
#coding=utf-8
import cv2
img = cv2.imread("G:/python project/lena.jpg",0)
result = cv2.blur(img, (5,5))
result1 = cv2.boxFilter(img, -1, (5, 5))
gaussianResult = cv2.GaussianBlur(img,(5,5),1.5)
cv2.imshow("Origin", img)
cv2.imshow("Blur", result)
cv2.imshow("BoxFilter", result1)
cv2.imshow("GaussianResult", gaussianResult)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果:
3.中值滤波
无论是直接获取的灰度图像,还是由彩色图像转换得到的灰度图像,里面都有噪声的存在,噪声对图像质量有很大的影响。进行中值滤波不仅可以去除孤点噪声,而且可以保持图像的边缘特性,不会使图像产生显著的模糊,比较适合于实验中的人脸图像。
中值滤波是一种非线性的信号处理方法,因此中值滤波器也就是一种非线性的滤波器。在一定条件下,其可以克服线性滤波器处理图像细节模糊的问题,而且它对滤除脉冲干扰和图像扫描噪声非常有效,但是,对点、线、尖顶等细节较多的图像,则会引起图像信息的丢失。中值滤波器最先被应用于一维信号的处理中,后来被人们引用到二维图像的处理中来。
中位值滤波是种非线性滤波器,尤其是对椒盐现象去除特别有用。在Opencv中,通过medianBlur函数进行处理。
在原图像没有椒盐,所以为了校验效果,将使用前面介绍的方法先生成椒盐然后进行处理。代码:
#coding=utf-8
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] = 255
elif img.ndim == 3:
img[j,i,0]= 255
img[j,i,1]= 255
img[j,i,2]= 255
return img
img = cv2.imread("G:/python project/lena.jpg",0)
result = salt(img, 500)
median = cv2.medianBlur(result, 5)
cv2.imshow("Salt", result)
cv2.imshow("Median", median)
cv2.waitKey(0)
cv2.destroyAllWindows()
原创自:http://blog.csdn.net/sunny2038/article/details/9137759(作者:sunny2038)