如何用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‘)
加性高斯白噪声属于白噪声的一种,有如下两个特点:
random.gauss(mu, sigma) 其值即服从高斯分布,若想要是实现加性高斯白噪声,循环作加即可
实际上逆滤波是维纳滤波的一种理想情况,当不存在加性噪声时,维纳滤波与逆滤波等同。
在时域内有
根据时域卷积定理,我们知道 时域卷积等于频域乘积
则有
这意味着,当我们已知系统函数时,我们可以很简单的完成滤波。
理解了逆滤波的基本过程之后,实际上维纳滤波就不是太大问题了。实际上,逆滤波对于绝大多数情况滤波效果都不好,因为逆滤波是通过傅里叶变换将信号由时域转换到频域,再根据 时域卷积定理 ,在频域作除法。对于乘性干扰这当然是没问题的,甚至是完美的。而如果存在加性噪声,例如:加性高斯白噪声。逆滤波效果就不好了,某些情况下几乎无法完成滤波情况。
输入信号经过系统函数后
时域上
频域上
若存在加性噪声则为
时域上
频域上
则
于是,从上面对输入信号的估计表达式可以看出,多出了一项加性噪声的傅里叶变换与系统函数的比值。尤其当 相对于 很小时,滤波后的信号差距十分严重。
而我们又知道: 白噪声的白为噪声的功率谱为常数 ,即 为常数,于是,从直观上看,当 相对于 较大时,则 较小,上式第一项则较小,而第二项较大从而保持相对平稳。
click me!
白噪声是时间序列预测中的一个重要概念。如果一个时间序列是白噪声,它是一个随机数序列,不能预测。如果预测误差不是白噪声,它暗示了预测模型仍有改进空间。
什么是白噪声时间序列?
时间序列可能是白噪声。时间序列如果变量是独立的且恒等分布的均值为0,那么它是白噪声。这意味着所有变量具有相同的方差 (sigma^2),并且每个值与该系列中的所有其他值具有零相关。
如果序列中的变量被高斯分布绘制,则该系列称为高斯白噪声。
为什么这么重要?
白噪声是时间序列分析和预测中的一个重要的概念。
重要的两个主要原因为:
1.可预测性:如果你的时间序列是白噪声,那么根据定义它是随机的。你无法对它合理的建模并进行预测。
2.模型诊断:时间序列上一系列误差的预测模型最好是白噪声。
模型诊断是时间序列预测的重要领域。
时间序列数据在潜在的因素产生的信号上被预测,它包含一些白噪声成分。
例如:
y(t)= signal(t)+ noise(t)
通过时间序列预测模型进行预测,可以对其进行收集和分析。在理想情况下,预测误差应该是白噪声。
当预测误差为白噪声时,意味着时间序列中的所有信号已全部被模型利用进行预测。剩下的就是无法建模的随机波动。
模型预测的信号不是白噪声则表明可以进一步对预测模型改进。
你的时间序列白噪音吗?
你的时间序列如果符合下面条件则不是白噪声:
你的序列均值为零吗?
方差随时间变化吗?
值与延迟值相关吗?
你可以用一些工具来检查你的时间序列是否为白噪音:
创建一个折线图。检查总体特征,如变化的平均值,方差或延迟变量之间的明显关系。
计算汇总统计。对照序列中有意义的连续块的均值和方差,检查整个序列的均值和方差(如年、月、日)。
创建一个自相关的图。检查延迟变量之间的总体相关性。
白噪声时间序列的例子
在本节中,我们将使用Python创建一个高斯白噪声序列并做一些检查。它有助于在实践中创建和评估白噪声时间序列。它将提供参考框架和示例图并且使用和比较自己的时间序列项目的统计测试,以检查它们是否为白噪声
首先,我们可以使用随机模块的gauss()函数创建一个1,000个随机高斯变量的列表。
我们将从高斯分布提取变量:平均值(mu)0.0和标准偏差(sigma)1.0。
一旦创建,为方便起见,我们可以在Pandas序列中打包这个列表。
from randomimport gaussfrom randomimport seedfrom pandasimport Seriesfrom pandas.tools.plottingimport autocorrelation_plot
# seed random number generatorseed(1)# create white noise series
series= [gauss(0.0,1.0)for iin range(1000)]series= Series(series)
接下来,我们可以计算和打印一些汇总统计数据,包含序列的平均值和标准偏差。
# summary statsprint(series.describe())
鉴于我们在绘制随机数时定义了平均值和标准偏差,所以应该不会有意外。
count 1000.000000mean -0.013222std 1.003685min -2.96121425% -0.68419250% -0.01093475% 0.703915max 2.737260
我们可以看到平均值接近0.0,标准偏差接近1.0。考虑到样本较小预测会有些误差。
如果我们有更多的数据,将序列分成两半计算和比较每一半的汇总统计可能会更有趣。我们认为每个子系列的平均值和标准差都会相似。
现在我们可以创建一些序列的线条图。
# line plot
series.plot()pyplot.show()
我们可以看到,这个序列似乎是随机的。
我们还可以创建直方图,并确认分布是高斯分布。
# histogram plot
series.hist()pyplot.show()
事实上,直方图显示了典型的钟形曲线。
最后,我们可以创建一个自相关图并检查延迟变量的所有自相关。
# autocorrelationautocorrelation_plot(series)pyplot.show()
自相关图没有显示任何显著的自相关特征。在峰值时可信度达在95%和99%,但这只是统计的偶然情况。
为了完整性,下面提供了完整的代码清单。
from randomimport gaussfrom randomimport seedfrom pandasimport Seriesfrom pandas.tools.plottingimport autocorrelation_plotfrom matplotlibimport pyplot
# seed random number generatorseed(1)# create white noise series
series= [gauss(0.0,1.0)for iin range(1000)]series= Series(series)# summary statsprint(series.describe())# line plot
series.plot()pyplot.show()# histogram plot
series.hist()pyplot.show()# autocorrelationautocorrelation_plot(series)pyplot.show()
原文:网页链接
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款