云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 离散二维小波变换的程序

离散二维小波变换的程序

  • 62 次阅读
  • 3 次下载
  • 2025/5/22 23:11:32

程序是下面这样,但只能处理长宽一样的方形图像,灰度和彩色图像都可,要用其他图像只需把Lena.bmp改为其他图像,但图像要保存在m文件所在路径下。下面还有一个运行后的图像(之一),希望能对你有所帮助。

clear;clc;

%%%%%%%%%%测试图像只能是方形图像,长宽像素一样。

f=imread('Lena.bmp');%%读取图像数据,图像只能保存在m文件所在的路径下 d=size(f);

if length(d)>2

f=rgb2gray((f));%%%%%%%%如果是彩色图像则转化为灰度图 end

T=d(1); SUB_T=T/2;

% 2.进行二维小波分解

l=wfilters('db10','l'); % db10(消失矩为10)低通分解滤波器冲击响应(长度为20) L=T-length(l);

l_zeros=[l,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂 h=wfilters('db10','h'); % db10(消失矩为10)高通分解滤波器冲击响应(长度为20)

h_zeros=[h,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂 for i=1:T; % 列变换

row(1:SUB_T,i)=dyaddown( ifft( fft(l_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积<->FFT

row(SUB_T+1:T,i)=dyaddown( ifft( fft(h_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积<->FFT end;

for j=1:T; % 行变换

line(j,1:SUB_T)=dyaddown( ifft( fft(l_zeros).*fft(row(j,:)) ) ); % 圆周卷积<->FFT

line(j,SUB_T+1:T)=dyaddown( ifft( fft(h_zeros).*fft(row(j,:)) ) ); % 圆周卷积<->FFT end;

decompose_pic=line; % 分解矩阵 % 图像分为四块

lt_pic=decompose_pic(1:SUB_T,1:SUB_T); % 在矩阵左上方为低频分量--fi(x)*fi(y)

rt_pic=decompose_pic(1:SUB_T,SUB_T+1:T); % 矩阵右上为--fi(x)*psi(y)

lb_pic=decompose_pic(SUB_T+1:T,1:SUB_T); % 矩阵左下为--psi(x)*fi(y)

rb_pic=decompose_pic(SUB_T+1:T,SUB_T+1:T); % 右下方为高频分量--psi(x)*psi(y)

% 3.分解结果显示 figure(1);

subplot(2,1,1);

imshow(f,[]); % 原始图像 title('original pic'); subplot(2,1,2);

image(abs(decompose_pic)); % 分解后图像 title('decomposed pic'); figure(2);

% colormap(map); subplot(2,2,1);

imshow(abs(lt_pic),[]); % 左上方为低频分量--fi(x)*fi(y) title('\\Phi(x)*\\Phi(y)'); subplot(2,2,2);

imshow(abs(rt_pic),[]); % 矩阵右上为--fi(x)*psi(y) title('\\Phi(x)*\\Psi(y)'); subplot(2,2,3);

imshow(abs(lb_pic),[]); % 矩阵左下为--psi(x)*fi(y) title('\\Psi(x)*\\Phi(y)'); subplot(2,2,4);

imshow(abs(rb_pic),[]); % 右下方为高频分量--psi(x)*psi(y) title('\\Psi(x)*\\Psi(y)');

% 5.重构源图像及结果显示

% construct_pic=decompose_matrix'*decompose_pic*decompose_matrix;

l_re=l_zeros(end:-1:1); % 重构低通滤波 l_r=circshift(l_re',1)'; % 位置调整

h_re=h_zeros(end:-1:1); % 重构高通滤波 h_r=circshift(h_re',1)'; % 位置调整

top_pic=[lt_pic,rt_pic]; % 图像上半部分 t=0;

for i=1:T; % 行插值低频

if (mod(i,2)==0)

topll(i,:)=top_pic(t,:); % 偶数行保持 else

t=t+1;

topll(i,:)=zeros(1,T); % 奇数行为零 end end;

for i=1:T; % 列变换

topcl_re(:,i)=ifft( fft(l_r).*fft(topll(:,i)') )'; % 圆周卷积<->FFT end;

bottom_pic=[lb_pic,rb_pic]; % 图像下半部分 t=0;

for i=1:T; % 行插值高频 if (mod(i,2)==0)

bottomlh(i,:)=bottom_pic(t,:); % 偶数行保持 else

bottomlh(i,:)=zeros(1,T); % 奇数行为零 t=t+1; end end

这个只是一级分解,matlab自带的函数可以实现多级分解,级数由编程者自己确定。

是的,是一样的。

搜索更多关于: 离散二维小波变换的程序 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

程序是下面这样,但只能处理长宽一样的方形图像,灰度和彩色图像都可,要用其他图像只需把Lena.bmp改为其他图像,但图像要保存在m文件所在路径下。下面还有一个运行后的图像(之一),希望能对你有所帮助。 clear;clc; %%%%%%%%%%测试图像只能是方形图像,长宽像素一样。 f=imread('Lena.bmp');%%读取图像数据,图像只能保存在m文件所在的路径下 d=size(f); if length(d)>2 f=rgb2gray((f));%%%%%%%%如果是彩色图像则转化为灰度图 end T=d(1); SUB_T=T/2; % 2.进行二维小波分解 l=wfilters('db10','l'); % db10(消失矩为10

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com