Abstract |
Software |
Results |
People |
Related work |
Publications |
We present a novel approach to still image denoising based on effective filtering in 3D transform domain by combining sliding-window transform processing with block-matching. We process blocks within the image in a sliding manner and utilize the block-matching concept by searching for blocks which are similar to the currently processed one. The matched blocks are stacked together to form a 3D array and due to the similarity between them, the data in the array exhibit high level of correlation. We exploit this correlation by applying a 3D decorrelating unitary transform and effectively attenuate the noise by shrinkage its transform coefficients. The subsequent inverse 3D transform yields estimates of all matched blocks. After repeating this procedure for all sliding windows (blocks), we compute the final estimate as a weighed average of all overlapping block-estimates. Also, we develop a fast and efficient algorithm implementing the proposed approach. The experimental results show that the proposed method delivers state-of-the-art denoising performance, both in terms of objective criteria and visual quality.
For a detailed overview, please browse to this presentation.
Results in output PSNR (dB) of BM-3DDFT, the image denoising algorithm with block-matching and filtering in 3D DFT domain.
σ* | Lena 512x512 |
Barbara 512x512 |
House 256x256 |
Peppers 256x256 |
Boats 512x512 |
Couple 512x512 |
Hill 512x512 |
5 | 38.63 | 38.18 | 39.54 | 37.84 | 37.20 | 37.40 | 37.11 |
10 | 35.83 | 34.87 | 36.37 | 34.38 | 33.79 | 33.88 | 33.57 |
15 | 34.21 | 33.08 | 34.75 | 32.31 | 31.96 | 31.93 | 31.79 |
20 | 33.03 | 31.77 | 33.54 | 30.87 | 30.65 | 30.58 | 30.60 |
25 | 32.08 | 30.75 | 32.67 | 29.80 | 29.68 | 29.57 | 29.74 |
30 | 31.29 | 29.90 | 31.95 | 28.97 | 28.90 | 28.75 | 29.04 |
35 | 30.61 | 29.13 | 31.21 | 28.14 | 28.20 | 28.03 | 28.46 |
50 | 29.08 | 27.51 | 29.65 | 26.46 | 26.71 | 26.46 | 27.21 |
100 | 26.04 | 24.14 | 25.92 | 23.11 | 24.00 | 23.60 | 24.77 |
*We created the noisy images by adding realizations of white Gaussian noise with the following MATLAB commands:
randn('seed', 0);
noisy_image = input_image + sigma_noise*randn(size(input_image));