Demonstrate perfect reconstruction of an image
using a complex oriented dual-tree wavelet transform.

Load the image and obtain the complex oriented dual-tree
wavelet transform down to level 5 using dddtree2.
Reconstruct the image using idddtree2 and demonstrate
perfect reconstruction.

Type of wavelet decomposition (filter bank), specified as one
of 'dwt', 'ddt', 'realdt', 'cplxdt', 'realdddt',
or 'cplxdddt'. 'dwt' is the
critically sampled DWT. 'ddt' produces a double-density
wavelet transform with one scaling and two wavelet filters for both
row and column filtering. 'realdt' and 'cplxdt' produce
oriented dual-tree wavelet transforms consisting of two and four separable
wavelet transforms. 'realdddt' and 'cplxdddt' produce
double-density dual-tree wavelet transforms consisting of two and
four separable wavelet transforms.

First-stage analysis filters, specified as an N-by-2
or N-by-3 matrix for single-tree wavelet transforms,
or a 1-by-2 cell array of two N-by-2 or N-by-3
matrices for dual-tree wavelet transforms. The matrices are N-by-3
for the double-density wavelet transforms. For an N-by-2
matrix, the first column of the matrix is the scaling (lowpass) filter
and the second column is the wavelet (highpass) filter. For an N-by-3
matrix, the first column of the matrix is the scaling (lowpass) filter
and the second and third columns are the wavelet (highpass) filters.
For the dual-tree transforms, each element of the cell array contains
the first-stage analysis filters for the corresponding tree.

Analysis filters for levels > 1, specified as an N-by-2
or N-by-3 matrix for single-tree wavelet transforms,
or a 1-by-2 cell array of two N-by-2 or N-by-3
matrices for dual-tree wavelet transforms. The matrices are N-by-3
for the double-density wavelet transforms. For an N-by-2
matrix, the first column of the matrix is the scaling (lowpass) filter
and the second column is the wavelet (highpass) filter. For an N-by-3
matrix, the first column of the matrix is the scaling (lowpass) filter
and the second and third columns are the wavelet (highpass) filters.
For the dual-tree transforms, each element of the cell array contains
the analysis filters for the corresponding tree.

First-level reconstruction filters, specified as an N-by-2
or N-by-3 matrix for single-tree wavelet transforms,
or a 1-by-2 cell array of two N-by-2 or N-by-3
matrices for dual-tree wavelet transforms. The matrices are N-by-3
for the double-density wavelet transforms. For an N-by-2
matrix, the first column of the matrix is the scaling (lowpass) filter
and the second column is the wavelet (highpass) filter. For an N-by-3
matrix, the first column of the matrix is the scaling (lowpass) filter
and the second and third columns are the wavelet (highpass) filters.
For the dual-tree transforms, each element of the cell array contains
the first-stage synthesis filters for the corresponding tree.

Reconstruction filters for levels > 1, specified as an N-by-2
or N-by-3 matrix for single-tree wavelet transforms,
or a 1-by-2 cell array of two N-by-2 or N-by-3
matrices for dual-tree wavelet transforms. The matrices are N-by-3
for the double-density wavelet transforms. For an N-by-2
matrix, the first column of the matrix is the scaling (lowpass) filter
and the second column is the wavelet (highpass) filter. For an N-by-3
matrix, the first column of the matrix is the scaling (lowpass) filter
and the second and third columns are the wavelet (highpass) filters.
For the dual-tree transforms, each element of the cell array contains
the first-stage analysis filters for the corresponding tree.

Wavelet transform coefficients, specified as a 1-by-(level+1)
cell array of matrices. The size and structure of the matrix elements
of the cell array depend on the type of wavelet transform as follows:

'dwt' — cfs{j}(:,:,d)

j = 1,2,... level is the level.

d = 1,2,3 is the orientation.

cfs{level+1}(:,:) are the lowpass,
or scaling, coefficients.

'ddt' — cfs{j}(:,:,d)

j = 1,2,... level is the level.

d = 1,2,3,4,5,6,7,8 is the orientation.

cfs{level+1}(:,:) are the lowpass,
or scaling, coefficients.

'realddt' — cfs{j}(:,:,d,k)

j = 1,2,... level is the level.

d = 1,2,3 is the orientation.

k = 1,2 is the wavelet transform tree.

cfs{level+1}(:,:) are the lowpass,
or scaling, coefficients.

'cplxdt' — cfs{j}(:,:,d,k,m)

j = 1,2,... level is the level.

d = 1,2,3 is the orientation.

k = 1,2 is the wavelet transform tree.

m = 1,2 are the real and imaginary parts.

cfs{level+1}(:,:) are the lowpass,
or scaling, coefficients..

'realdddt' — cfs{j}(:,:,d,k)

j = 1,2,... level is the level.

d = 1,2,3 is the orientation.

k = 1,2 is the wavelet transform tree.

cfs{level+1}(:,:) are the lowpass,
or scaling, coefficients.

'cplxdddt' — cfs{j}(:,:,d,k,m)

j = 1,2,... level is the level.

d = 1,2,3 is the orientation.

k = 1,2 is the wavelet transform tree.

m = 1,2 are the real and imaginary parts.

cfs{level+1}(:,:) are the lowpass,
or scaling, coefficients.