3D Wavelet Transform via Linear Algebra

1 次查看(过去 30 天)
Hello, I am putting this out there to see if anyone can help me take my linear algebra solution to the wavelet transform from 2D to 3D. The reason I am doing this is because there is no lwt3 function in the wavelet toolbox, and dwt3 does not organize the coefficients in a way that I would prefer.
The equations for 1D and 2D are fairly simple. Working with an operator "L" and "H" which are N/2 by N, one can perform the 1D by multiplying the vector by the transpose of the operator. In 2D you perform L*X*L' for every combination of L and H (resulting in 4, N/2 by N/2 matrices). Here is some code demonstrating 1D and 2D, if anyone could help me figure out 3D it would be greatly appreciated.
%% Datasets
X1 = reshape(1:4,1,4);
X2 = reshape(1:16,4,4);
X3 = reshape(1:64,4,4,4);
%% Get Operators
ls = liftingScheme('Wavelet','db2');
[LoD,HiD,LoR,HiR] = ls2filt(ls);
L = operator(LoD,4);
H = operator(HiD,4);
%% 1D transform
l = X1*H';
h = X1*L';
%% 2D transform
ll = L*X2*L';
lh = H*X2*L';
hl = L*X2*H';
hh = H*X2*H';
%% 3D transform???
%% FUNCTIONS
function L = operator(a,N)
L = zeros(N/2,N);
for i = 1:N/2
L(i,2*(i-1)+1:2*(i-1)+numel(a)) = a;
end
L = L(:,1:N) + [L(:,N+1:N+floor(numel(a)/2)),zeros(N/2,N-floor(numel(a)/2))];
end
  1 个评论
Dylan Tarter
Dylan Tarter 2024-5-29
I did find this toolbox which help form the forward transform, but doing the inverse transform gives errors
In this snippet L is the same as above, this works but if X becomes a 1x1x1 it does not, which is kind of a nice feature for a complete WT
...
lll = tprod(X,{L,L,L}); % forward transform
...
iX = tprod(lll,{L',L',L'})) % broken inverse

请先登录,再进行评论。

采纳的回答

Dylan Tarter
Dylan Tarter 2024-5-29
Sorted it out myself, this library allows for simple tensor math:
lll = tprod(X,{L,L,L});

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Lifting 的更多信息

产品


版本

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by