1

我正在尝试通过将其乘以变换矩阵 H 来实现 128×128 lena 图像的 haar 小波变换,如下所示:

x=imread('lena.jpg');
x=imresize(x,[128 128]);
X=x(:,:,1);
H=generate_haar(128);
X=cast(X,'double');
transformed=H*(X*H');
figure;imagesc(transformed);colormap gray;

function [Hr]=generate_haar(N)
N : size of matrix to be generated, N must be some power of 2.
p=[0 0];
q=[0 1];
n=nextpow2(N);
for i=1:n-1
p=[p i*ones(1,2^i)];
t=1:(2^i);
q=[q t];
end
Hr=zeros(N,N);
Hr(1,:)=1;
for i=2:N;
P=p(1,i); Q=q(1,i);
for j= (N*(Q-1)/(2^P)):(N*((Q-0.5)/(2^P))-1)
    Hr(i,j+1)=2^(P/2);
end
for j= (N*((Q-0.5)/(2^P))):(N*(Q/(2^P))-1)
    Hr(i,j+1)=-(2^(P/2));
end
end
Hr=Hr*(1/sqrt(N));
end

我得到的是这样一张几乎是黑色的图片: 我的代码产生了什么

这不是我所期望的,它必须是 lena 的 1 级载重吨,如下所示: 1-level Dwt of lena

我不想使用 matlab 函数 dwt2 或 wavedec2 。

4

0 回答 0