① 為什麼使用小波變換的方法為圖像去噪
因為小波函數是具有局部時頻特性,對於圖像高頻和低頻部分,可以通過不同的方法,比如說閾值選取處理,根據不同的閾值選取達到不同的去噪效果,應用比較廣泛,去噪效果較好,並且小波變換還可以和其他去噪方法結合,效果更佳。
② 小波變換的閾值函數圖像去噪原理
一般情況下,這個閾值函數的選取與雜訊的方差是緊密相關的。
通常情況下,現在論文中的雜訊都是選用高斯白雜訊。
被雜訊污染的信號=干凈的信號+雜訊,
由於信號在空間上(或者時間域)是有一定連續性的,因此在小波域,有效信號所產生的小波系數其模值往往較大;而高斯白雜訊在空間上(或者時間域)是沒有連續性的,因此雜訊經過小波變換,在小波閾仍然表現為很強的隨機性,通常仍認為是高斯白噪的。
那麼就得到這樣一個結論:在小波域,有效信號對應的系數很大,而雜訊對應的系數很小。
剛剛已經說了,雜訊在小波域對應的系數仍滿足高斯白噪分布。如果在小波域,雜訊的小波系數對應的方差為sigma,那麼根據高斯分布的特性,絕大部分(99.99%)雜訊系數都位於[-3*sigma,3*sigma]區間內。因此,只要將區間[-3*sigma,3*sigma]內的系數置零(這就是常用的硬閾值函數的作用),就能最大程度抑制雜訊的,同時只是稍微損傷有效信號。將經過閾值處理後的小波系數重構,就可以得到去噪後的信號。
常用的軟閾值函數,是為了解決硬閾值函數「一刀切」導致的影響(模小於3*sigma的小波系數全部切除,大於3*sigma全部保留,勢必會在小波域產生突變,導致去噪後結果產生局部的抖動,類似於傅立葉變換中頻域的階躍會在時域產生拖尾)。軟閾值函數將模小於3*sigma的小波系數全部置零,而將模大於3*sigma的做一個比較特殊的處理,大於3*sigma的小波系數統一減去3*sigma,小於-3*sigma的小波系數統一加3*sigma。經過軟閾值函數的作用,小波系數在小波域就比較光滑了,因此用軟閾值去噪得到的圖象看起來很平滑,類似於冬天通過窗戶看外面一樣,像有層霧罩在圖像上似的。
比較硬閾值函數去噪和軟閾值函數去噪:硬閾值函數去噪所得到的峰值信噪比(PSNR)較高,但是有局部抖動的現象;軟閾值函數去噪所得到的PSNR不如硬閾值函數去噪,但是結果看起來很平滑,原因就是軟閾值函數對小波系數進行了較大的 「社會主義改造」,小波系數改變很大。因此各種各樣的閾值函數就出現了,其目的我認為就是要使大的系數保留,小的系數被剔出,而且在小波域系數過渡要平滑。
還有的什麼基於隱馬爾科夫模型去噪,高斯混合尺度去噪(英文縮寫好像是GSR,不好意思,記不大清楚了)和自適應閾值去噪等,也就是利用有效信號的小波系數和雜訊的小波系數在小波域的分布特徵不同等特徵來進行有效信號的小波系數和雜訊的小波系數在小波域的分離,然後重構得到去噪後的信號。
說了這么多,忘了關鍵的一點,如何估計小波域雜訊方差sigma的估計,這個很簡單:把信號做小波變換,在每一個子帶利用robust estimator估計就可以(可能高頻帶和低頻帶的方差不同)。
robust estimator就是將子帶內的小波系數模按大小排列,然後取最中間那個,然後把最中間這個除以0.6745就得到雜訊在某個子帶內的方差sigma。利用這個sigma,然後選種閾值函數,就可以去去噪了~~
③ 請問在小波變換圖像去噪中Xnoise=X+18*(rand(size(X)))中的18是代表什麼
wavedec2函數用於對圖像進行二維小波分解,其函數調用格式如下:
[c,l]=wavedec2(X,n,』wname』);
其中,X表示原始圖像,n表示分解層數,wname表示小波函數,c表示各層系數,l表示各層系數對應的長度
ddencmp用於得到全局閥值,其調用格式如下:
[thr,sorh,keepapp]=ddencmp(『cmp』,』wp』,X);
[thr,sorh,keepapp]=ddencmp(『cmp』,』wv』,X);
其中cmp表示壓縮,wp表示小波包,wv表示小波,X表示原始信號,thr表示閥值,sorh表示閥值類型,s表示軟閥值,h表示硬閥值,keepapp=1表示保持近似系數不變
wdencmp用於對數據或圖像進行閥值去噪或壓縮,其調用格式如下:
[xcomp,c1,l1,perf0,perfl2]=wdencmp(『gbl』,c,l,』wname』,n,thr,sorh,keepapp);
glb表示利用全局閥值,perf0表示恢復比,perfl2表示壓縮比
示例:利用二維小波對圖像進行壓縮
編寫對應的m文件如下:
clc;
load woman;
subplot(1,2,1)
imshow(X,map);
title('原始圖像');
[c,l]=wavedec2(X,3,'sym4');
%%獲取全局閥值%%
[thr,sorh,keepapp]=ddencmp('cmp','wp',X);
[xcmp,c1,l1,perf0,perfl2]=wdencmp('gbl',c,l,'sym4',3,thr,sorh,keepapp);
subplot(1,2,2)
imshow(xcmp,map);
title('壓縮後圖片');
程序運行結果如下圖:
小波分析用於圖像分解
對圖像分解的目地在於可以更好的觀察圖像的細節,對圖像做出更好的判斷,swt2函數用於對圖像進行分解,其調用格式如下:
[sa,sh,sv,sd]=swt2(X,N,』wname』);
其中sa,sh,sv,sd分別表示近似系數,水平系數,豎直系數,對角系數,x分解圖像,N分解的層數,wname表示小波基名稱
示例:對圖像進行分解
編寫對應的m文件如下:
clear all;
load woman;
[sa,sh,sv,sd]=swt2(X,3,'db3');
s=1;
fori=1:3
subplot(3,4,s)
image(wcodemat(sa(:,:,i),192));
title(['第',num2str(i),'層近似系數']);
subplot(3,4,s+1)
image(wcodemat(sh(:,:,i),192));
title(['第',num2str(i),'層水平系數']);
subplot(3,4,s+2)
image(wcodemat(sv(:,:,i),192));
title(['第',num2str(i),'層豎直系數']);
subplot(3,4,s+3)
image(wcodemat(sd(:,:,i),192));
title(['第',num2str(i),'層對角系數']);
s=s+4;
end
程序運行結果如下圖:
④ 小波變換後的圖像如何去噪
小波變換去噪的基本思路可以概括為:利用小波變換把含噪信號分解到多尺度中,小波變換多採用二進型,然後在每一尺度下把屬於雜訊的小波系數去除,保留並增強屬於信號的小波系數,最後重構出小波消噪後的信號。其中關鍵是用什麼准則來去除屬於雜訊的小波系數,增強屬於信號的部分。
⑤ 小波圖像去噪的原理是什麼啊
圖像降噪的主要目的是在能夠有效地降低圖像雜訊的同時盡可能地保證圖像細節信息不受損失,。圖像去噪有根據圖像的特點、雜訊統計特性和頻率分布規律有多種方法,但它們的基本原理都是利用圖像的雜訊和信號在頻域的分布不同,即圖像信號主要集中在低頻部分而雜訊信號主要分布在高頻部分,採取不同的去噪方法。傳統的去噪方法,在去除雜訊的同時也會損害到信號信息,模糊了圖像。
小波變換主要是利用其特有的多解析度性、去相關性和選基靈活性特點,使得它在圖像去噪方面大有可為,清晰了圖像。經過小波變換後,在不同的解析度下呈現出不同規律,設定閾值門限,調整小波系數,就可以達到小波去噪的目的。
小波變換去噪的基本思路可以概括為:利用小波變換把含噪信號分解到多尺度中,小波變換多採用二進型,然後在每一尺度下把屬於雜訊的小波系數去除,保留並增強屬於信號的小波系數,最後重構出小波消噪後的信號。其中關鍵是用什麼准則來去除屬於雜訊的小波系數,增強屬於信號的部分。
⑥ 急求大神幫助 相對一幅圖像進行降噪處理 求能把自適應濾波和小波軟閾值降噪的matlab代碼
自適應濾波
clear all
I1=imread('1.jpg');
I=rgb2gray(I1);
J=imnoise(I,'gaussian',0,0.05); %添加均值為0,方差為0.05的高斯雜訊
K1=wiener2(J,[5,5]);
figure
imshow(J);
title('加入高斯雜訊圖像');
figure
imshow(K1);
title('5*5窗口自適應濾波');
小波軟閾值
clear all
I1=imread('1.jpg');
I=rgb2gray(I1);
J=imnoise(I,'gaussian',0,0.05); %添加均值為0,方差為0.05的高斯雜訊
[Cr, Sr] = wavedec2(J, 2, 'sym4');
thr= Donoho(J);
J_soft = wdenoise(xr, 'gbl', 's', thr, 'sym4', 2);
figure; imshow(J_soft);
/////////////////////////////////用到的函數
function thr = Donoho(x)
%用Donoho通用閾值公式計算閾值 x為要進行處理的圖像
% thr = delta * sqrt( 2 * log(n))
% n為信號的長度或尺寸
% delta = MAD / 0.6745 -經驗公式,其中MAD為小波分解後高子帶系數的中值
n = prod( size(x) ); %圖像尺寸
%計算delta
[C, S] = wavedec2(x, 1, 'db1'); %小波分解
d = C( prod( S(1,:) ) + 2 * prod( S(2,:) ) + 1 : end); %HH子帶系數
delta = median( abs(d) ) / 0.6745;
%計算閾值
thr = delta * sqrt(2*log(n));
////////////////////////////////////用到的函數
function X = wdenoise(x, measure, sorh, thr, wname, n)
% 閾值去噪函數
% x為帶雜訊圖像
% measure表示全局或局部
% sorh表示軟硬閾值方法
% thr為閾值
% wname為小波函數名
% n為分解層次
[C, S] = wavedec2(x, n, wname); % 對圖像進行小波分解
switch measure
case 'gbl' % 全局閾值方法
dcoef = C( prod(S(1, :)) + 1 : end); % 提取細節部分系數
switch sorh
case 'h' % 硬閾值
dcoef = dcoef .* (abs(dcoef) > thr);
case 's' % 軟閾值
temp = abs(dcoef) - thr;
temp = (temp + abs(temp)) / 2;
dcoef = sign(dcoef) .* temp;
end
C( prod(S(1, :)) + 1 : end) = dcoef;
case 'lvd' % 局部閾值方法
for i = n:-1:1 % 每層單獨處理
k = size(S,1) - i;
first = prod(S(1, :)) + ...
3 * sum(S(2:k-1, 1) .* S(2:k-1, 2)) + 1;
% 第i層細節系數的起始位置
last = first + 3*prod(S(k,:)) - 1; % 終止位置
dcoef = C(first : last); % 細節系數
switch sorh
case 'h' % 硬閾值
dcoef = dcoef .* (abs(dcoef) > thr(i));
case 's' % 軟閾值
temp = abs(dcoef) - thr(i);
temp = (temp + abs(temp)) / 2;
dcoef = sign(dcoef) .* temp;
end
C(first:last) = dcoef;
end
end
X = waverec2(C, S, wname); % 重構圖像
⑦ 如何使用python畫小波圖像
最簡單有效的庫是來自於約翰內斯布赫爾的imagehash庫。可以在庫中實現多種圖像散列:aHash,pHash,dHash。
所有三種方法的縮放圖像轉換成灰度級8×8的圖像首位。
然後該庫執行用於每個64像素的一些計算並分配一個二進制的1或0的值。這些64bit值形成演算法的輸出。
⑧ 小波閾值圖像去噪程序為什麼每次運行類似程序都有這個結果
File "barbara.png" does not exist. Error in ==> wavedenoise_main at 5意思是在主程序wavedenoise_main 第五行出錯,出錯原因是barbara.png文件不存在;
解決方法:第一種方法:你可以把文件barbara.png放在主程序wavedenoise_main這個文件夾;
第二種方法:im=imread('barbara.png'); 改為im=imread('路徑\barbara.png'); 路徑即為你圖片存放的路徑如:d:image\..\
⑨ python如何實現類似matlab的小波濾波
T=wpdec(y,5,'db40');
%信號y進行波包解層數5T波樹plot看
a10=wprcoef(T,[1,0]);
%a10節點[1,0]進行重構信號貌似沒層重構說吧能某層某節點進行重構節點編號波樹
%以下為濾波程序(主要調節參數c的大小)
c=10;
wn=0.1;
fs=50000; %采樣頻率;
b=fir1(c,wn/(fs/2),hamming(c+1));
y1=filtfilt(b,1,y);%對y濾波。