random.gauss(mu, sigma) 其值即服从高斯分布,若想要是实现加性高斯白噪声,循环作加即可
实际上逆滤波是维纳滤波的一种理想情况,当不存在加性噪声时,维纳滤波与逆滤波等同。
在时域内有
根据时域卷积定理,我们知道 时域卷积等于频域乘积
则有
这意味着,当我们已知系统函数时,我们可以很简单的完成滤波。
理解了逆滤波的基本过程之后,实际上维纳滤波就不是太大问题了。实际上,逆滤波对于绝大多数情况滤波效果都不好,因为逆滤波是通过傅里叶变换将信号由时域转换到频域,再根据 时域卷积定理 ,在频域作除法。对于乘性干扰这当然是没问题的,甚至是完美的。而如果存在加性噪声,例如:加性高斯白噪声。逆滤波效果就不好了,某些情况下几乎无法完成滤波情况。
输入信号经过系统函数后
时域上
频域上
若存在加性噪声则为
时域上
频域上
则
于是,从上面对输入信号的估计表达式可以看出,多出了一项加性噪声的傅里叶变换与系统函数的比值。尤其当 相对于 很小时,滤波后的信号差距十分严重。
而我们又知道: 白噪声的白为噪声的功率谱为常数 ,即 为常数,于是,从直观上看,当 相对于 较大时,则 较小,上式第一项则较小,而第二项较大从而保持相对平稳。
click me!
如何用python实现图像的一维高斯滤波器现在把卷积模板中的值换一下,不是全1了,换成一组符合高斯分布的数值放在模板里面,比如这时中间的数值最大,往两边走越来越小,构造一个小的高斯包。实现的函数为cv2.GaussianBlur()。对于高斯模板,我们需要制定的是高斯核的高和宽(奇数),沿x与y方向的标准差(如果只给x,y=x,如果都给0,那么函数会自己计算)。高斯核可以有效的出去图像的高斯噪声。当然也可以自己构造高斯核,相关函数:cv2.GaussianKernel().
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread(‘flower.jpg‘,0) #直接读为灰度图像
for i in range(2000): #添加点噪声
temp_x = np.random.randint(0,img.shape[0])
temp_y = np.random.randint(0,img.shape[1])
img[temp_x][temp_y] = 255
blur = cv2.GaussianBlur(img,(5,5),0)
plt.subplot(1,2,1),plt.imshow(img,‘gray‘)#默认彩色,另一种彩色bgr
plt.subplot(1,2,2),plt.imshow(blur,‘gray‘)
如何用python实现图像的一维高斯滤波建议你不要使用高斯滤波。
推荐你使用一维中值滤波
matlab的函数为
y = medfilt1(x,n)
x为数组,是你要处理原始波形,n是中值滤波器的参数(大于零的整数)。y是滤波以后的结果(是数组)
后面再
plot(y)
就能看到滤波以后的结果
经过medfilt1过滤以后,y里储存的是低频的波形,如果你需要高频波形,x-y就是高频波形
顺便再说一点,n是偶数的话,滤波效果比较好。
N越小,y里包含的高频成分就越多,y越大,y里包含的高频成分就越少。
记住,无论如何y里保存的都是整体的低频波。(如果你看不懂的话,滤一下,看y波形,你马上就懂了)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)