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


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

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

小波圖像去噪原理

圖像和噪聲在經小波變換后具有不同的統計特性:圖像本身的能量對應着幅值較大的小波系數,主要集中在低頻(LL)部分;噪聲能量則對應着幅值較小的小波系數,並分散在小波變換后的所有系數中。基於此可設置一個合適的閾值門限,認為大於該閾值的小波系數的主要成份為有用的信號,給予收縮后保留;小於該閾值的小波系數,主要成份為噪聲,予以置零剔除;然后經過閾值函數映射得到估計系數;最后對估計系數進行逆變換,就可以實現去噪和重建。去噪時,通常認為低通系數含有大量的圖像能量,一般不作處理,只對剩余三個高通部分進行處理。一次閾值去噪並不能完全去除噪聲,還需要對未作處理的低頻部分(LL)再次進行小波分解和閾值去噪,直到實際圖像與估計圖像的偏差達到最小值。但是,隨着分解和去噪次數的增加,小波系數中的噪聲能量越來越小,並且趨於分散,去噪的效果將逐漸降低。一般來說,進行3-4層小波分解和去噪就可以達到滿意的去噪效果。

小波閾值去噪步驟

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

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

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

Python實現小波閾值去噪程序

import numpy as np

import pywt

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

# pywt.threshold方法講解:

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

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

#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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM