二維小波變換算法程序目錄

#################################
appcoef2函數
% 當前延拓模式是補零
% 裝載原始圖像
load sinsin;
% 繪制原始圖像
subplot(2,2,1);
image(X);
colormap(map);
title('原始圖像');
% X 包含裝載的圖像
% 使用db1對X進(jìn)行尺度為2的分解
[c,s] = wavedec2(X,2,'db1');
sizex = size(X)
sizec = size(c)
val_s = s
% 提取尺度為2時(shí)的低頻系數
ca2 = appcoef2(c,s,'db1',2);
sizeca2 = size(ca2)
% 繪制尺度為2時(shí)的低頻圖像
subplot(2,2,2);
image(ca2);
colormap(map);
title('尺度為2時(shí)的圖像');
% 計算尺度為1時(shí)的低頻系數
ca1 = appcoef2(c,s,'db1',1);
sizeca1 = size(ca1)
% 繪制尺度為1時(shí)的低頻圖像
subplot(2,2,3);
image(ca1);
colormap(map);
title('尺度為1時(shí)的圖像');
#################################
detcoef2函數
% 當前延拓模式是補零
% 裝載原始圖像
load woman;
% X 包含原始圖像
% 繪制原始圖像
subplot(3,3,1);
image(X);
colormap(map);
title('原始圖像');
% 使用db1對X進(jìn)行尺度為2的分解
[c,s] = wavedec2(X,2,'db1');
sizex = size(X)
sizec = size(c)
val_s = s
% 對于各個(gè)方向,從小波分解結構[c,s]中提取尺度為2時(shí)的高頻系數
[chd2,cvd2,cdd2] = detcoef2('all',c,s,2);
sizecd2 = size(chd2)
% 繪制尺度為2時(shí)高頻圖像
subplot(3,3,4);
image(chd2);
title('尺度為2時(shí)高頻圖像的水平部分');
subplot(3,3,5);
image(cvd2);
title('尺度為2時(shí)高頻圖像的垂直部分');
subplot(3,3,6);
image(cdd2);
title('尺度為2時(shí)高頻圖像的對角部分');
% 對于各個(gè)方向,從小波分解結構[c,s]中提取尺度為1時(shí)的高頻系數
[chd1,cvd1,cdd1] = detcoef2('all',c,s,1);
sizecd1 = size(chd1)
% 繪制尺度為1時(shí)高頻圖像
subplot(3,3,7);
image(chd1);
title('尺度為1時(shí)高頻圖像的水平部分');
subplot(3,3,8);
image(cvd1);
title('尺度為1時(shí)高頻圖像的垂直部分');
subplot(3,3,9);
image(cdd1);
title('尺度為1時(shí)高頻圖像的對角部分');
#################################
idwt2函數
% 當前延拓模式是補零
% 裝載原始圖像
load sinsin;
% X 包含裝載的圖像
% 繪制原始圖像
subplot(1,2,1);
image(X);
colormap(map);
title('原始圖像');
sX = size(X);
% 使用db4對X進(jìn)行單尺度分解
[cA1,cH1,cV1,cD1] = dwt2(X,'db4');
% 利用尺度為1時(shí)的系數直接重構
A0 = idwt2(cA1,cH1,cV1,cD1,'db4',sX);
% 繪制重構圖像
subplot(1,2,2);
image(A0);
title('重構圖像');
% 檢查重構效果
max(max(abs(X-A0)))
#################################
iswt2函數
% 載入原始圖像
load sinsin;
% X 包含裝載的圖像
% 繪制原始圖像
subplot(2,2,1);
image(X);
colormap(map);
title('原始圖像');
% 使用sym4對X在第3層進(jìn)行SWT分解
swc = swt2(X,3,'sym4');
% 第二種用法
[ca,chd,cvd,cdd] = swt2(X,3,'sym4');
% 從小波分解結構swc,重構s
a0 = iswt2(swc,'sym4');
% 繪制重構圖像1
subplot(2,2,3);
image(a0);
colormap(map);
title('重構圖像1');
% 第二種用法
a0 = iswt2(ca,chd,cvd,cdd,'sym4');
% 繪制重構圖像2
subplot(2,2,4);
image(a0);
colormap(map);
title('重構圖像2');
% 檢查重構的效果
err = max(max(abs(X-a0)))
errbis = max(max(abs(X-a0bis)))
#################################
wavedec2函數
% 當前延拓模式是補零
% 裝載原始圖像
load woman;
% X 包含裝載的圖像
% 使用db1對X進(jìn)行尺度為2時(shí)的小波分解
[c,s] = wavedec2(X,2,'db1');
% 分解結構
sizex = size(X)
sizec = size(c)
val_s = s
#################################
swt2函數
%載入原始圖像
load sinsin;
% 使用sym4在第3層對X進(jìn)行SWT分解
[ca,chd,cvd,cdd] = swt2(X,3,'sym4');
whos
#################################
upcoef2函數
% 當前延拓模式是補零
% 裝載原始圖像
load sinsin;
% X 包含裝載的圖像
subplot(3,2,1);
image(X);
colormap(map);
title('原始圖像');
% 使用db4對X進(jìn)行尺度為2的分解
[c,s] = wavedec2(X,2,'db4');
% 由系數重構第1層低頻和細節部分
% 也可以使用wrcoef2完成,或者使用下面的步驟等價(jià)實(shí)現
% Step 1: 從分解結構[c,s]中提取系數
% Step 2: 使用upcoef2進(jìn)行重構
siz = s(size(s,1),:);
ca1 = appcoef2(c,s,'db4',1);
a1 = upcoef2('a',ca1,'db4',1,siz);
% 繪制低頻重構圖
subplot(3,2,3);
image(a1);
colormap(map);
title('低頻重構圖');
chd1 = detcoef2('h',c,s,1);
hd1 = upcoef2('h',chd1,'db4',1,siz);
% 繪制高頻水平部分重構圖
subplot(3,2,4);
image(hd1);
colormap(map);
title('高頻水平部分重構圖');
cvd1 = detcoef2('v',c,s,1);
vd1 = upcoef2('v',cvd1,'db4',1,siz);
% 繪制高頻垂直部分重構圖
subplot(3,2,5);
image(vd1);
colormap(map);
title('高頻垂直部分重構圖');
cdd1 = detcoef2('d',c,s,1);
dd1 = upcoef2('d',cdd1,'db4',1,siz);
% 繪制高頻對角部分重構圖
subplot(3,2,6);
image(dd1);
colormap(map);
title('高頻對角部分重構圖');
#################################
upwlev2函數
% 當前延拓模式是補零
% 裝載原始圖像
load woman;
% X 包含裝載的圖像
% 使用db1在尺度為2時(shí)進(jìn)行對X分解
[c,s] = wavedec2(X,2,'db1');
sc = size(c)
val_s = s
% 對小波分解結構[c,s]進(jìn)行一步重構
[nc,ns] = upwlev2(c,s,'db1');
snc = size(nc)
val_ns = ns
#################################
waverec2函數
% 當前延拓模式是補零
% 裝載原始圖像
load sinsin;
% X 包含裝載的圖像
% 繪制原始圖像
subplot(1,2,1);
image(X);
colormap(map);
title('原始圖像');
% 使用sym4對X進(jìn)行尺度為2時(shí)的小波分解
[c,s] = wavedec2(X,2,'sym4');
% 由小波分解結構[c,s]重構X
a0 = waverec2(c,s,'sym4');
% 繪制重構圖像
subplot(1,2,2);
image(a0);
colormap(map);
title('重構圖像');
% 檢查重構效果
max(max(abs(X-a0)))
#################################
wenergy2函數
load detail
[C,S] = wavedec2(X,2,'sym4');
[Ea,Eh,Ev,Ed] = wenergy2(C,S)
[Ea,EDetails] = wenergy2(C,S)
#################################
wrcoef2函數
% 當前延拓模式是補零
% 裝載圖像
load sinsin;
% X包含載入的圖像
% 繪制原始圖像
figure(1);
subplot(2,2,1);
image(X);
colormap(map);
title('原始圖像');
% 使用sym5對X進(jìn)行尺度為2的分解
[c,s] = wavedec2(X,2,'sym5');
% 從小波分解結構[c,s]進(jìn)行尺度為1和2時(shí)的低頻重構
a1 = wrcoef2('a',c,s,'sym5',1);
a2 = wrcoef2('a',c,s,'sym5',2);
% 繪制尺度為1時(shí)的低頻圖像
subplot(2,2,3);
image(a1);colormap(map);
title('尺度為1時(shí)的低頻圖像');
% 繪制尺度為2時(shí)的低頻圖像
subplot(2,2,4);
image(a2);colormap(map);
title('尺度為2時(shí)的低頻圖像');
% 從小波分解結構[c,s]在尺度為2時(shí)重構高頻
% 'h' 是水平方向
% 'v' 是垂直方向
% 'd' 是對角方向
hd2 = wrcoef2('h',c,s,'sym5',2);
vd2 = wrcoef2('v',c,s,'sym5',2);
dd2 = wrcoef2('d',c,s,'sym5',2);
% 繪制高頻圖像
figure(2);
subplot(2,2,1);
image(hd2);colormap(map);
title('尺度為2時(shí)的水平高頻圖像');
subplot(2,2,2);
image(vd2);colormap(map);
title('尺度為2時(shí)的垂直高頻圖像');
subplot(2,2,3);
image(dd2);colormap(map);
title('尺度為2時(shí)的對角高頻圖像');
% 驗證這些圖像的長(cháng)度都是sX
sX = size(X)
sa1 = size(a1)
shd2 = size(hd2)
#################################
二維離散小波變換1函數
% 裝載圖像
load belmont2;
% 顯示圖像
image(X);
colormap(map);
colorbar;
% 執行圖像的單尺度小波分解
[cA1,cH1,cV1,cD1] = dwt2(X,'bior3.7');
% 由系數重構低頻和高頻部分
A1 = upcoef2('a',cA1,'bior3.7',1);
H1 = upcoef2('h',cH1,'bior3.7',1);
V1 = upcoef2('v',cV1,'bior3.7',1);
D1 = upcoef2('d',cD1,'bior3.7',1);
% 顯示低頻和高頻部分
figure(2);
colormap(map);
nbcol = size(map,1)
subplot(2,2,1); image(wcodemat(A1,nbcol));
title('低頻A1')
subplot(2,2,2); image(wcodemat(H1,nbcol));
title('水平高頻H1')
subplot(2,2,3); image(wcodemat(V1,nbcol));
title('垂直高頻V1')
subplot(2,2,4); image(wcodemat(D1,nbcol));
title('對角高頻D1')
% 由小波逆變換恢復原圖像信號
Xsyn = idwt2(cA1,cH1,cV1,cD1,'bior3.7');
% 圖像的多尺度二維小波分解
[C,S] = wavedec2(X,2,'bior3.7');
% 提取系數的低頻和高頻部分
cA2 = appcoef2(C,S,'bior3.7',2);
% 重構第二層的低頻信號
A2 = wrcoef2('a',C,S,'bior3.7',2);
% 重構第1、2層的高頻信號
H1 = wrcoef2('h',C,S,'bior3.7',1);
V1 = wrcoef2('v',C,S,'bior3.7',1);
D1 = wrcoef2('d',C,S,'bior3.7',1);
H2 = wrcoef2('h',C,S,'bior3.7',2);
V2 = wrcoef2('v',C,S,'bior3.7',2);
D2 = wrcoef2('d',C,S,'bior3.7',2);
% 顯示多尺度二維分解結果
figure(3)
colormap(map);
subplot(2,4,1);image(wcodemat(A1,nbcol));
title('低頻A1')
subplot(2,4,2);image(wcodemat(H1,nbcol));
title('水平高頻H1')
subplot(2,4,3);image(wcodemat(V1,nbcol));
title('垂直高頻V1')
subplot(2,4,4);image(wcodemat(D1,nbcol));
title('對角高頻D1')
subplot(2,4,5);image(wcodemat(A2,nbcol));
title('低頻A2')
subplot(2,4,6);image(wcodemat(H2,nbcol));
title('水平高頻H2')
subplot(2,4,7);image(wcodemat(V2,nbcol));
title('垂直高頻V2')
subplot(2,4,8);image(wcodemat(D2,nbcol));
title('對角高頻D2')
% 重構原始圖像信號
X0 = waverec2(C,S,'bior3.7');
% 顯示重構得到的圖像
figure(4)
image(X0);
colormap(map);
#################################
二維離散小波變換2函數
% 當前延拓模式是補零
% 裝載原始圖像
load sinsin;
% X 包含原始圖像
% 繪制原始圖像
figure(1);
image(X);
colormap(map);
title('原始圖像');
% map 包含原始彩圖
nbcol = size(map,1);
% 使用db1對X進(jìn)行單尺度分解
[cA1,cH1,cV1,cD1] = dwt2(X,'db1');
% 繪制各分解系數圖像
figure(2);
subplot(2,2,1);
image(cA1);colormap(map);
title('db1低頻系數圖像');
subplot(2,2,2);
image(cH1);
title('db1水平高頻圖像');
subplot(2,2,3);
image(cV1);
title('db1垂直高頻圖像');
subplot(2,2,4);
image(cD1);
title('db1對角高頻圖像');
% 通過(guò)圖像量化編碼改善圖像質(zhì)量
cod_X = wcodemat(X,nbcol);
cod_cA1 = wcodemat(cA1,nbcol);
cod_cH1 = wcodemat(cH1,nbcol);
cod_cV1 = wcodemat(cV1,nbcol);
cod_cD1 = wcodemat(cD1,nbcol);
dec2d = [...
cod_cA1, cod_cH1; ...
cod_cV1, cod_cD1; ...
];
% 繪制各分解系數圖像
figure(3);
subplot(2,2,1);
image(cod_cA1);colormap(map);
title('編碼后低頻系數圖像');
subplot(2,2,2);
image(cod_cH1);
title('編碼后水平高頻圖像');
subplot(2,2,3);
image(cod_cV1);
title('編碼后垂直高頻圖像');
subplot(2,2,4);
image(cod_cD1);
title('編碼后對角高頻圖像');
#################################
二維離散小波變換3函數
% 裝載圖像信號
load belmont2;
% 完成圖像的單層次小波分解
[swa,swh,swv,swd] = swt2(X,1,'db1');
% 顯示低頻和高頻系數
map = pink(size(map,1));
figure(1)
colormap(map)
nbcol = size(map,1)
subplot(2,2,1), image(wcodemat(swa,nbcol));
title('低頻系數swa')
subplot(2,2,2), image(wcodemat(swh,nbcol));
title('水平方向高頻系數swh')
subplot(2,2,3), image(wcodemat(swv,nbcol));
title('垂直方向高頻系數swv')
subplot(2,2,4), image(wcodemat(swd,nbcol));
title('對角方向高頻系數swd')
% 通過(guò)平穩小波逆變換重構圖像
A0 = iswt2(swa,swh,swv,swd,'db1');
nulcfs = zeros(size(swa));
% 由分解系數重構第一層的低頻和高頻部分
A1 = iswt2(swa,nulcfs,nulcfs,nulcfs,'db1');
H1 = iswt2(nulcfs,swh,nulcfs,nulcfs,'db1');
V1 = iswt2(nulcfs,nulcfs,swv,nulcfs,'db1');
D1 = iswt2(nulcfs,nulcfs,nulcfs,swd,'db1');
% 顯示第一層的分解結果,包括顯示低頻和高頻部分
figure(2)
colormap(map)
subplot(2,2,1), image(wcodemat(A1,nbcol));
title('低頻 A1')
subplot(2,2,2), image(wcodemat(H1,nbcol));
title('水平高頻H1')
subplot(2,2,3), image(wcodemat(V1,nbcol));
title('垂直高頻V1')
subplot(2,2,4), image(wcodemat(D1,nbcol));
title('對角高頻D1')
% 圖像的多層二維離散平穩小波分解
[swa,swh,swv,swd] = swt2(X,3,'db1');
% 顯示多層二維離散平穩小波分解結果
figure(3)
colormap(map)
kp = 0;
for i = 1:3
subplot(3,4,kp+1), image(wcodemat(swa(:,:,i),nbcol));
title(['低頻系數:level ',num2str(i)])
subplot(3,4,kp+2), image(wcodemat(swh(:,:,i),nbcol));
title(['水平高頻系數:level ',num2str(i)])
subplot(3,4,kp+3), image(wcodemat(swv(:,:,i),nbcol));
title(['垂直高頻系數:level ',num2str(i)])
subplot(3,4,kp+4), image(wcodemat(swd(:,:,i),nbcol));
title(['對角高頻系數:level ',num2str(i)])
kp = kp + 4;
end
% 從系數中重構第3層的低頻信號
mzero = zeros(size(swd));
A = mzero;
A(:,:,3) = iswt2(swa,mzero,mzero,mzero,'db1');
% 由系數重構第1、2、3層的高頻信號
H = mzero; V = mzero;
D = mzero;
for i = 1:3
swcfs = mzero; swcfs(:,:,i) = swh(:,:,i);
H(:,:,i) = iswt2(mzero,swcfs,mzero,mzero,'db1');
swcfs = mzero; swcfs(:,:,i) = swv(:,:,i);
V(:,:,i) = iswt2(mzero,mzero,swcfs,mzero,'db1');
swcfs = mzero; swcfs(:,:,i) = swd(:,:,i);
D(:,:,i) = iswt2(mzero,mzero,mzero,swcfs,'db1');
end
% 重構第1、2層的低頻部分
A(:,:,2) = A(:,:,3) + H(:,:,3) + V(:,:,3) + D(:,:,3);
A(:,:,1) = A(:,:,2) + H(:,:,2) + V(:,:,2) + D(:,:,2);
figure(4)
% 顯示第1、2、3層的低頻和高頻部分
colormap(map)
kp = 0;
for i = 1:3
subplot(3,4,kp+1), image(wcodemat(A(:,:,i),nbcol));
title(['低頻:level ',num2str(i)])
subplot(3,4,kp+2), image(wcodemat(H(:,:,i),nbcol));
title(['水平高頻:level ',num2str(i)])
subplot(3,4,kp+3), image(wcodemat(V(:,:,i),nbcol));
title(['垂直高頻:level ',num2str(i)])
subplot(3,4,kp+4), image(wcodemat(D(:,:,i),nbcol));
title(['對角高頻:level ',num2str(i)])
kp = kp + 4;
end
###########################
聯(lián)系客服