WNNM Image Denoising
Python implementation of weighted nuclear norm minimization (WNNM) and comparison against Gaussian, bilateral, and NLM baselines.
This was a course project in computational imaging where I implemented Weighted Nuclear Norm Minimization (WNNM) for grayscale image denoising.
Problem
Given a noisy observation $y = x + \eta$ with additive Gaussian noise, recover a clean estimate without smearing edges and textures. Local filters (Gaussian, bilateral) tend to blur details, while non-local methods try to exploit repeated structure across the image.
Approach
WNNM is a non-local, optimization-based method built around a simple idea: groups of similar patches are approximately low-rank.
For each reference patch:
- Search a window around it and find the $n$ most similar patches.
- Stack those patches as columns of a matrix $Y$.
- Estimate the clean patch matrix $X$ by solving a weighted nuclear norm problem, which reduces to SVD + weighted soft-thresholding of singular values.
What I implemented
A lot of the practical performance comes from details that are easy to skip over in a paper, so I spent time on:
- Similarity search using MSE and a top-$n$ selection rule (more stable than distance thresholding).
- Iterative re-estimation of singular value weights (a few inner iterations were enough).
- A small but helpful trick: centering patch groups before SVD and adding the mean back during reconstruction.
- Patch aggregation and post-processing (clipping reconstructed intensities to valid ranges made a noticeable difference).
- Parameter tuning and benchmarking against Gaussian, bilateral, and non-local means (NLM) filters.
Results
On a set of 15 test images corrupted with Gaussian noise ($\sigma = 0.1$), WNNM achieved the best average metrics. PSNR (Peak Signal-to-Noise Ratio) is computed from the mean squared error (MSE) between the denoised image and the ground truth. Higher PSNR means the denoised image is closer to the ground-truth in raw intensity values. SSIM (Structural Similarity) measures perceptual similarity by comparing local luminance/contrast and structural correlation, so higher SSIM means better preservation of edges and textures.
- WNNM: PSNR 28.40, SSIM 0.86
- NLM: PSNR 26.97, SSIM 0.82
The baseline Gaussian/bilateral filters were clearly behind on both metrics and visual quality.