L_AnisotropicDiffusionBitmap

#include "l_bitmap.h"

L_LTIMGCOR_API L_INT EXT_FUNCTION L_AnisotropicDiffusionBitmap(pBitmap, uIterations, uSmoothing, fTimeStep, fMinVariation, fMaxVariation, fEdgeHeight, uUpdate, uFlags)

pBITMAPHANDLE pBitmap;

/* pointer to the bitmap */

L_UINT uIterations;

/* number of iterations */

L_UINT uSmoothing;

/* smoothing kernel size */

L_FLOAT fTimeStep;

/* time control over vector field distance */

L_FLOAT fMinVariation;

/* amount of parallel diffusion */

L_FLOAT fMaxVariation;

/* decrease of one sided diffusion */

L_FLOAT fEdgeHeight;

/* max edge height to be calculated */

L_UINT uUpdate;

/* number of iterations before each image update */

L_UINT32 uFlags;

/* flags */

Performs a 2-Dimensional Anisotropic Diffusion filter on an image for reduction of varied patterned and non-patterned noise.

Parameter

Description

pBitmap

Pointer to the bitmap handle.

uIterations

Number of iterations the filter will perform. The size of the pyramid will be equal to this variable.

uSmoothing

Size of smoothing kernel which is performed on the image.

fTimeStep

Defines the length of the vector field.

fMinVariation

Increasing this variable will increase the parallel diffusion.

fMaxVariation

Increasing this variable decreases the one sided diffusion.

fEdgeHeight

Max edge size which all edge values bellow will be included in the operation of the filter.

uUpdate

The number of iterations before each consecutive update of the image.

uFlags

Reserved for future use. Must be 0.

Returns

SUCCESS

The function was successful.

< 1

An error occurred. Refer to Return Codes.

Comments

This function is dedicated to reduction of noise in images, more specifically medical images. Images with a great amount of periodic noise in them are better suited to be clarified using this filter.

The number of iterations controls the number of times the filter will be performed on the image. The lower values will perform the filter faster. Higher iterations typically mean clearer results, yet it depends on the maximum length of vectors that can be computed from the image to obtain the best results.

The higher the time step variable is, the larger of a range of vectors is used for the next iteration, yet too high a value, will yield out of range results as it will exceed the maximum vectors at some spots.

The variable uUpdate is very useful when using a large number of iterations on a large image, especially when the results are not known. This variable, updates the image every number update iterations, thus the progress of the de-noising can be witnessed.

If the image has a region, the function will be performed on the region only.

This function supports 12 and 16-bit grayscale and 48 and 64-bit color images. Support for 12 and 16-bit grayscale and 48 and 64-bit color images is available in the Document and Medical Imaging toolkits.

This function does not support 32-bit grayscale images. It returns the error code ERROR_GRAY32_UNSUPPORTED if a 32-bit grayscale image is passed to this function.

Required DLLs and Libraries

LTIMGCOR

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application.

Platforms

Win32, x64.

See Also

Functions:

L_SigmaFilterBitmap, L_MedianFilterBitmap

Topics:

Raster Image Functions: Modifying Intensity Values

 

Raster Image Functions: Processing an Image

 

Removing Noise

Example

This example loads a bitmap and applies the Anisotropic Diffusion Filter on it.

#define MAKE_IMAGE_PATH(pFileName) TEXT("C:\\Users\\Public\\Documents\\LEADTOOLS Images\\")pFileName



#if defined (LEADTOOLS_V17_OR_LATER)

L_INT AnisotropicDiffusionFilterExample(L_VOID)
{
   L_INT nRet;
   BITMAPHANDLE LeadBitmap; /*Bitmap handle to hold the loaded image*/

   /* Load the bitmap, keeping the bits per pixel of the file */
   nRet = L_LoadBitmap (MAKE_IMAGE_PATH(TEXT("ImageProcessingDemo\\Image3.cmp")), 
      &LeadBitmap, sizeof(BITMAPHANDLE), 0,
      ORDER_BGR, NULL, NULL);
   if(nRet != SUCCESS)
      return nRet;

   //Apply Anisotropic Diffusion filter
   nRet = L_AnisotropicDiffusionBitmap(&LeadBitmap, 20, 1, 100.0f, 0.5f, 0.8f, 4.0f, 10, 0);
   if(nRet != SUCCESS)
      return nRet;

   //free bitmap 
   if(LeadBitmap.Flags.Allocated)  
      L_FreeBitmap(&LeadBitmap);
   return SUCCESS;
}
#endif