博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MATLAB图像小波变换
阅读量:6718 次
发布时间:2019-06-25

本文共 4248 字,大约阅读时间需要 14 分钟。

  hot3.png

小波变换与小波包变换

        人脸图像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 endfor 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);    endend

效果图

223504_ksvp_1451225.png

后记

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

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

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

Reference

帖中代码:

clc;clear;close allI = 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

你可能感兴趣的文章
多表外连接的使用
查看>>
ORACLE rman备份之ORA-19809 ORA-19804
查看>>
《夜班医生》观后感
查看>>
SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法
查看>>
[20170315]简单探究dg的mrp进程.txt
查看>>
JQuery+CSS3实现封装弹出登录框效果
查看>>
在Visual Studio 2017中找不到.NET Framework 4.6.2
查看>>
谈长耗时任务的优化
查看>>
rpc框架之 avro 学习 2 - 高效的序列化
查看>>
回归基础性安全防护:Equifax(艾可飞)事件前车之鉴
查看>>
【妄言之言】我的2016--困境与选择
查看>>
数据库设计---关于建表的时候选择横表和竖表(纵表)的一点思考
查看>>
微信小程序开发(3) 热门电影
查看>>
二极管与、或门,三极管非门电路原理
查看>>
美图T8s真机来了!电影人像和云端AI处理是亮点
查看>>
卑不谋尊,疏不谋戚
查看>>
Docker上的MySQL:MySQL容器的单主机网络
查看>>
阿里巴巴股价大涨市值超腾讯居亚洲第一
查看>>
360发布企业BYOD安全管理系统"360天机"
查看>>
容器网络概述
查看>>