MATLAB图像小波变换

为什么80%的码农都做不了架构师?>>>   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:56for l = 1:46Xa(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);endendend 
endfor i = 1:1     % 查看第1个人的10个表情图的小波分解效果for j = 1:10xa = [56,46];xh = [56,46];xv = [56,46];xd = [56,46];for k = 1:56for l = 1:46xa(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);endendA = 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:28for n = 1:23D1(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

grunt之Gruntfile(1)

grunt 执行的时候,他会找该目录下的Gruntfile文件,所以,要在目录下创建Gruntfile文件。 下面我demo一个copy任务: 执行copy,首先我们要一个copy的模块,那么我们先安装下copy模块 首先,我到H盘&a…

MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程

2019独角兽企业重金招聘Python工程师标准>>> 开发项目涉及到的表太多,一个一个的写JAVA实体类很是费事。MyEclipse提供简便的方法:反向数据库 步骤大致如下: 第一步: window-->open Perspective-->MyEclipse Java Persisten…

开始nodejs+express的学习+实践(8)

为什么80%的码农都做不了架构师?>>> 1.session使用 介绍的非常详细: http://www.cnblogs.com/chenchenluo/p/4197181.html 对比我们的app.js需要引入express-session模块和使用这个模块,在package依赖,并加载。 我们修…

maven项目部署到linux上的奇葩问题

2019独角兽企业重金招聘Python工程师标准>>> 经常会遇到这样子的问题,maven项目在本地的eclipse配置的好好的,结果一到服务器就运行不起来。 当然遇到这种情况,我们首先会想到环境变量和相关的路径问题,但是当这两个条…

网络:TCP通讯之 time_wait 状态

基于TCP协议的通讯流程1、TCP建立连接2、TCP断开连接3、TCP状态转换TCP状态解释: SYN-RECVD:再收到和发送一个连接请求后等待对方对连接请求的确认 ESTABLISHED:代表一个打开的连接 FIN-WAIT-1:等待远程TCP连接中断请求&#xff0…

linux下echo与time服务的程序实现

一、针对ECHO服务的TCP客户软件的实现 1.网络拓扑结构&#xff1a; 2.源码&#xff1a; 1 #include <stdio.h>2 #include <stdlib.h>3 #include <unistd.h>4 #include <string.h>5 #include <stdarg.h>6 #include <sys/types.h>7 #include…

Linux高性能服务器编程:进程池和线程池原理及应用(有图有代码有真相!!!)

一、问题引入 在前面编写多进程、多线程服务器时通过动态创建子进程和子线程来实现并发服务器&#xff0c;这样做有以下缺点&#xff1a; 1&#xff09;动态创建进程、线程将会比较耗费时间&#xff0c;将导致较慢的客户响应。 2&#xff09;动态创建的子进程只为一个客户服…

Linux:多进程、多线程服务器的实现解析(有图有代码有真相!!!)

一、问题引入 阻塞型的网络编程接口 几乎所有的程序员第一次接触到的网络编程都是从 listen()、send()、recv()等接口开始的。使用这些接口可以很方便的构建服务器 /客户机的模型。 我们假设希望建立一个简单的服务器程序&#xff0c;实现向单个客户机提供类似于“一问一答”的…

数据结构:神奇的B树实现解析(有图有代码有真相!!!)

一、B树引入 二叉搜索树、平衡二叉树、红黑树都是动态查找树&#xff0c;典型的二叉搜索树结构&#xff0c;查找的时间复杂度和树的高度相关O(log2N)。 1&#xff09;数据杂乱无章-------线性查找--O&#xff08;n&#xff09; 2&#xff09;数据有序-------二分查找 ---O(lo…

Linux:dup/dup2 文件描述符重定向函数(有图有代码有真相!!!)

一、dup/dup2 有时我们希望把标准输入重定向到一个文件&#xff0c;或者把标准输出重定向到一个网络连接。系统调用dup和dup2能够复制文件描述符。dup返回新的文件文件描述符&#xff08;没有用的文件描述符最小的编号&#xff09;。 dup2可以让用户指定返回的文件描述符的值…

Linux:I/O多路转接之select(有图有代码有真相!!!)

一、select引入 一次 I/O 分为两个部分&#xff1a;1&#xff09;等待数据就绪 2&#xff09;进行数据转移 1、select 原理&#xff1a; select的原理就是减少等待数据就绪的比重&#xff0c;巧妙的利用等待队列机制让用户进程适当在没有资源可读/写时睡眠&#xff0c;有资…

Linux: I/O多路转接之poll(有图有代码有真相!!!)

一、poll()函数解析 不同与select使⽤用三个位图来表⽰示三个fdset的⽅方式&#xff0c;poll使⽤用⼀一个 pollfd的指针实现。pollfd结构包含了要监视的event和发⽣生的event&#xff0c; 不再使⽤用select“参数-值”传递的⽅方式。同时&#xff0c;pollfd并没有最⼤大数量限…

kalilinux装到u盘上的弊端_付费下载的歌曲,竟然无法在汽车上播放!原因在这里...

『使用某音乐播放器下载了周杰伦的110首歌曲&#xff0c;其中106首是kgm格式&#xff0c;4首mp3格式&#xff0c;装到U盘后&#xff0c;在其它设备播放只有4首mp3格式的可以播放&#xff0c;其它的均无法播放&#xff0c;请问该如何处理&#xff1f;』网友留言截图这是一位网友…

iconsvg image怎么变为path_昆凌是怎么收服天王周杰伦的?这几招太高明了

周杰伦和昆凌又出来撒狗粮了&#xff01;就在前两天(6月2日)&#xff0c;在参加郎朗的婚礼时&#xff0c;#周杰伦搂昆凌看烟花#的消息悄悄上了热搜。视频中&#xff0c;两人并肩站立&#xff0c;一起欣赏着窗外的美景。周杰伦时不时在昆凌的耳边私语几句&#xff0c;看起来很是…

ewebeditor未授权:功能被禁用请先配置授权_SteamPY新功能——外区账号礼物自动领取...

自从PY平台增加了外区代购后发现许多玩家在购买礼物时常会发生收到礼物后准备点击入库时弹出地区不可用的提示这个问题在Steam外区账号一直频繁发生究其因在于Steam账号登录时的IP问题遇到该问题切勿拒收礼物&#xff01;通过Steam客户端清理登录授权注销退出后再次使用账号对应…

Linux: shell 中命令代换 $() 和 ``(有图有代码有真相!!!)

一、命令代换&#xff08;命令替换&#xff09; 由 或 $() 括起来的也是一条命令&#xff0c;shell先执行该命令&#xff0c;再将结果立刻代换到当前命令行中。 简单例子&#xff1a; DATEdate echo $DATE DATE$(date) echo $DATE 执行结果&#xff1a; 二、优缺点&#x…

精雕道路怎么遍弧形_【养护技术】道路“创可贴”——沥青冷补料 六大优势助力道路养护...

点击上面蓝字关注我们微信号&#xff1a;xzgsgl随着城市精细化管理目标不断提高&#xff0c;市政道路养护修补的要求也越来越高。不但对修补的外观、质量有了更高的标准&#xff0c;对修复时限也提出了一定要求&#xff0c;这就要求我们的养护单位快速、优质地完成道路修补任务…

单耳蓝牙耳机怎么连接_蓝牙耳机怎么挑选?推荐性价比高的蓝牙耳机

随着手机逐渐取消了耳机孔&#xff0c;越来越多的人们开始使用上了蓝牙耳机。在当今这个飞速发展的时代&#xff0c;蓝牙耳机无疑成为了新时代的宠儿。无论是上班族还是当代大学生等年轻化群体&#xff0c;耳机的第一选择都是蓝牙耳机。但是面对市面上如此多的蓝牙耳机&#xf…

Linux: shell命令 eval (有图有代码有真相!!!)

一、eval 命令定义 shell中的eval命令将会首先扫描命令行进行所有的替换&#xff0c;然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。 该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。不过这些变量本身并不复杂。eval 命令也可…

qlabel可以选中吗_惊现凡尔赛式排版!原来微信公众号排版样式还可以“变装”?...

各位小伙伴们&#xff0c;要集中注意力了&#xff01;接下来就是考验你们观察力的时候啦&#xff01;快跟着小妹儿看一下&#xff0c;一个样式到底能有多少种玩法&#xff1f;文中使用工具为公众号编辑器-小蚂蚁编辑器。1、添加/删除背景编辑器里的内容样式是可以增加或者删除背…