您的位置:首页 > 编程语言 > Python开发

Openev3 python基础学习4——基础滤波算法

2017-07-30 16:44 232 查看

概念说明

观察图像中这些变化的频率就构成了另一条分类图像的方法。这个观点称为频域。而通过观察图像灰度分布来分类图像称为空间域

频域分析将图像分成从低频到高频的不同部分。低频对应图像强度变化小的区域,而高频是图像强度变化非常大的区域。目前已存在若干转换方法,如傅立叶变换或余弦变换,可以用来清晰的显示图像的频率内容。注意,由于图像是一个二维实体,所以其由水平频率(水平方向的变化)和竖直频率(竖直方向的变化)共同组成。

在频率分析领域的框架中,滤波器是一个用来增强图像中某个波段或频率并阻塞(或降低)其他频率波段的操作。低通滤波器是消除图像中高频部分,但保留低频部分。高通滤波器消除低频部分

基础算法

用低通滤波来平滑图像

低通滤波器的目标是降低图像的变化率。如将每个像素替换为该像素周围像素的均值。这样就可以平滑并替代那些强度变化明显的区域。

高斯模糊

在某些情况下,需要对一个像素的周围的像素给予更多的重视。因此,可通过分配权重来重新计算这些周围点的值。这可通过高斯函数(钟形函数,即喇叭形数)的权重方案来解决。

区别

低通滤波与高斯滤波的不同之处在于:低通滤波中,滤波器中每个像素的权重是相同的,即滤波器是线性的。而高斯滤波器中像素的权重与其距中心像素的距离成比例。

使用中值滤波消除噪点

前面介绍的是线性过滤器,这里介绍非线性过滤器——中值滤波器。中值滤波器对消除椒盐现象特别有用

双边滤波(Bilateral filter)

是一种可以保边去噪的滤波器。之所以可以达到此去噪效果,是因为滤波器是由两个函数构成。一个函数是由几何空间距离决定滤波器系数。另一个由像素差值决定滤波器系数。

代码

import cv2
import numpy as np

img  = cv2.imread("test.jpg")

#低通滤波
result_1 = cv2.blur(img,(5,5))   #低通滤波。参数一是输入的待处理图像,参数2是低通滤波器的大小

cv2.imshow("blur",result_1)

#高斯模糊
gaussianResult = cv2.GaussianBlur(img,(5,5),1.5)
cv2.imshow("Gaussian",gaussianResult)

#中通滤波
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

salted = salt(img,500)
cv2.imshow("Salt",salted)

result_2 = cv2.medianBlur(img,5)   #中通滤波。第一个参数是待处理图像,第二个参数是孔径的尺寸,一个大于1的奇数
cv2.imshow("MedianBlur",result_2)

#双边滤波
blur_2=cv2.bilateralFilter(img,9,75,75)
cv2.imshow("bilateralFilter",blur_2)

cv2.waitKey(0)
cv2.destroyAllWindows()


参考:

【1】http://blog.csdn.net/sunny2038/article/details/9155893
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: