IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit

Anisotropic diffusion smoothing filter on 2d images. More...

IPSDKIPLFILTERING_API image::ImagePtr ipsdk::imaproc::filter::anisotropicDiffusion2dImg (const image::ImageConstPtr &pInImg, const ipUInt32 inNbTimeSteps, const ipReal32 inSharpness, const ipReal32 inAnisotropy)
 wrapper function for Anisotropic diffusion smoothing filter More...
 
IPSDKIPLFILTERING_API void ipsdk::imaproc::filter::anisotropicDiffusion2dImg (const image::ImageConstPtr &pInImg, const ipUInt32 inNbTimeSteps, const ipReal32 inSharpness, const ipReal32 inAnisotropy, const image::ImagePtr &pOutImg)
 wrapper function for Anisotropic diffusion smoothing filter More...
 
IPSDKIPLFILTERING_API void ipsdk::imaproc::filter::anisotropicDiffusion2dImg (const image::ImageConstPtr &pInImg, const ipUInt32 inNbTimeSteps, const ipReal32 inSharpness, const ipReal32 inAnisotropy, const ipReal32 inOptStdDevGrad, const ipReal32 inOptStdDevMat, const attr::GaussianCoverageConstPtr &pInOptAnisotropicGaussianCoverage, const ipUInt32 inOptNbAngles2d, const ipUInt32 inOptMaxHalfKnlSize, const ipReal32 inOptDirSmoothFactor, const ipReal32 inOptSpatialStep, const image::ImagePtr &pOutImg)
 wrapper function for Anisotropic diffusion smoothing filter More...
 

Detailed Description

Anisotropic diffusion smoothing filter on 2d images.

The anisotropic diffusion filter is a non-linear iterative smoothing filter that allows to eliminate noise and small-scale details from an image while preserving or even enhancing the edge structure.

Filter parametrization

Main parameters

The main parameters of this filter are :

Note
Note that $InSharpness$ and $InAnisotropy$ are highly correlated since one can increase first one and decrease second one to increase image smoothing while preserving algorithm edge enhancing properties. It is generally a good idea for user to start with following parameter values :
  • $InNbTimeSteps=10$
  • $InSharpness=1.0$
  • $InAnisotropy=0.6$

Then user should try to modify $InSharpness$ and $InAnisotropy$ values to find an adpated cupple of value.

Here is an example of $InSharpness$ influence on an image with very high frequency area (in this case $InNbTimeSteps=10$ and $InAnisotropy=0.6$).

anisotropicDiffusion2dImg_sharpness.png

Here is an example of $InAnisotropy$ influence on an image (in this case $InNbTimeSteps=10$ and $InSharpness)=1.2$).

anisotropicDiffusion2dImg_anisotropy.png

Please note edge enhancement while anisotropy value increase.

Secondary parameters

Some secondary parameters are also associated to this filter (user should modify these parameters with caution since some of them can generate heavy computation cost) :

See also
Joachil Weickert, Theorical foundations of anisotropic diffusion in image processing, Computing, Suppl. 141, pp. 221-236, 1996.
D. Tschumperle, Curvature-Preserving Regularization of Multi-Valued Images using PDE's, European Conference on Computer Vision (ECCV'06), LNCS Vol. 3952, pp. 295-307, Graz/Austria, May 2006, ISSN : 302-9743.

Attributes description

Attribute description for algorithm :

Name ToolTip Default Initializer
ipsdk::imaproc::attr::InImg [Input] image for processing operation X
ipsdk::imaproc::attr::InNbTimeSteps [Input] number for time steps for anisotropic diffusion X
ipsdk::imaproc::attr::InSharpness [Input] Sharpness factor used by processing operation X
ipsdk::imaproc::attr::InAnisotropy [Input] Anisotropy factor for processing operation X
ipsdk::imaproc::attr::InOptStdDevGrad [Input Optional] standard deviation used for gaussian gradient computation X
ipsdk::imaproc::attr::InOptStdDevMat [Input Optional] standard deviation used for matrix gaussian smoothing X
ipsdk::imaproc::attr::InOptAnisotropicGaussianCoverage [Input Optional] Parameter allowing to specify a gaussian distribution coverage for processing X
ipsdk::imaproc::attr::InOptNbAngles2d [Input Optional] Number of angles for directional smoothing X
ipsdk::imaproc::attr::InOptMaxHalfKnlSize [Input Optional] Maximum half kernel size for processing operation X
ipsdk::imaproc::attr::InOptDirSmoothFactor [Input Optional] Directional smoothing amplitude factor X
ipsdk::imaproc::attr::InOptSpatialStep [Input Optional] Spatial step used for smoothing along processed directions X
ipsdk::imaproc::attr::OutWk1Img [Output] Temporary working image for algorithm promoteUnary (_pOutWk1Img, _pInImg, ipsdk::imaproc::ePromoteUnaryType::ePUT_UpperSigned)
ipsdk::imaproc::attr::OutWk2Img [Output] Temporary working image for algorithm promoteUnary (_pOutWk2Img, _pInImg, ipsdk::imaproc::ePromoteUnaryType::ePUT_UpperSigned)
ipsdk::imaproc::attr::OutWk3Img [Output] Temporary working image for algorithm promoteUnary (_pOutWk3Img, _pInImg, ipsdk::imaproc::ePromoteUnaryType::ePUT_UpperSigned)
ipsdk::imaproc::attr::OutImg [Output] image for processing operation duplicateInOut (_pOutImg, _pInImg)

Global Rule description

Global rule description for algorithm :
matchSizeAndType (_pInImg,_pOutImg) && 
matchSize (_pInImg,_pOutWk1Img) && 
matchSizeAndType (_pOutWk1Img,_pOutWk2Img) && 
matchSizeAndType (_pOutWk1Img,_pOutWk3Img)

Example of Python code :

Example imports

import PyIPSDK
import PyIPSDK.IPSDKIPLFiltering as filter

Code Example

# opening of input images
inImg = PyIPSDK.loadTiffImageFile(inputImgPath)
# anisotropic diffusion computation
outImg = filter.anisotropicDiffusion2dImg(inImg, 10, 0.9, 0.6)

Example of C++ code :

Example informations

Associated library

IPSDKIPLFiltering

Header file

Code Example

// compute anisotropic diffusion smoothing on input image
ImagePtr pOutImg = anisotropicDiffusion2dImg(pInImg, inNbTimeSteps, inSharpness, inAnisotropy);
See also
AnisotropicDiffusion2dImgLvl1

Function Documentation

◆ anisotropicDiffusion2dImg() [1/3]

IPSDKIPLFILTERING_API image::ImagePtr ipsdk::imaproc::filter::anisotropicDiffusion2dImg ( const image::ImageConstPtr pInImg,
const ipUInt32  inNbTimeSteps,
const ipReal32  inSharpness,
const ipReal32  inAnisotropy 
)

wrapper function for Anisotropic diffusion smoothing filter

Exceptions
ipsdk::processor::IPSDKBaseProcessingExceptionon failure

◆ anisotropicDiffusion2dImg() [2/3]

IPSDKIPLFILTERING_API void ipsdk::imaproc::filter::anisotropicDiffusion2dImg ( const image::ImageConstPtr pInImg,
const ipUInt32  inNbTimeSteps,
const ipReal32  inSharpness,
const ipReal32  inAnisotropy,
const image::ImagePtr pOutImg 
)

wrapper function for Anisotropic diffusion smoothing filter

Exceptions
ipsdk::processor::IPSDKBaseProcessingExceptionon failure

◆ anisotropicDiffusion2dImg() [3/3]

IPSDKIPLFILTERING_API void ipsdk::imaproc::filter::anisotropicDiffusion2dImg ( const image::ImageConstPtr pInImg,
const ipUInt32  inNbTimeSteps,
const ipReal32  inSharpness,
const ipReal32  inAnisotropy,
const ipReal32  inOptStdDevGrad,
const ipReal32  inOptStdDevMat,
const attr::GaussianCoverageConstPtr pInOptAnisotropicGaussianCoverage,
const ipUInt32  inOptNbAngles2d,
const ipUInt32  inOptMaxHalfKnlSize,
const ipReal32  inOptDirSmoothFactor,
const ipReal32  inOptSpatialStep,
const image::ImagePtr pOutImg 
)

wrapper function for Anisotropic diffusion smoothing filter

Exceptions
ipsdk::processor::IPSDKBaseProcessingExceptionon failure