二维小波变换程序

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/08 09:01:06

二维小波变换程序
二维小波变换程序

二维小波变换程序
程序是下面这样,但只能处理长宽一样的方形图像,灰度和彩色图像都可,要用其他图像只需把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自带的函数可以实现多级分解,级数由编程者自己确定.
是的,是一样的.

二维小波变换程序 一维,二维小波变换过程是怎样的?分别求其C,C++编写的程序 二维二进小波变换算法也可以是二进小波变换算法 一维二维离散小波变换详细的推导过程. 小波去噪matlab程序,MATLAB高手给定的图像为二维信号,二维信号在小波域中的降噪方法的基本思想与一维的情况一样,在阈值选择上可以使用统一的全局阈值.虽然有关小波变换的函数是在小波工 请问一维小波变换和二维小波变换的最大区别1、一维小波变换是否可以对图像进行分解2、若1成立,那么一维小波变换和二维小波变换对图像进行分别的最大区别是什么?3、若1成立,那么二维 为什么二维小波变换不改变原始数据的大小但是一维小波变换改变数据的大小如图像做二维小波变换,如果原来是512*512,小波变换还是512*512的,但是一位数据做小波变换后,数据的大小就变了 连续小波变换的冗余性怎么理解?书上的原话:“连续小波变换把一维信号变换到二维空间,因此在连续小波变换中存在信息表述的冗余度.小波变换的逆变换公式不是唯一的.”同时,该书上又 跪求用MATLAB编写的关于小波变换数字图像数字边缘提取的程序 求基于小波变换的图像融合的程序算法(Matlab) matlab进行二维DCT变换和二维DCT反变换在Matlab中,函数dct2 和函数idct2分别用于进行二维DCT变换和二维DCT反变换.下面以处理本次训练图像为例说明该余弦正反变换在Matlab中的实现.其程序清单如下 什么是小波变换 什么是小波变换 什么是小波变换 Gabor变换是不是小波变换 为什么二维Morlet小波有方向性? 什么是小波-contourlet变换 什么是冗余小波变换?