CurvatureDrivenDiffusion
Smooths a two-dimensional image using an advanced local edge analysis technique.
Access to parameter description
For an introduction to image filters: see Images Filtering.
This algorithm smooths an image with respect to its edges.
The algorithm is ruled by three main parameters: number of iterations, sharpness, and anisotropy.
Figure 1. Curvature-Driven diffusion on a noisy image with default parameters (10
iterations, sharpness = 0.9 and anisotropy = 0.6)
Figure 2. Influence of sharpness parameter on curvature-driven diffusion process: (left)
Sharpness = 0.1, (right) Sharpness = 2.0
Figure 3. Influence of anisotropy parameter on curvature-driven
diffusion process: (left) Anisotropy = 0.3, (right) Anisotropy = 0.9
Reference:
J.Weickert. "Anisotropic Diffusion in Image Processing". B.G. Teubber Verlag, Stuttgart, 1998.
See also
Access to parameter description
For an introduction to image filters: see Images Filtering.
This algorithm smooths an image with respect to its edges.
The algorithm is ruled by three main parameters: number of iterations, sharpness, and anisotropy.
![]() |
![]() |
- The number of iterations must be specified and suitable to reach convergence. Practically, a default value of 10 iterations achieves good results in most of the cases.
- The sharpness parameter controls the amplitude of smoothing along the edge direction. A small sharpness value generates a strong global smoothing.
![]() |
![]() |
- The anisotropy parameter controls the local curvature-driven diffusion along the gradient direction (direction orthogonal to the edge). A low value for anisotropy parameter results in a stronger local smoothing of edges.
![]() |
![]() |
Reference:
J.Weickert. "Anisotropic Diffusion in Image Processing". B.G. Teubber Verlag, Stuttgart, 1998.
See also
Function Syntax
This function returns outputImage.
// Function prototype
std::shared_ptr< iolink::ImageView > curvatureDrivenDiffusion( std::shared_ptr< iolink::ImageView > inputImage, std::shared_ptr< iolink::ImageView > inputMaskImage, int32_t numberOfIterations, double sharpnessFactor, double anisotropyFactor, std::shared_ptr< iolink::ImageView > outputImage = NULL );
This function returns outputImage.
// Function prototype.
curvature_driven_diffusion( input_image,
input_mask_image,
number_of_iterations = 10,
sharpness_factor = 0.9,
anisotropy_factor = 0.6,
output_image = None )
This function returns outputImage.
// Function prototype.
public static IOLink.ImageView
CurvatureDrivenDiffusion( IOLink.ImageView inputImage,
IOLink.ImageView inputMaskImage,
Int32 numberOfIterations = 10,
double sharpnessFactor = 0.9,
double anisotropyFactor = 0.6,
IOLink.ImageView outputImage = null );
Class Syntax
Parameters
| Parameter Name | Description | Type | Supported Values | Default Value | |
|---|---|---|---|---|---|
![]() |
inputImage |
The input image. | Image | Binary, Label, Grayscale or Multispectral | nullptr |
![]() |
inputMaskImage |
The optional binary mask defining area to process into input image (null to process the whole image). It must have same dimensions as the input image and cannot be null. | Image | Binary | nullptr |
![]() |
numberOfIterations |
The number of iterations of the curvature-driven diffusion process (must be a positive integer). | Int32 | >=1 | 10 |
![]() |
The edge preserving factor. | Float64 | >=0 | 0.9 | |
![]() |
anisotropyFactor |
The curvature-driven factor (value within ]0, 1[). | Float64 | [0, 0.99999] | 0.6 |
![]() |
outputImage |
The output image. Its dimensions, type, and calibration are forced to the same values as the input. | Image | nullptr | |
| Parameter Name | Description | Type | Supported Values | Default Value | |
|---|---|---|---|---|---|
![]() |
input_image |
The input image. | image | Binary, Label, Grayscale or Multispectral | None |
![]() |
input_mask_image |
The optional binary mask defining area to process into input image (null to process the whole image). It must have same dimensions as the input image and cannot be null. | image | Binary | None |
![]() |
number_of_iterations |
The number of iterations of the curvature-driven diffusion process (must be a positive integer). | int32 | >=1 | 10 |
![]() |
The edge preserving factor. | float64 | >=0 | 0.9 | |
![]() |
anisotropy_factor |
The curvature-driven factor (value within ]0, 1[). | float64 | [0, 0.99999] | 0.6 |
![]() |
output_image |
The output image. Its dimensions, type, and calibration are forced to the same values as the input. | image | None | |
| Parameter Name | Description | Type | Supported Values | Default Value | |
|---|---|---|---|---|---|
![]() |
inputImage |
The input image. | Image | Binary, Label, Grayscale or Multispectral | null |
![]() |
inputMaskImage |
The optional binary mask defining area to process into input image (null to process the whole image). It must have same dimensions as the input image and cannot be null. | Image | Binary | null |
![]() |
numberOfIterations |
The number of iterations of the curvature-driven diffusion process (must be a positive integer). | Int32 | >=1 | 10 |
![]() |
The edge preserving factor. | Float64 | >=0 | 0.9 | |
![]() |
anisotropyFactor |
The curvature-driven factor (value within ]0, 1[). | Float64 | [0, 0.99999] | 0.6 |
![]() |
outputImage |
The output image. Its dimensions, type, and calibration are forced to the same values as the input. | Image | null | |
Object Examples
std::shared_ptr< iolink::ImageView > polystyrene = ioformat::readImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "polystyrene.tif" ); auto polystyrene_sep = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "polystyrene_sep.vip" ); CurvatureDrivenDiffusion curvatureDrivenDiffusionAlgo; curvatureDrivenDiffusionAlgo.setInputImage( polystyrene ); curvatureDrivenDiffusionAlgo.setInputMaskImage( polystyrene_sep ); curvatureDrivenDiffusionAlgo.setNumberOfIterations( 3 ); curvatureDrivenDiffusionAlgo.setSharpnessFactor( 0.9 ); curvatureDrivenDiffusionAlgo.setAnisotropyFactor( 0.6 ); curvatureDrivenDiffusionAlgo.execute(); std::cout << "outputImage:" << curvatureDrivenDiffusionAlgo.outputImage()->toString();
polystyrene = ioformat.read_image(imagedev_data.get_image_path("polystyrene.tif"))
polystyrene_sep = imagedev.read_vip_image(imagedev_data.get_image_path("polystyrene_sep.vip"))
curvature_driven_diffusion_algo = imagedev.CurvatureDrivenDiffusion()
curvature_driven_diffusion_algo.input_image = polystyrene
curvature_driven_diffusion_algo.input_mask_image = polystyrene_sep
curvature_driven_diffusion_algo.number_of_iterations = 3
curvature_driven_diffusion_algo.sharpness_factor = 0.9
curvature_driven_diffusion_algo.anisotropy_factor = 0.6
curvature_driven_diffusion_algo.execute()
print( "output_image:", str( curvature_driven_diffusion_algo.output_image ) )
ImageView polystyrene = ViewIO.ReadImage( @"Data/images/polystyrene.tif" );
ImageView polystyrene_sep = Data.ReadVipImage( @"Data/images/polystyrene_sep.vip" );
CurvatureDrivenDiffusion curvatureDrivenDiffusionAlgo = new CurvatureDrivenDiffusion
{
inputImage = polystyrene,
inputMaskImage = polystyrene_sep,
numberOfIterations = 3,
sharpnessFactor = 0.9,
anisotropyFactor = 0.6
};
curvatureDrivenDiffusionAlgo.Execute();
Console.WriteLine( "outputImage:" + curvatureDrivenDiffusionAlgo.outputImage.ToString() );
Function Examples
std::shared_ptr< iolink::ImageView > polystyrene = ioformat::readImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "polystyrene.tif" ); auto polystyrene_sep = readVipImage( std::string( IMAGEDEVDATA_IMAGES_FOLDER ) + "polystyrene_sep.vip" ); auto result = curvatureDrivenDiffusion( polystyrene, polystyrene_sep, 3, 0.9, 0.6 ); std::cout << "outputImage:" << result->toString();
polystyrene = ioformat.read_image(imagedev_data.get_image_path("polystyrene.tif"))
polystyrene_sep = imagedev.read_vip_image(imagedev_data.get_image_path("polystyrene_sep.vip"))
result = imagedev.curvature_driven_diffusion( polystyrene, polystyrene_sep, 3, 0.9, 0.6 )
print( "output_image:", str( result ) )
ImageView polystyrene = ViewIO.ReadImage( @"Data/images/polystyrene.tif" ); ImageView polystyrene_sep = Data.ReadVipImage( @"Data/images/polystyrene_sep.vip" ); IOLink.ImageView result = Processing.CurvatureDrivenDiffusion( polystyrene, polystyrene_sep, 3, 0.9, 0.6 ); Console.WriteLine( "outputImage:" + result.ToString() );







