Source code for neodroidvision.regression.patching.denoise.spectral_denoise_3d
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = "Christian Heider Nielsen"
__doc__ = r"""
Created on 09/04/2020
"""
import numpy
__all__ = ["fft3_im_denoise"]
[docs]def fft3_im_denoise(img: numpy.ndarray, keep_fraction: float = 0.1) -> numpy.ndarray:
"""
a blur with an FFT
Implements, via FFT, the following convolution:
.. math::
f_1(t) = \int dt'\, K(t-t') f_0(t')
.. math::
\tilde{f}_1(\omega) = \tilde{K}(\omega) \tilde{f}_0(\omega)
# keep_fraction - Define the fraction of coefficients (in each direction) we keep
Compute the 3d FFT of the input image
Filter in FFT
Reconstruct the final image
:param keep_fraction:
:type keep_fraction:
:param img:
:type img:
:return:
:rtype:"""
assert 0.0 < keep_fraction < 1.0
im_fft = numpy.fft.fftn(img)
im_fft_cp = im_fft # .copy()
n_r, n_c, n_a = im_fft_cp.shape # num row, column, aisle
im_fft_cp[int(n_r * keep_fraction) : int(n_r * (1 - keep_fraction))] = 0
im_fft_cp[:, int(n_c * keep_fraction) : int(n_c * (1 - keep_fraction))] = 0
im_fft_cp[:, :, int(n_a * keep_fraction) : int(n_a * (1 - keep_fraction))] = 0
return numpy.fft.ifftn(im_fft_cp).real