二維小波分析對圖像處理
(2004-12-17 04:09:07)
下一個
一: 引言 本文從二維小波理論出發,對其在圖像處理的應用上進行了一些分析和處理,力圖反映出小波分析在圖像處理方麵有著其獨特的特點。本文就以下幾點進行闡述:
①小波基本概念
②圖像壓縮
③圖像消噪
④圖象增強
⑤圖象平滑處理
二:小波基本概念
小波定義:設 ,其傅立葉變換為 ,當 滿足允許條件,即完全重構條件或恒等分辨條件. 時,我們稱 為一個基本小波或母小波,將母函數 經伸縮和平移後,得 。 我們稱其為一個小波序列。其中a為伸縮因子,b為平移因子。
小波變換是一種信號的時間——尺度分析方法,他具有多分辨率分析的特點,而且在時頻兩域都具有表征信號局部特征的能力,是一種窗口大小固定不變但其形狀可變,時間窗和頻率窗都可變的時頻局部化分析方法。即再低頻部分具有較高的頻率分辨率和時間分辨率,在高頻部分具有較高的時間分辨率和較低的頻率分辨率,很適合探測正常信號中夾帶的瞬態反常現象並展示其成分,所以被譽為分析信號的顯微鏡。
波分析是把信號分解成低頻al和高頻dl兩部分,在分解中,低頻al中失去的信息由高頻dl捕獲。在下一層的分解中,又將al分解成低頻a2和高頻d2兩部分,低頻a2中失去的信息由高頻d2捕獲,如此類推下去,可以進行更深層次的分解。
二維小波函數是通過一維小波函數經過張量積變換得到的,二維小波函數分解是把尺度j的低頻部分分解成四部分:尺度j+1的低頻部分和三個方向(水平、垂直、斜線)的高頻部分。
三:圖像壓縮
對於圖像來說,如果需要進行快速或實時傳輸以及大量存儲,就需要對圖像數據進行壓縮。在同樣的通信容量下,如果圖像數據壓縮後在傳輸,就可以傳輸更多的圖像信息。例如,用普通的電話線傳輸圖像信息。圖像壓縮研究的就是尋找高壓縮比的方法且壓縮後的圖像要有合適的信噪比,在壓縮傳輸後還要恢複原信號,斌且在壓縮、傳輸、恢複的過程中,還要求圖像的失真度小。這就是圖像壓縮的研究問題。
圖像數據往往存在各種信息的冗餘、如空間冗餘、信息熵冗餘 、視覺冗餘 和結構冗餘等等。所謂壓縮就是去掉各種冗餘,保留對我們有用的信息。圖像壓縮的過程常稱為編碼。相對的,圖像的恢複當然就是解碼了。
圖像壓縮的方法通常可分為有失真編碼和無失真編碼兩大類:
無失真編碼方法如改進的霍夫曼編碼。
有失真編碼方法的還原圖像較之原始圖像存在著一些誤差,但視覺效果是可以接受的。常見的方法有預測編碼、變換編碼、量化編碼、信息熵編碼、分頻帶編碼和結構編碼等等。
而將小波分析引入圖像壓縮的範疇也是一個重要的手段,並且有著它自己的特點。它的特點在於壓縮比高、壓縮速度快,壓縮後能保持信號與圖像的特征基本不變,且在傳遞過程中可以抗幹擾等等。
下麵我們就舉一個粒子來說明怎樣用小波分析進行圖像壓縮。
例如現在有一個二維圖像(文件名為),我們利用二維小波分析來進行圖像壓縮。
由原理可知,一個圖像作小波分解後,可得到一係列不同分辨率的子圖像,不同分辨率的子圖像對應的頻率是不相同的。高分辨率(高頻)子圖像上大部分點的數值都接近於0,越是高就越是明顯。而對於一個圖像來說,表現一個圖像的最主要的部分是低頻部分,所以最簡單的壓縮方法是利用小波分解去掉圖像的高頻部分而隻保留低頻部分。
程序大致如下:
clear
%裝入圖像
load wbarb;
%顯示圖像
syms X;
subplot(221);
image(coast);
colormap(map)
title('原始圖像');
axis square
disp('壓縮前圖像X的大小');
whos('coast')
%對圖像用小波進行層小波分解
[c,s]=wavedec2(X,2,'bior3.7');
%提取小波分解結構中的一層的低頻係數和高頻係數
cal=appcoef2(c,s,'bior3.7',1);
%水平方向
ch1=detcoef2('h',c,s,1);
%垂直方向
cv1=detcoef2('v',c,s,1);
%斜線方向
cd1=detcoef2('d',c,s,1);
%各頻率成份重構
a1=wrcoef2('a',c,s,'bior3.7',1);
h1=wrcoef2('h',c,s,'bior3.7',1);
v1=wrcoef2('v',c,s,'bior3.7',1);
d1=wrcoef2('d',c,s,'bior3.7',1);
c1=[a1,h1;v1,d1];
%顯示分頻信息
subplot(222);
image(c1);
axis square;
title ('分解後低頻和高頻信息');
%進行圖像壓縮
%保留小波分解第一層低頻信息
%首先對第一層信息進行量化編碼
ca1=appcoef(c,s,'bior3.7',1);
ca1=wcodemat(ca1,440,'mat',0);
%改變圖像高度並顯示
ca1=0.5*ca1;
subplot(223);
image(ca1);
colormap(map);
axis square;
title('第一次壓縮圖像');
disp('第一次壓縮圖像的大小為:');
whos('ca1')
%保留小波分解第二層低頻信息進行壓縮
ca2=appcoef2(c,s,'bior3.7',2);
%首先對第二層信息進行量化編碼
ca2=wcodemat(ca2,440,'mat',0);
%改變圖像高度並顯示
ca2=0.25*ca2;
subplot(224);
image(ca2);
colormap(map);
axis square;
title('第二次壓縮圖像');
disp('第二次壓縮圖像的大小為:');
whos('ca2')
輸出結果如圖:
Name
Size
Bytes
class
壓縮前圖像
X
256×256
524288
Double array
第一次壓縮圖像
Ca1
135×135
145800
Double array
第二次壓縮圖像
Ca2
75×75
45000
Double array
在這裏可以看出,第一次壓縮我們是提取原始圖像中小波分解第一層的低頻信息,此時壓縮效果較好,壓縮比較小(約為1/3大小)。第二次壓縮實提取第一層分解低頻部分的低頻部分(即第二層的低頻部分),其壓縮比較大(約為1/12),壓縮效果在視覺上也基本過得去。
上麵的保留原始圖像中低頻信息的壓縮辦法隻是一種最簡單的壓縮辦法。它不需經過其他處理即可獲得較好的壓縮效果。當然,對於上麵的例子我們還可以隻提取小波分解的第三、第四層的低頻信息。從理論上說,我們可以獲得任意壓縮比的壓縮圖像。隻不過在對壓縮比和圖像質量都有較高要求時,它就不如其他編碼方法了。
下麵我們在舉一個例子,這一次用 中函數來對上圖進行壓縮。
Clear;
%裝入圖形信號
load wbarb;
%顯示圖像
subplot(221);
image(X);
colormap(map);
title('原始圖像');
disp('壓縮前圖像的大小');
whos('X');
axis square;
%對圖像進行壓縮
%對圖像用db3小波進行二層小波分解
[c,s]=wavedec2(X,5,'db3');
[thr,sorh,keepapp]=ddencmp('cmp','wv',X);
[Xcomp,cxc,lxc,perf0,perfl2]=wdencmp('gbl',c,s,'db3',5,thr,sorh,keepapp);
%將壓縮後的圖像於原始圖像相比較
subplot(222);
image(Xcomp);
colormap(map);
title(' 壓縮後的圖像');
disp('壓縮後圖像的大小');
whos('Xcomp')
%顯示有關參數
disp('小波分解係數中值為0的係數個數百分比');
disp(perf0);
disp('壓縮後剩餘能量百分比');
disp(perfl2);
輸出結果如下:
小波分解係數中值為0的係數個數百分比:49.8088
壓縮後剩餘能量百分比:99.9754
總之,是事無絕對。一種壓縮圖像的方法不可能盡善盡美。要想很好的進行圖像的壓縮,就需要綜合的利用多種其他技術,特別是數據編碼和解碼算法。
四:圖像消噪
圖像消噪方法的一般說明
對二維圖像信號的消噪方法同樣適用於一維信號,尤其是對於幾何圖像更適合。二維模型可以表述為
其中, e 是標準偏差不變得高斯白噪聲。二維信號的消噪步驟與一維信號的消噪步驟完全相同,也有三步,隻是用二維小波分析工具代替了一維小波分析工具。如果用固定的閥值形式,測選擇的閥值用 m^2 代替了一維信號中的n 。著三步是:
(1) 二維信號的小波分解 。選擇一個小波和小波分解的層次N, 然後計算信號s到第N層的分解。
(2) 對高頻係數進行閥值量化。對於從一到N的每一層,選擇一個閥值,斌對著一層的高頻係數進行軟閥值化處理。
(3) 二維小波的重構。根據小波分解的第N層的低頻係數和經過修改的從第1層到第N層的各層高頻係數,來計算二維信號的小波重構。
在這三個步驟中,重點內容就是如何選取閥值和如何進行閥值的量化。請注意,
了一維信號自動消噪的情況,對於其他的情況,一維信號的消噪和壓縮用的是wdencmp, 這對於二維信號也是一樣的。
編程
給定一個有較大白噪聲的圖象,利用二維小波分析進行信號消噪處理。
分析:由於圖象所含的噪聲主要是白噪聲,且集中於高部分,故用第通實現消去噪聲。程
序如下。
load tire;
subplot(221);
image(X);
colormap(map);
title('原圖 ');
axis square; %畫出原圖象
init=2055615866;
randn('seed',init)
x=X+38*randn(size(X));
subplot(222);
image(x);
colormap(map);
title('含噪聲圖象 ');
axis square; %畫出含噪聲圖象
[c,s]=wavedec2(x,2,'sym4');
a1=wrcoef2('a',c,s,'sym4',1); %第一次低通濾波消噪
subplot(223);
image(a1);
title('第一次消噪後圖象 ');
axis square; %畫出第一次低通濾波消噪後圖象
a2=wrcoef2('a',c,s,'sym4',2); %第二次低通濾波消噪
subplot(224);
image(a2);
title('第二次消噪後圖象 ');
axis square; %畫出第二次低通濾波消噪後圖象
分析: 第一次消噪濾去了大部分高頻噪聲,但與原圖比較,依然有不少高頻噪聲,第二次消噪在第一次消噪基礎上,再次濾去高頻噪聲,消噪效果較好,但圖像質量比原圖稍差。
五:圖象增強
說明
小波變換將一幅圖象分解為大小、位置和方向都不同的分量。在做逆變換之前可以改變小波變換域中某些係數的大小,這樣就能夠洋選擇的放大所感興趣的分量而減小不需要的分量。
編程:
給定一個圖象信號,用二維小波分析對圖象進行增強處理。
[分析]由於圖象經二維小波分解後,圖象的輪廓主要體現在低頻部分,而細節部分則體現子高頻部分,因此,可以通過對低頻分解係數進行增強處理,對高頻分解係數進行衰減處理,即可以達到圖象增強的作用。
具體處理過程如下程序:
load woman;
subplot(121);
image(X);
colormap(map);
title(‘原始圖象‘);
axis square; %畫出原圖象
[c,s]=wavedec2(X,2,’sym4’); %進行二層小波分解
sizec=size(c); %處理分解係數,突出輪廓,弱化細節
for I =1:sizec(2)
if(c( I )>350)
c( I )=2*c( I );
else
c( I )=0.5*c( I );
end
end
xx=waverec2(c,s,’sym4’); %分解係數重構
subplot(122);
image(xx);
title(‘增強圖象‘)
axis square; %畫出增強圖像
結果分析:
打到了圖像增強的效果,試圖像對比更加明顯,但由於細節上的弱化,卻使得圖像產生模糊的感覺。就那婦女托著下腮的手來說,增強後的圖像幾乎就不能辨認。手指更是消失了。
六:圖象融合
說明
圖象融合是將同一對象的兩個或更多的圖象合成在一幅圖象中,以便他比原來的任何一幅更能容易的為人們所理解。真一技術可應用於多頻譜圖象理解以及醫學圖象處理等領域,再這些場合,同一物體部件的圖象往往是采用不同的成象機理得到的。
編程:
用二維小波分析將兩幅圖象融合在一起。
處理過程如下:
load woman; %裝入原圖像
X1=X;map1=map;
subplot(221);
image(X1);
colormap(map1);
title(‘woman’);
axis square %畫出woman圖像
load wbarb; %裝入原圖像
X2=X;map2=map;
for I =1:256
for j=1:256
if(X2(I, j)>100)
X2(I, j)=1.2*X2(I, j);
else
X2(I, j)=0.5*X2(I, j);
end
end
end
subplot(222);
image(X2);
colormap(map2);
title(‘wbarb’);
axis square %畫出wbarb圖像
[cl,sl]=wavedec2(X1,2,’sym4’);
sizec1=size(c1);
for I=1:sizec1(2)
c1( I )=1.2*c1( I );
end
[c2,s2]=wavedec2(X2,2,’sym4’);
c=c1+c2;
c=0.5*c;
xx=waverec2(c,s,’sym4’);
subplot(223);image(xx);
title(‘融合圖象‘);
axis square %畫出融合後的圖像
結果分析:
一幅圖像和他某一部分放大後的圖像融合,融合後的圖像給人一種朦朦朧朧夢幻般的感覺,對較深的背景部分則做了淡化處理。
七:圖象平滑處理
說明
圖像平滑的主要目的是為了減少噪聲,一般情況下,在空間域內可以用於平均來減少噪聲。在頻率域,因為噪聲浦多在高頻段,因此可以曹用各種形式的低通濾波的辦法來減少噪聲。
編程
給定一個含噪聲的圖象,用二維小波分析和圖象的中值濾波進行圖象的平滑。
[分析]這是一個圖象平滑處理問題。首先,對圖象在頻域內進行增強,然後在空域內加入較大的白噪聲。通過對含噪圖象進行平滑處理,即可以使含噪圖象具有較好的平滑效果。具體處理過程如下:
load woman; %裝入原圖
X1=X;
map1=map;
subplot(221);
image(X1);
colormap(map1);
title('woman');
axis square %畫出原圖
[c,s]=wavedec2(X,2,’sym4’); %二層分解小波信號
sizec=size( c );
for I= 1:sizec(2) %頻域裏增強圖像
if(c( I )>350)
c( I )=1.3*c( I );
else
d( I )=0.5*c( I );
end
end
xx=waverec(c,s,’sym4’); %係數重構
init=2788605826; %加入噪聲
rand(‘seed’,init);
xx=xx+68*(rand(size(xx)));
subplot(221);image(xx);
title(‘增強的含噪圖象‘);
axis square;
for I=2:1:255 %中值濾波
for j=2:1:255
temp=0;
for m=1:3
for n=1:3
temp=temp+xx(I+m-2,j+n-2);
end
end
temp=temp/9;
xx(I, j)=temp;
end
end
colormap(map);
subplot(222);
image(xx);
axis square;
title(‘平滑後的圖象‘);
axis square %畫出平滑後圖像
結果分析:
平滑後的圖像沒有原圖清晰,但邊緣輪廓過渡更自然,消噪的效果還是比較明顯的,噪聲圖像中的一些粒狀顆粒在平滑後基本消失。
附錄
函數名
功能
dwt2
單層二維小波分解
dwtper2
單層二為離散小波變換
wavedec2
多層二維小波分解
idwt2
單層二微小波重構
idwper2
單層二維小波分解
waverec2
多層二維小波重構
upwiev2
二維小波分解的單層重構
wrcoef2
二維小波分解係數單支重構
upcoef2
二維小波分解的直接重構
detcoef2
提取二微小波分解高頻係數
appcoef2
提取二維小波分解低頻係數
wthresh
進行軟閾值或硬閾值處理
wthcoef2
二維信號的小波係數閾值處理
ddencmp
獲取在消噪或壓縮過程中的默認值閾值
wdencmp
用小波進行信號的消噪和壓縮
本文摘自南京大學教學資料:原網址(http://jw.nju.edu.cn/Courseware/tuxyl/text/chap8.htm)