IPSDK 0.2
IPSDK : Image Processing Software Development Kit
Variational Stationary Noise Remover 2DSee full documentation
outCorrectedImg,outNoiseImgvsnr2dImg (inImg,nbIter,stdDevX,stdDevY,theta,alpha)
outCorrectedImg,outNoiseImgvsnr2dImg (inImg,noiseImg,nbIter,alpha)

Detailed Description

Variational Stationary Noise Remover.

Standard denoising methods rely on a white noise assumption. This means that the intensity alteration is spatially uncorrelated. The VSNR (Variational Stationary Noise Remover) algorithm removes structural noise, i.e. following a pattern, in the input image [1].

In a generic case, we can express the noisy image $I$ as the sum of the clean image $I_0$ and the noise image $I_N$ :

\[ I = I_0 + I_N \]

In the case of stationary noise $I_N$ can be expressed as the convolution of white noise $ \lambda $ with a pattern $ \psi $:

\[ I_N = \sum_{i=1}^{n}{ \lambda_i * \psi_i} \]

where $ * $ is the convolution operator.

In this IPSDK implementation, noise the pattern $ \psi $ can be provided as an input image or can be expressed as an oriented Gabor function, by providing the Gabor parameters:

\[ g(x, y) = \exp \left( -\frac{x'^2}{2 \sigma_x^2} - \frac{y'^2}{2 \sigma_y^2} \right) \]

Where $ (x', y') $ are the coordinates after a rotation of $ \theta $:

\[ x' = x \cos( \theta ) + y \sin( \theta ) \]

\[ y' = -x \sin( \theta ) + y \cos( \theta ) \]

Note
In the case of parametrized Gabor pattern, the input parameter InTheta is expressed in degrees.

This is an example of noie image according $I_N$ to a Gabor pattern $\psi$ with an orientation of 45° and a white noise $\lambda$ :

VSNR2D_NoiseImageIllustration.png

The noise image estimation can be estimated by iteratively solving the following optimization problem:

\[ P(\lambda) = \left\| \nabla \left( I_N - \sum_{i=1}^{m}{\lambda_i * \psi_i} \right) \right\|_{1, \epsilon} + \sum_{i=1}^{m}{\phi(\lambda_i)} \]

Where $\phi(\lambda)$ is the regularization term.

Please, see [1] for more details.

Here is an example of VSNR filtering result:

VSNR2D_Result.png

[1] Variational algorithms to remove stationary noise. Application to microscopy imaging. J. Fehrenbach, P. Weiss and C. Lorenzo, IEEE Image Processing Vol. 21, Issue 10, pages 4420 - 4430, October (2012)

Example of Python code :

Example imports

import PyIPSDK
import PyIPSDK.IPSDKIPLFiltering as filter

Code Example

# opening of input images
inImg = PyIPSDK.loadTiffImageFile(inputImgPath)
# unsharp mask 2d computation
outImg, noiseImg = filter.vsnr2dImg(inImg, 12, 1, 30, 0, 1)

Example of C++ code :

Example informations

Header file

#include <IPSDKIPL/IPSDKIPLFiltering/Processor/VSNR2dImg/VSNR2dImg.h>

Code Example

// compute median on input image
VSNRResult result = vsnr2dImg(pInImg, 12, 1.f, 30.f, 0.f, 1.f);