如何用python實現(xiàn)圖像的一維高斯濾波器
為興和等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及興和網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站建設、成都網(wǎng)站制作、興和網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
現(xiàn)在把卷積模板中的值換一下,不是全1了,換成一組符合高斯分布的數(shù)值放在模板里面,比如這時中間的數(shù)值最大,往兩邊走越來越小,構造一個小的高斯包。實現(xiàn)的函數(shù)為cv2.GaussianBlur()。對于高斯模板,我們需要制定的是高斯核的高和寬(奇數(shù)),沿x與y方向的標準差(如果只給x,y=x,如果都給0,那么函數(shù)會自己計算)。高斯核可以有效的出去圖像的高斯噪聲。當然也可以自己構造高斯核,相關函數(shù):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) 其值即服從高斯分布,若想要是實現(xiàn)加性高斯白噪聲,循環(huán)作加即可
實際上逆濾波是維納濾波的一種理想情況,當不存在加性噪聲時,維納濾波與逆濾波等同。
在時域內(nèi)有
根據(jù)時域卷積定理,我們知道 時域卷積等于頻域乘積
則有
這意味著,當我們已知系統(tǒng)函數(shù)時,我們可以很簡單的完成濾波。
理解了逆濾波的基本過程之后,實際上維納濾波就不是太大問題了。實際上,逆濾波對于絕大多數(shù)情況濾波效果都不好,因為逆濾波是通過傅里葉變換將信號由時域轉換到頻域,再根據(jù) 時域卷積定理 ,在頻域作除法。對于乘性干擾這當然是沒問題的,甚至是完美的。而如果存在加性噪聲,例如:加性高斯白噪聲。逆濾波效果就不好了,某些情況下幾乎無法完成濾波情況。
輸入信號經(jīng)過系統(tǒng)函數(shù)后
時域上
頻域上
若存在加性噪聲則為
時域上
頻域上
則
于是,從上面對輸入信號的估計表達式可以看出,多出了一項加性噪聲的傅里葉變換與系統(tǒng)函數(shù)的比值。尤其當 相對于 很小時,濾波后的信號差距十分嚴重。
而我們又知道: 白噪聲的白為噪聲的功率譜為常數(shù) ,即 為常數(shù),于是,從直觀上看,當 相對于 較大時,則 較小,上式第一項則較小,而第二項較大從而保持相對平穩(wěn)。
click me!
白噪聲是時間序列預測中的一個重要概念。如果一個時間序列是白噪聲,它是一個隨機數(shù)序列,不能預測。如果預測誤差不是白噪聲,它暗示了預測模型仍有改進空間。
什么是白噪聲時間序列?
時間序列可能是白噪聲。時間序列如果變量是獨立的且恒等分布的均值為0,那么它是白噪聲。這意味著所有變量具有相同的方差 (sigma^2),并且每個值與該系列中的所有其他值具有零相關。
如果序列中的變量被高斯分布繪制,則該系列稱為高斯白噪聲。
為什么這么重要?
白噪聲是時間序列分析和預測中的一個重要的概念。
重要的兩個主要原因為:
1.可預測性:如果你的時間序列是白噪聲,那么根據(jù)定義它是隨機的。你無法對它合理的建模并進行預測。
2.模型診斷:時間序列上一系列誤差的預測模型最好是白噪聲。
模型診斷是時間序列預測的重要領域。
時間序列數(shù)據(jù)在潛在的因素產(chǎn)生的信號上被預測,它包含一些白噪聲成分。
例如:
y(t)= signal(t)+ noise(t)
通過時間序列預測模型進行預測,可以對其進行收集和分析。在理想情況下,預測誤差應該是白噪聲。
當預測誤差為白噪聲時,意味著時間序列中的所有信號已全部被模型利用進行預測。剩下的就是無法建模的隨機波動。
模型預測的信號不是白噪聲則表明可以進一步對預測模型改進。
你的時間序列白噪音嗎?
你的時間序列如果符合下面條件則不是白噪聲:
你的序列均值為零嗎?
方差隨時間變化嗎?
值與延遲值相關嗎?
你可以用一些工具來檢查你的時間序列是否為白噪音:
創(chuàng)建一個折線圖。檢查總體特征,如變化的平均值,方差或延遲變量之間的明顯關系。
計算匯總統(tǒng)計。對照序列中有意義的連續(xù)塊的均值和方差,檢查整個序列的均值和方差(如年、月、日)。
創(chuàng)建一個自相關的圖。檢查延遲變量之間的總體相關性。
白噪聲時間序列的例子
在本節(jié)中,我們將使用Python創(chuàng)建一個高斯白噪聲序列并做一些檢查。它有助于在實踐中創(chuàng)建和評估白噪聲時間序列。它將提供參考框架和示例圖并且使用和比較自己的時間序列項目的統(tǒng)計測試,以檢查它們是否為白噪聲
首先,我們可以使用隨機模塊的gauss()函數(shù)創(chuàng)建一個1,000個隨機高斯變量的列表。
我們將從高斯分布提取變量:平均值(mu)0.0和標準偏差(sigma)1.0。
一旦創(chuàng)建,為方便起見,我們可以在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)
接下來,我們可以計算和打印一些匯總統(tǒng)計數(shù)據(jù),包含序列的平均值和標準偏差。
# summary statsprint(series.describe())
鑒于我們在繪制隨機數(shù)時定義了平均值和標準偏差,所以應該不會有意外。
count ? 1000.000000mean ? ? ?-0.013222std ? ? ? ?1.003685min ? ? ? ?-2.96121425% ? ? ? ?-0.68419250% ? ? ? ?-0.01093475% ? ? ? ? 0.703915max ? ? ? ? 2.737260
我們可以看到平均值接近0.0,標準偏差接近1.0??紤]到樣本較小預測會有些誤差。
如果我們有更多的數(shù)據(jù),將序列分成兩半計算和比較每一半的匯總統(tǒng)計可能會更有趣。我們認為每個子系列的平均值和標準差都會相似。
現(xiàn)在我們可以創(chuàng)建一些序列的線條圖。
# line plot
series.plot()pyplot.show()
我們可以看到,這個序列似乎是隨機的。
我們還可以創(chuàng)建直方圖,并確認分布是高斯分布。
# histogram plot
series.hist()pyplot.show()
事實上,直方圖顯示了典型的鐘形曲線。
最后,我們可以創(chuàng)建一個自相關圖并檢查延遲變量的所有自相關。
# autocorrelationautocorrelation_plot(series)pyplot.show()
自相關圖沒有顯示任何顯著的自相關特征。在峰值時可信度達在95%和99%,但這只是統(tǒng)計的偶然情況。
為了完整性,下面提供了完整的代碼清單。
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()
原文:網(wǎng)頁鏈接