I'm at the moment trying to implement a neural network which uses BM3D as a preprocessing step. The problem is, when using the python implementation of BM3D from the paper Collaborative Filtering of Correlated Noise: Exact Transform-Domain Variance for Improved Shrinkage and Patch Matching it requires that a noise power spectrum (PSD) is passed along with the image to be denoised.
# Generate noise with given PSD
noise, psd, kernel = get_experiment_noise(noise_type, noise_var, seed, y.shape)
# N.B.: For the sake of simulating a more realistic acquisition scenario,
# the generated noise is *not* circulant. Therefore there is a slight
# discrepancy between PSD and the actual PSD computed from infinitely many
# realizations of this noise with different seeds.
# Call BM3D With the default settings.
y_est = bm3d(z, psd)
The original paper for BM3D, Image Denoising by Sparse 3-D Transform-Domain Collaborative Filtering, doesn't say anything about passing this PSD beforehand so my question is: What is the point of passing this PSD? In general, images to be denoised have unknown noise levels, shouldn't the denoising algorithm be self contained, in a sense of doing the estimations by itself?
Am I looking at it wrong?