I was wondering if anyone may know of any method for the construction of a 3D wavelet transform in matrix form? I've been able to build matrices to perform 1D & 2D transforms. Yet, am finding very little resources regarding the 3D case in the literature.
-
$\begingroup$ It might be that you need tensors (3D blocks of numbers) and not matrices. reading this superficially:en.m.wikipedia.org/wiki/… there is a quote “The discrete wavelet transform is extended to the multidimensional case using the tensor product of well known 1-D wavelets. In 2-D for example, the tensor product space for 2-D is decomposed into four tensor product vector spaces” $\endgroup$– Sidharth GhoshalCommented Jul 27, 2023 at 13:42
-
$\begingroup$ I’m not actually familiar with this area of math/signal processing so let’s wait for an expert but can you edit your question to explicitly show what the 1D and 2D matrix cases are, if I see an obvious pattern that suggests a tensor product I might be able to construct your 3D example $\endgroup$– Sidharth GhoshalCommented Jul 27, 2023 at 13:43
-
$\begingroup$ Sure thing! I'll provide some the results I have now for those cases in a moment (at work currently). But thanks so much for the help! $\endgroup$– hubbleCommented Jul 27, 2023 at 15:15
-
$\begingroup$ If I may ask, why do you need it in matrix form? $\endgroup$– AnonSubmitter85Commented Jul 28, 2023 at 19:37
-
$\begingroup$ @AnonSubmitter85 This is purely just a pedagogical exercise for myself to understand how one could build these matrices manually. $\endgroup$– hubbleCommented Jul 31, 2023 at 14:21
1 Answer
In general, if you want to construct the matrix form of a linear operator, you can always apply the operator to the sequence of basis vectors. The result for each basis vector is the corresponding column of the matrix.
For example, let $f(\mathbf{x}) : \mathbb{C}^N \rightarrow \mathbb{C}^N$ be some general linear operator. If we wanted to construct the $N \times N$ matrix representation, we could do so computing the $i^\mathrm{th}$ column as $f(\mathbf{e}_i)$, where $\mathbf{e}_i$ is the $i^\mathrm{th}$ standard basis vector (i.e., all zeros except a one at element $i$). This works since for any matrix $\mathbf{A}$, the product $\mathbf{A} \mathbf{e}_i$ is simply the $i^\mathrm{th}$ column of $\mathbf{A}$.
Note that you can do this for 1-D, 2-D, 3-D, etc. problems by stacking the dimensions on top of one another into a single vector. However, the size of your matrix will quickly grow out of control. For example, consider an $L \times P$ image. The matrix representation for a 2-D DFT of this image will be $LP \times LP$.
If you want the matrix representation so that you can use it in a system solver that requires the adjoint of an operator in order to compute the solution, you should handle that with function handles and avoid explicitly forming the matrix.
-
$\begingroup$ Thanks for this! I have done this and am able to get the desired result, however, I'm seeking a method that allows one to manually build the matrix so compute each sub-signal such as this paper: ( ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5553961 ) $\endgroup$– hubbleCommented Jul 31, 2023 at 14:20