MATLAB图像小波变换

小波变换与小波包变换

        人脸图像f(x,y) 的一层小波变换如下图所示:

162748_ua5s_1451225.png

        图中L H 分别表示低通滤波器高通滤波器l(n) h(n) 分别表示它们相应的脉冲响应,2↓1表示降2采样fLLfHH分别表示双向低频和高频小波子空间图像,而fLHfHL分别表示一个方向低频、另一个方向高频的小波子空间图像。

        若继续对fLL 做小波分解,则称为二层小波变换;若对4个子图都继续做小波分解,则称为二层小波包变换。对只含有低频成分的子图做小波分解,则称为不完全小波包变换

图像小波变换的Matlab代码

clc;
clear;
close all;

Xa =[40,10,56,46];  % 56*2=112,46*2-92(图片分辨率为112*92)
Xh =[40,10,56,46];
Xv =[40,10,56,46];
Xd =[40,10,56,46];
for i = 1:40        % 40个人脸
    for j = 1:10    % 1人10个表情
        I = imread(strcat('D:\Faces\ORL\s',num2str(i),'\',num2str(j),'.bmp'));      
        [c1,s1]=wavedec2(double(I),1,'db1');    % 分别做4个方向的小波分解
        ca = appcoef2(c1,s1,'db1',1);
        ch = detcoef2('h',c1,s1,1);
        cv = detcoef2('v',c1,s1,1);
        cd = detcoef2('d',c1,s1,1);
        % A = uint8([wcodemat(ca,255),wcodemat(ch,255);wcodemat(cv,255),wcodemat(cd,255)]);
        % subplot(2,5,j),imshow(A,[],'InitialMagnification',100);
        
        for k = 1:56
            for l = 1:46
                Xa(i,j,k,l) = ca(k,l);
                Xh(i,j,k,l) = ch(k,l);
                Xv(i,j,k,l) = cv(k,l);
                Xd(i,j,k,l) = cd(k,l);
            end
        end
    end 
end

for i = 1:1     % 查看第1个人的10个表情图的小波分解效果
    for j = 1:10
        xa = [56,46];
        xh = [56,46];
        xv = [56,46];
        xd = [56,46];
        for k = 1:56
            for l = 1:46
                xa(k,l) = Xa(i,j,k,l);
                xh(k,l) = Xh(i,j,k,l);
                xv(k,l) = Xv(i,j,k,l);
                xd(k,l) = Xd(i,j,k,l);
            end
        end
        A = uint8([wcodemat(xa,255),wcodemat(xh,255);wcodemat(xv,255),wcodemat(xd,255)]);
        subplot(2,5,j),imshow(A,[],'InitialMagnification',100);
    end
end

效果图

223504_ksvp_1451225.png

后记

        本例仅给出图像1层小波变换,可以根据实际项目需求做n层图像小波分解,用于提取人脸图像特征。例如:

[c,s] = wavedec2(double(ca),1,'db1');
a = appcoef2(c,s,'db1',1);
% 构造基本分类器D1
for m = 1:28
    for n = 1:23
        D1(i,j,m,n) = a(m,n);
    end
end        
h = detcoef2('h',c,s,1);
v = detcoef2('v',c,s,1);
d = detcoef2('d',c,s,1);

        具体可以参考论文基于模糊积分的不完全小波包子空间集成人脸识别 翟俊海  王熙照  张素芳

Reference

Matlab小波变换的三级分解程序用于图像处理

帖中代码:

clc;clear;close all
I = imread('lena.bmp');
%subplot(221);
subplot(221),imshow(I,[],'InitialMagnification',100);
title('原始载体图像')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%图像的一级小波分解 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[c1,s1]=wavedec2(double(I),1,'db1');
ca88 = appcoef2(c1,s1,'db1',1);
ch88 = detcoef2('h',c1,s1,1);
cv88 = detcoef2('v',c1,s1,1);
cd88 = detcoef2('d',c1,s1,1);
A88 = uint8([wcodemat(ca88,255),wcodemat(ch88,255);wcodemat(cv88,255),wcodemat(cd88,255)]);
%subplot(222); 
subplot(222),imshow(A88,[],'InitialMagnification',100);
title('图像的一级小波分解');


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%图像的二级小波分解 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[c,s]=wavedec2(double(I),2,'db1');
ca2 = appcoef2(c,s,'db1',2);
ch2 = detcoef2('h',c,s,2);
cv2 = detcoef2('v',c,s,2);
cd2 = detcoef2('d',c,s,2);
%ca1 = appcoef2(c,s,'db2',1);
ch1 = detcoef2('h',c,s,1);
cv1 = detcoef2('v',c,s,1);
cd1 = detcoef2('d',c,s,1);


A1 = [ca2*4,ch2*4;cv2*4,cd2*4];
k=s(2,1)*2-s(3,1);
ch1 = padarray(ch1,[k k],1,'post');
cv1 = padarray(cv1,[k k],1,'post');
cd1 = padarray(cd1,[k k],1,'post');
%A = [A1,ch1*4; cv1*4,cd1*4];
A = uint8([wcodemat(A1,255),wcodemat(ch1*10,255); wcodemat(cv1*10,255),wcodemat(cd1*10,255)]);
% min = min(A(:));
% max = max(A(:));
%subplot(223); 
subplot(223),imshow(A,[],'InitialMagnification',100);
title('图像的二级小波分解');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%图像的三级小波分解 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[c,s]=wavedec2(double(I),3,'db1');
ca3 = appcoef2(c,s,'db1',3);
ch3 = detcoef2('h',c,s,3);
cv3 = detcoef2('v',c,s,3);
cd3 = detcoef2('d',c,s,3);
ch2 = detcoef2('h',c,s,2);
cv2 = detcoef2('v',c,s,2);
cd2 = detcoef2('d',c,s,2);
ch1 = detcoef2('h',c,s,1);
cv1 = detcoef2('v',c,s,1);
cd1 = detcoef2('d',c,s,1);
A2 = [ca3*4,ch3*4;cv3*4,cd3*4];
k=s(2,1)*2-s(3,1);
ch2 = padarray(ch2,[k k],1,'post');
cv2 = padarray(cv2,[k k],1,'post');
cd2 = padarray(cd2,[k k],1,'post');
A1= [A2,ch2*4; cv2*4,cd2*4];
k=s(2,1)*4-s(4,1);
ch1 = padarray(ch1,[k k],1,'post');
cv1 = padarray(cv1,[k k],1,'post');
cd1 = padarray(cd1,[k k],1,'post');
AA = uint8([wcodemat(A1,255),wcodemat(ch1*4,255); wcodemat(cv1*4,255),wcodemat(cd1*4,255)]);
% min = min(A(:));
% max = max(A(:));
%subplot(224);
subplot(224),imshow(AA,[],'InitialMagnification',100);
title('图像的三级小波分解');

效果图:

205129_UtNS_1451225.png



转载于:https://my.oschina.net/keyven/blog/552050

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值