Downsampling#

class deepinv.physics.Downsampling(img_size, filter=None, factor=2, device='cpu', padding='circular', **kwargs)[source]#

Bases: LinearPhysics

Downsampling operator for super-resolution problems.

It is defined as

\[y = S (h*x)\]

where \(h\) is a low-pass filter and \(S\) is a subsampling operator.

Parameters:
  • filter (torch.Tensor, str, NoneType) – Downsampling filter. It can be 'gaussian', 'bilinear' or 'bicubic' or a custom torch.Tensor filter. If None, no filtering is applied.

  • img_size (tuple[int]) – size of the input image

  • factor (int) – downsampling factor

  • padding (str) – options are 'valid', 'circular', 'replicate' and 'reflect'. If padding='valid' the blurred output is smaller than the image (no padding) otherwise the blurred output has the same size as the image.


Examples:

Downsampling operator with a gaussian filter:

>>> from deepinv.physics import Downsampling
>>> x = torch.zeros((1, 1, 32, 32)) # Define black image of size 32x32
>>> x[:, :, 16, 16] = 1 # Define one white pixel in the middle
>>> physics = Downsampling(filter = "gaussian", img_size=(1, 32, 32), factor=2)
>>> y = physics(x)
>>> y[:, :, 7:10, 7:10] # Display the center of the downsampled image
tensor([[[[0.0146, 0.0241, 0.0146],
          [0.0241, 0.0398, 0.0241],
          [0.0146, 0.0241, 0.0146]]]])
A(x, filter=None, **kwargs)[source]#

Applies the downsampling operator to the input image.

Parameters:
  • x (torch.Tensor) – input image.

  • filter (None, torch.Tensor) – Filter \(h\) to be applied to the input image before downsampling. If not None, it uses this filter and stores it as the current filter.

A_adjoint(y, filter=None, **kwargs)[source]#

Adjoint operator of the downsampling operator.

Parameters:
  • y (torch.Tensor) – downsampled image.

  • filter (None, torch.Tensor) – Filter \(h\) to be applied to the input image before downsampling. If not None, it uses this filter and stores it as the current filter.

prox_l2(z, y, gamma, use_fft=True)[source]#

If the padding is circular, it computes the proximal operator with the closed-formula of https://arxiv.org/abs/1510.00143.

Otherwise, it computes it using the conjugate gradient algorithm which can be slow if applied many times.

Examples using Downsampling:#

Stacking and concatenating forward operators.

Stacking and concatenating forward operators.

A tour of forward sensing operators

A tour of forward sensing operators

Regularization by Denoising (RED) for Super-Resolution.

Regularization by Denoising (RED) for Super-Resolution.

Vanilla Unfolded algorithm for super-resolution

Vanilla Unfolded algorithm for super-resolution