matlab图像小波变换-初步2

多分辨率小波图像变换及系数提取

 

1.相关函数

   wavedec2:多层二维离散小波变换函数

  [C,S] = wavedec2(X,N,'wname')

  [C,S] = wavedec2(X,N,Lo_D,Hi_D)

 

   appcoef2:二维离散小波变换低频部分系数提取

  A = appcoef2(C,S,'wname',N)

  A = appcoef2(C,S,'wname')

  A = appcoef2(C,S,Lo_R,Hi_R)

  A = appcoef2(C,S,Lo_R,Hi_R,N)

 

   detcoef2:二维离散小波变换高频部分系数提取

  D = detcoef2(O,C,S,N)

 

2.matlab代码

clear;

clc;

X = imread('xiaci_128_128_B.bmp');

figure(1);

imshow(X,[]);title('原始图像');

 

%2级小波变换

N = 2;

[C,S] = wavedec2(X,N,'db1');

 

%计算大小

[sizeX,sizeY] = size(X);

size1X = sizeX/2;

size1Y = sizeY/2;

size2X = sizeX/4;

size2Y = sizeY/4;

 

%提取第2级小波系数

temp = C(1:size2X*size2Y);

cA2 = reshape(temp(1:size2X*size2Y),size2X,size2Y);

%cA2 = appcoef2(C,S,'db1',2);

 

%temp = C(size2X*size2Y:size2X*size2Y*2);

%cH2 = reshape(temp(1:size2X*size2Y),size2X,size2Y);

%temp = C(size2X*size2Y*2:size2X*size2Y*3);

%cV2 = reshape(temp(1:size2X*size2Y),size2X,size2Y);

%temp = C(size2X*size2Y*3:size2X*size2Y*4);

%cD2 = reshape(temp(1:size2X*size2Y),size2X,size2Y);

%[cH2,cV2,cD2] = detcoef2('all',C,S,2);

 

%提取第1级小波变换系数

temp = C(size1X*size1Y:size1X*size1Y*2);

cH1 = reshape(temp(1:size1X*size1Y),size1X,size1Y);

temp = C(size1X*size1Y*2:size1X*size1Y*3);

cV1 = reshape(temp(1:size1X*size1Y),size1X,size1Y);

temp = C(size1X*size1Y*3:size1X*size1Y*4);

cD1 = reshape(temp(1:size1X*size1Y),size1X,size1Y);

%[cH1,cV1,cD1] = detcoef2('all',C,S,1);

 

figure(2);

subplot(221);imshow(cA2,[]);title('cA2');

subplot(222);imshow(cH2,[]);title('cH2');

subplot(223);imshow(cV2,[]);title('cV2');

subplot(224);imshow(cD2,[]);title('cD2');

 

figure(3);

%subplot(221);imshow(cA1,[]);title('cA1');

subplot(222);imshow(cH1,[]);title('cH1');

subplot(223);imshow(cV1,[]);title('cV1');

subplot(224);imshow(cD1,[]);title('cD1');

 

%画分割线

[m,n]=size(X);

mm = zeros(m,n);

mm = [[cA2,cH2;cV2,cD2],cH1;cV1,cD1];

dim = 2;

for i=1:dim

    m=m-mod(m,2);

    n=n-mod(n,2);

    mm(m/2,1:n)=255;

    mm(1:m,n/2)=255;

    m=m/2;

    n=n/2;

end

figure(4);

imshow(mm,[]);title('二级分解图像');

 

3.处理结果

 

 

matlab图像小波变换-初步2_第1张图片

matlab图像小波变换-初步2_第2张图片

   最后一幅分割图像中,第2级低频系数比较白,其他部分都比较黑,原因是cA2的数值比较大,还有的位置超过300的,而其他部分相对较小,因此放在一起显示的时候对比就比较明显了,目前还没有好的办法解决,如果强制把低频部分量化到0-255而其他部分不变,感觉不是很准确。

4.关于系数提取

  若使用单层小波变换函数dwt2则小波变换系数直接保存在[cA,cV,cH,cD]中,若使用多层小波变换函数wavedec2则小波变换系数可以从变换结果[C,S]中进行分离,根据C的结构和S中保存的各级变换尺寸的大小从C中进行提取,C的结果为C = [ A(N) | H(N) | V(N) | D(N) | H(N-1) | V(N-1) | D(N-1) | ... | H(1) | V(1) | D(1) ],S是存储各层分解系数长度的,即第一行是A(N)的大小,第二行是H(N) | V(N) | D(N)的大小,第三行是H(N-1) | V(N-1) | D(N-1)的大小,倒数第二行是H(1) | V(1) | D(1)的大小,最后一行是X的大小;另一种方式是使用系数提取函数appcoef2和detcoef2,分别提取变换后的低频部分和高频部分系数。

 

小弟不才,如有不对的地方还请不吝指教!

你可能感兴趣的:(c,matlab,存储)