# wdencmp

De-noising or compression

## Syntax

```[XC,CXC,LXC,PERF0,PERFL2] = wdencmp('gbl',X,'wname',N,THR,SORH,KEEPAPP)wdencmp('gbl',C,L,'wname',N,THR,SORH,KEEPAPP)[XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',X,'wname',N,THR,SORH)[XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',C,L,'wname',N,THR,SORH)[XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',X,'wname',N,THR,SORH)[XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',C,L,'wname',N,THR,SORH)```

## Description

`wdencmp` is a one- or two-dimensional de-noising and compression-oriented function.

`wdencmp` performs a de-noising or compression process of a signal or an image, using wavelets.

`[XC,CXC,LXC,PERF0,PERFL2] = wdencmp('gbl',X,'wname',N,THR,SORH,KEEPAPP)` returns a de-noised or compressed version `XC` of input signal `X` (one- or two-dimensional) obtained by wavelet coefficients thresholding using global positive threshold `THR`.

Additional output arguments `[CXC,LXC]` are the wavelet decomposition structure of `XC` (see `wavedec` or `wavedec2` for more information). `PERF0` and `PERFL2` are L2 -norm recovery and compression score in percentage.

`PERFL2` = 100 * (vector-norm of `CXC` / vector-norm of `C`)2 if `[C,L]` denotes the wavelet decomposition structure of `X`.

If `X` is a one-dimensional signal and `'wname'` an orthogonal wavelet, `PERFL2` is reduced to

$\frac{100{‖XC‖}^{2}}{{‖X‖}^{2}}$

Wavelet decomposition is performed at level `N` and `'wname'` is a string containing wavelet name (see `wmaxlev` and `wfilters` for more information). `SORH` (`'s'` or `'h'`) is for soft or hard thresholding (see `wthresh` for more information). If `KEEPAPP` = 1, approximation coefficients cannot be thresholded, otherwise it is possible.

`wdencmp('gbl',C,L,'wname',N,THR,SORH,KEEPAPP)` has the same output arguments, using the same options as above, but obtained directly from the input wavelet decomposition structure `[C,L]` of the signal to be de-noised or compressed, at level `N` and using `'wname'` wavelet.

For the one-dimensional case and `'lvd'` option, ```[XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',X,'wname',N,THR,SORH)``` or ```[XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',C,L,'wname',N,THR,SORH)``` have the same output arguments, using the same options as above, but allowing level-dependent thresholds contained in vector `THR` (`THR` must be of length `N`). In addition, the approximation is kept. Note that, with respect to `wden` (automatic de-noising), `wdencmp` allows more flexibility and you can implement your own de-noising strategy.

For the two-dimensional case and `'lvd'` option, ```[XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',X,'wname',N,THR,SORH)``` or ```[XC,CXC,LXC,PERF0,PERFL2] = wdencmp('lvd',C,L,'wname',N,THR,SORH)```.

`THR` must be a matrix 3 by `N` containing the level-dependent thresholds in the three orientations, horizontal, diagonal, and vertical.

Like denoising, the compression procedure contains three steps:

1. Decomposition.

2. Detail coefficient thresholding. For each level from 1 to `N`, a threshold is selected and hard thresholding is applied to the detail coefficients.

3. Reconstruction.

The difference with the denoising procedure is found in step 2.

## Examples

collapse all

### Denoise Image Using Default Global Threshold

Denoise an image in additive white Gaussian noise using the Donoho-Johnstone universal threshold.

```load sinsin; Y = X + 18*randn(size(X));```

Use `ddencmp` to obtain the threshold and denoise the image. Plot the original image, noisy image, and denoised result.

```[thr,sorh,keepapp] = ddencmp('den','wv',Y); xd = wdencmp('gbl',Y,'sym4',2,thr,sorh,keepapp); subplot(221) imagesc(X); title('Original Image'); subplot(222); imagesc(Y); title('Noisy Image'); subplot(223) imagesc(xd); title('Denoised Image');```

### Denoise 1-D Signal Using Default Global Threshold

Denoise 1-D electricity consumption data using the Donoho-Johnstone global threshold.

Load the signal and select a segment for denoising.

```load leleccum; indx = 2600:3100; x = leleccum(indx);```

Use `ddencmp` to determine the default global threshold and denoise the signal. Plot the original and denoised signals.

```[thr,sorh,keepapp] = ddencmp('den','wv',x); xd = wdencmp('gbl',x,'db3',2,thr,sorh,keepapp); subplot(211) plot(x); title('Original Signal'); subplot(212) plot(xd); title('Denoised Signal');```

## References

DeVore, R.A.; B. Jawerth, B.J. Lucier (1992), "Image compression through wavelet transform coding," IEEE Trans. on Inf. Theory, vol. 38, No 2, pp. 719–746.

Donoho, D.L. (1993), "Progress in wavelet analysis and WVD: a ten minute tour," in Progress in wavelet analysis and applications, Y. Meyer, S. Roques, pp. 109–128. Frontières Ed.

Donoho, D.L.; I.M. Johnstone (1994), "Ideal spatial adaptation by wavelet shrinkage," Biometrika, vol. 81, pp. 425–455.

Donoho, D.L.; I.M. Johnstone, G. Kerkyacharian, D. Picard (1995), "Wavelet shrinkage: asymptopia," Jour. Roy. Stat. Soc., series B, vol. 57 no. 2, pp. 301–369.

Donoho, D.L.; I.M. Johnstone, "Ideal de-noising in an orthonormal basis chosen from a library of bases," C.R.A.S. Paris, t. 319, Ser. I, pp. 1317–1322.

Donoho, D.L. (1995), "De-noising by soft-thresholding," IEEE Trans. on Inf. Theory, 41, 3, pp. 613–627.