基於python的小波閾值去噪算法

 https://blog.csdn.net/alwaystry/article/details/52756051

發表於 2018-01-10 16:32:17
嵌入式設計應用
+關注

小波圖像去噪原理

圖像和噪聲在經小波變換後具備不一樣的統計特性:圖像自己的能量對應着幅值較大的小波係數,主要集中在低頻(LL)部分;噪聲能量則對應着幅值較小的小波係數,並分散在小波變換後的全部係數中。基於此可設置一個合適的閾值門限,認爲大於該閾值的小波係數的主要成份爲有用的信號,給予收縮後保留;小於該閾值的小波係數,主要成份爲噪聲,予以置零剔除;而後通過閾值函數映射獲得估計係數;最後對估計係數進行逆變換,就能夠實現去噪和重建。去噪時,一般認爲低通係數含有大量的圖像能量,通常不做處理,只對剩餘三個高通部分進行處理。一次閾值去噪並不能徹底去除噪聲,還須要對未做處理的低頻部分(LL)再次進行小波分解和閾值去噪,直到實際圖像與估計圖像的誤差達到最小值。可是,隨着分解和去噪次數的增長,小波係數中的噪聲能量愈來愈小,而且趨於分散,去噪的效果將逐漸下降。通常來講,進行3-4層小波分解和去噪就能夠達到滿意的去噪效果。less

小波閾值去噪步驟

(1)二維信號的小波分解。選擇一個小波(sym8)和小波分解的層次N(3),而後計算信號S到第N層的分解。函數

(2)對高頻係數進行閾值量化,對於從一到N的每一層,選擇一個閾值,並對這一層的高頻係數進行軟閾值化處理。flex

(3)二維小波的重構,根據小波分解的第N層的低頻係數和通過修改的從第一層到第N層的高頻係數,來計算二維信號的小波重構。spa

Python實現小波閾值去噪程序

import numpy as np.net

import pywt設計

data = np.linspace(1, 4, 7)blog

# pywt.threshold方法講解:it

# pywt.threshold(data,value,mode =‘soft’,substitute = 0 )class

# data:數據集,value:閾值,mode:比較模式默認soft,substitute:替代值,默認0,float類型import

#data: [ 1. 1.5 2. 2.5 3. 3.5 4. ]

#output:[ 6. 6. 0. 0.5 1. 1.5 2. ]

#soft 由於data中1小於2,因此使用6替換,由於data中第二個1.5小於2也被替換,2不小於2因此使用當前值減去2,,2.5大於2,因此2.5-2=0.5.。..。

print 「---------------------soft:絕對值-------------------------」

print pywt.threshold(data, 2, ‘soft’,6)

print 「---------------------hard:絕對值-------------------------」

#data: [ 1. 1.5 2. 2.5 3. 3.5 4. ]

#hard data中絕對值小於閾值2的替換爲6,大於2的不替換

print pywt.threshold(data, 2, ‘hard’,6)

print 「---------------------greater-------------------------」

#data: [ 1. 1.5 2. 2.5 3. 3.5 4. ]

#data中數值小於閾值的替換爲6,大於等於的不替換

print pywt.threshold(data, 2, ‘greater’,6)

print 「---------------------less-------------------------」

print data

#data: [ 1. 1.5 2. 2.5 3. 3.5 4. ]

#data中數值大於閾值的,替換爲6

print pywt.threshold(data, 2, ‘less’,6)

相關文章
相關標籤/搜索