ClassesClassesClassesClasses | | | | Operators

coherence_enhancing_diffcoherence_enhancing_diffCoherenceEnhancingDiffcoherence_enhancing_diffCoherenceEnhancingDiffCoherenceEnhancingDiff (Operator)


coherence_enhancing_diffcoherence_enhancing_diffCoherenceEnhancingDiffcoherence_enhancing_diffCoherenceEnhancingDiffCoherenceEnhancingDiff — Perform a coherence enhancing diffusion of an image.


coherence_enhancing_diff(Image : ImageCED : Sigma, Rho, Theta, Iterations : )

Herror coherence_enhancing_diff(const Hobject Image, Hobject* ImageCED, double Sigma, double Rho, double Theta, const Hlong Iterations)

Herror T_coherence_enhancing_diff(const Hobject Image, Hobject* ImageCED, const Htuple Sigma, const Htuple Rho, const Htuple Theta, const Htuple Iterations)

Herror coherence_enhancing_diff(Hobject Image, Hobject* ImageCED, const HTuple& Sigma, const HTuple& Rho, const HTuple& Theta, const HTuple& Iterations)

HImage HImage::CoherenceEnhancingDiff(const HTuple& Sigma, const HTuple& Rho, const HTuple& Theta, const HTuple& Iterations) const

HImageArray HImageArray::CoherenceEnhancingDiff(const HTuple& Sigma, const HTuple& Rho, const HTuple& Theta, const HTuple& Iterations) const

void CoherenceEnhancingDiff(const HObject& Image, HObject* ImageCED, const HTuple& Sigma, const HTuple& Rho, const HTuple& Theta, const HTuple& Iterations)

HImage HImage::CoherenceEnhancingDiff(double Sigma, double Rho, double Theta, Hlong Iterations) const

void HOperatorSetX.CoherenceEnhancingDiff(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*ImageCED, [in] VARIANT Sigma, [in] VARIANT Rho, [in] VARIANT Theta, [in] VARIANT Iterations)

IHImageX* HImageX.CoherenceEnhancingDiff(
[in] double Sigma, [in] double Rho, [in] double Theta, [in] Hlong Iterations)

static void HOperatorSet.CoherenceEnhancingDiff(HObject image, out HObject imageCED, HTuple sigma, HTuple rho, HTuple theta, HTuple iterations)

HImage HImage.CoherenceEnhancingDiff(double sigma, double rho, double theta, int iterations)


The operator coherence_enhancing_diffcoherence_enhancing_diffCoherenceEnhancingDiffcoherence_enhancing_diffCoherenceEnhancingDiffCoherenceEnhancingDiff performs an anisotropic diffusion process on the input image ImageImageImageImageImageimage to increase the coherence of the image structures contained in ImageImageImageImageImageimage. In particular, noncontinuous image edges are connected by diffusion, without being smoothed perpendicular to their dominating direction. For this, coherence_enhancing_diffcoherence_enhancing_diffCoherenceEnhancingDiffcoherence_enhancing_diffCoherenceEnhancingDiffCoherenceEnhancingDiff uses the anisotropic diffusion equation

  u_t = div(G(u) grad u)

formulated by Weickert. With a 2x2 coefficient matrix G that depends on the gray values in ImageImageImageImageImageimage, this is an enhancement of the mean curvature flow or intrinsic heat equation

  u_t = div(grad u/|grad u|) |grad u| = curv(u) |grad u|

on the gray value function u defined by the input image ImageImageImageImageImageimage at a time t_0 = 0. The smoothing operator mean_curvature_flowmean_curvature_flowMeanCurvatureFlowmean_curvature_flowMeanCurvatureFlowMeanCurvatureFlow is a direct application of the mean curvature flow equation. The discrete diffusion equation is solved in IterationsIterationsIterationsIterationsIterationsiterations time steps of length ThetaThetaThetaThetaThetatheta, so that the output image ImageCEDImageCEDImageCEDImageCEDImageCEDimageCED contains the gray value function at the time IterationsIterationsIterationsIterationsIterationsiterations * ThetaThetaThetaThetaThetatheta .

To detect the edge direction more robustly, in particular on noisy input data, an additional isotropic smoothing step can precede the computation of the gray value gradients. The parameter SigmaSigmaSigmaSigmaSigmasigma determines the magnitude of the smoothing by means of the standard deviation of a corresponding Gaussian convolution kernel, as used in the operator isotropic_diffusionisotropic_diffusionIsotropicDiffusionisotropic_diffusionIsotropicDiffusionIsotropicDiffusion for isotropic image smoothing.

While the matrix G is given by

  G_MCF(u) = I - (grad u (grad u)^T)/|grad u|^2

in the case of the operator mean_curvature_flowmean_curvature_flowMeanCurvatureFlowmean_curvature_flowMeanCurvatureFlowMeanCurvatureFlow, where I denotes the unit matrix, G_MCF is again smoothed componentwise by a Gaussian filter of standard deviation RhoRhoRhoRhoRhorho for coherence_enhancing_diffcoherence_enhancing_diffCoherenceEnhancingDiffcoherence_enhancing_diffCoherenceEnhancingDiffCoherenceEnhancingDiff. Then, the final coefficient matrix

  G_CED = g_1((l_1-l_2)^2) w_1 (w_1)^T + g_2((l_1-l_2)^2) w_2 (w_2)^T

is constructed from the eigenvalues l_1,l_2 and eigenvectors w_1,w_2 of the resulting intermediate matrix, where the functions

  g_1(p) = 0.001
  g_2(p) = 0.001 + 0.999 exp(-1/p)

were determined empirically and taken from the publication of Weickert.

Hence, the diffusion direction in mean_curvature_flowmean_curvature_flowMeanCurvatureFlowmean_curvature_flowMeanCurvatureFlowMeanCurvatureFlow is only determined by the local direction of the gray value gradient, while G_CED considers the macroscopic structure of the image objects on the scale RhoRhoRhoRhoRhorho and the magnitude of the diffusion in coherence_enhancing_diffcoherence_enhancing_diffCoherenceEnhancingDiffcoherence_enhancing_diffCoherenceEnhancingDiffCoherenceEnhancingDiff depends on how well this structure is defined.



ImageImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject (byte / uint2 / real)

Input image.

ImageCEDImageCEDImageCEDImageCEDImageCEDimageCED (output_object)  image(-array) objectHImageHImageHImageHImageXHobject * (byte / uint2 / real)

Output image.

SigmaSigmaSigmaSigmaSigmasigma (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Smoothing for derivative operator.

Default value: 0.5

Suggested values: 0.0, 0.1, 0.5, 1.0

Restriction: Sigma >= 0

RhoRhoRhoRhoRhorho (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Smoothing for diffusion coefficients.

Default value: 3.0

Suggested values: 0.0, 1.0, 3.0, 5.0, 10.0, 30.0

Restriction: Rho >= 0

ThetaThetaThetaThetaThetatheta (input_control)  real HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Time step.

Default value: 0.5

Suggested values: 0.1, 0.2, 0.3, 0.4, 0.5

Restriction: 0 < Theta <= 0.5

IterationsIterationsIterationsIterationsIterationsiterations (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Number of iterations.

Default value: 10

Suggested values: 1, 5, 10, 20, 50, 100, 500

Restriction: Iterations >= 1


J. Weickert, V. Hlavac, R. Sara; “Multiscale texture enhancement”; Computer analysis of images and patterns, Lecture Notes in Computer Science, Vol. 970, pp. 230-237; Springer, Berlin; 1995.
J. Weickert, B. ter Haar Romeny, L. Florack, J. Koenderink, M. Viergever; “A review of nonlinear diffusion filtering”; Scale-Space Theory in Computer Vision, Lecture Notes in Comp. Science, Vol. 1252, pp. 3-28; Springer, Berlin; 1997.



ClassesClassesClassesClasses | | | | Operators