anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionanisotropic_diffusion (Operator)

Name

anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionanisotropic_diffusion — Perform an anisotropic diffusion of an image.

Signature

anisotropic_diffusion(Image : ImageAniso : Mode, Contrast, Theta, Iterations : )

Herror anisotropic_diffusion(const Hobject Image, Hobject* ImageAniso, const char* Mode, double Contrast, double Theta, const Hlong Iterations)

Herror T_anisotropic_diffusion(const Hobject Image, Hobject* ImageAniso, const Htuple Mode, const Htuple Contrast, const Htuple Theta, const Htuple Iterations)

void AnisotropicDiffusion(const HObject& Image, HObject* ImageAniso, const HTuple& Mode, const HTuple& Contrast, const HTuple& Theta, const HTuple& Iterations)

HImage HImage::AnisotropicDiffusion(const HString& Mode, double Contrast, double Theta, Hlong Iterations) const

HImage HImage::AnisotropicDiffusion(const char* Mode, double Contrast, double Theta, Hlong Iterations) const

HImage HImage::AnisotropicDiffusion(const wchar_t* Mode, double Contrast, double Theta, Hlong Iterations) const   (Windows only)

static void HOperatorSet.AnisotropicDiffusion(HObject image, out HObject imageAniso, HTuple mode, HTuple contrast, HTuple theta, HTuple iterations)

HImage HImage.AnisotropicDiffusion(string mode, double contrast, double theta, int iterations)

def anisotropic_diffusion(image: HObject, mode: str, contrast: float, theta: float, iterations: int) -> HObject

Description

The operator anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionAnisotropicDiffusionanisotropic_diffusion performs an anisotropic diffusion on the input image ImageImageImageImageimageimage according to the model of Perona and Malik. This procedure is also referred to as nonlinear isotropic diffusion. Considering the image as a gray value function u, the algorithm is a discretization of the partial differential equation with the initial value defined by ImageImageImageImageimageimage at a time . The equation is iterated IterationsIterationsIterationsIterationsiterationsiterations times in time steps of length ThetaThetaThetaThetathetatheta, so that the output image ImageAnisoImageAnisoImageAnisoImageAnisoimageAnisoimage_aniso contains the gray value function at the time .

The goal of the anisotropic diffusion is the elimination of image noise in constant image patches while preserving the edges in the image. The distinction between edges and constant patches is achieved using the threshold ContrastContrastContrastContrastcontrastcontrast on the size of the gray value differences between adjacent pixels. ContrastContrastContrastContrastcontrastcontrast is referred to as the contrast parameter and abbreviated with the letter c.

The variable diffusion coefficient g can be chosen to follow different monotonically decreasing functions with values between 0 and 1 and determines the response of the diffusion process to an edge. With the parameter ModeModeModeModemodemode, the following functions can be selected: Choosing the function by setting ModeModeModeModemodemode to 'parabolic'"parabolic""parabolic""parabolic""parabolic""parabolic" guarantees that the associated differential equation is parabolic, so that a well-posedness theory exists for the problem and the procedure is stable for an arbitrary step size ThetaThetaThetaThetathetatheta. In this case however, there remains a slight diffusion even across edges of a height larger than c. The choice of 'perona-malik'"perona-malik""perona-malik""perona-malik""perona-malik""perona-malik" for ModeModeModeModemodemode, as used in the publication of Perona and Malik, does not possess the theoretical properties of , but in practice it has proved to be sufficiently stable and is thus widely used. The theoretical instability results in a slight sharpening of strong edges. The function with the constant C=3.31488, proposed by Weickert, and selectable by setting ModeModeModeModemodemode to 'weickert'"weickert""weickert""weickert""weickert""weickert" is an improvement of with respect to edge sharpening. The transition between smoothing and sharpening happens very abruptly at x = c^2.

For an explanation of the concept of smoothing filters see the introduction of chapter Filters / Smoothing.

Attention

Note that filter operators may return unexpected results if an image with a reduced domain is used as input. Please refer to the chapter Filters.

Execution Information

Parameters

ImageImageImageImageimageimage (input_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte / uint2 / real)

Input image.

ImageAnisoImageAnisoImageAnisoImageAnisoimageAnisoimage_aniso (output_object)  image(-array) objectHImageHObjectHImageHobject * (byte / uint2 / real)

Output image.

ModeModeModeModemodemode (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Diffusion coefficient as a function of the edge amplitude.

Default value: 'weickert' "weickert" "weickert" "weickert" "weickert" "weickert"

List of values: 'parabolic'"parabolic""parabolic""parabolic""parabolic""parabolic", 'perona-malik'"perona-malik""perona-malik""perona-malik""perona-malik""perona-malik", 'weickert'"weickert""weickert""weickert""weickert""weickert"

ContrastContrastContrastContrastcontrastcontrast (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Contrast parameter.

Default value: 5.0

Suggested values: 2.0, 5.0, 10.0, 20.0, 50.0, 100.0

Restriction: Contrast > 0

ThetaThetaThetaThetathetatheta (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Time step.

Default value: 1.0

Suggested values: 0.5, 1.0, 3.0

Restriction: Theta > 0

IterationsIterationsIterationsIterationsiterationsiterations (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Number of iterations.

Default value: 10

Suggested values: 1, 3, 10, 100, 500

Restriction: Iterations >= 1

Alternatives

bilateral_filterbilateral_filterBilateralFilterBilateralFilterBilateralFilterbilateral_filter, guided_filterguided_filterGuidedFilterGuidedFilterGuidedFilterguided_filter

References

J. Weickert; “'Anisotropic Diffusion in Image Processing'; PhD Thesis; Fachbereich Mathematik, Universität Kaiserslautern; 1996.
P. Perona, J. Malik; “Scale-space and edge detection using anisotropic diffusion”; Transactions on Pattern Analysis and Machine Intelligence 12(7), pp. 629-639; IEEE; 1990.
G. Aubert, P. Kornprobst; “Mathematical Problems in Image Processing”; Applied Mathematical Sciences 147; Springer, New York; 2002.

Module

Foundation