Leadtools.ImageProcessing.Core Send comments on this topic. | Back to Introduction - All Topics | Help Version 15.12.10
ApplyModalityLookupTableCommand Class
See Also  Members   Example 
Leadtools.ImageProcessing.Core Namespace : ApplyModalityLookupTableCommand Class




Remaps the image pixels through a LookupTable (LookupTable). This class is available in the Document/Medical Toolkits only.

Object Model


Syntax

Visual Basic (Declaration) 
Public Class ApplyModalityLookupTableCommand 
   Inherits RasterCommand
   Implements IRasterCommand 
Visual Basic (Usage)Copy Code
Dim instance As ApplyModalityLookupTableCommand
C# 
public class ApplyModalityLookupTableCommand : RasterCommand, IRasterCommand  
Managed Extensions for C++ 
public __gc class ApplyModalityLookupTableCommand : public RasterCommand, IRasterCommand  
C++/CLI 
public ref class ApplyModalityLookupTableCommand : public RasterCommand, IRasterCommand  

Example

Visual BasicCopy Code
ImageProcessing.Core.ApplyModalityLookupTableCommand
   Public Sub ApplyModalityLookupTableCommandExample()
      RasterCodecs.Startup()
      Dim codecs As New RasterCodecs()
      codecs.ThrowExceptionsOnInvalidImages = True

      Dim leadImage As RasterImage = codecs.Load("C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\IMAGE2.dic")

      ' Prepare the command
      Dim i As Integer
      Dim pLookupTable() As Short
      ReDim pLookupTable(65535)
      Dim LookupTableDescriptor As DicomLookupTableDescriptor = New DicomLookupTableDescriptor

      ' set a LookupTable which reduces the intensity of each pixel to half
      For i = 0 To 65535
         pLookupTable(i) = CType(i \ 2, Int16)
      Next


      ' fill the LookupTableDescriptor object
      LookupTableDescriptor.FirstStoredPixelValueMapped = 0
      LookupTableDescriptor.EntryBits = 16

      ' apply the LookupTable
      Dim command As ApplyModalityLookupTableCommand = New ApplyModalityLookupTableCommand
      command.Flags = ModalityLookupTableCommandFlags.None
      command.LookupTable = pLookupTable
      command.LookupTableDescriptor = LookupTableDescriptor
      command.Run(leadImage)

      RasterCodecs.Shutdown()
   End Sub
C#Copy Code
ImageProcessing.Core.ApplyModalityLookupTableCommand 
      public void ApplyModalityLookupTableCommandExample() 
      { 
         // Load an image 
         RasterCodecs.Startup(); 
         RasterCodecs codecs = new RasterCodecs(); 
         codecs.ThrowExceptionsOnInvalidImages = true; 
 
         RasterImage image = codecs.Load(@"C:\Program Files\LEAD Technologies\LEADTOOLS 15\Images\IMAGE2.dic"); 
 
         // Prepare the command 
         int                i;  
         short[] pLookupTable = new short[0x10000];  
         DicomLookupTableDescriptor LookupTableDescriptor = new DicomLookupTableDescriptor(); 
 
         // set a LookupTable which reduces the intensity of each pixel to half 
         for(i = 0; i <= 0xFFFF; i++) 
            pLookupTable[i] = (short)(i / 2); 
 
         // fill the LookupTableDescriptor object 
         LookupTableDescriptor.FirstStoredPixelValueMapped = 0;  
         LookupTableDescriptor.EntryBits = 16;  
 
         // apply the LookupTable 
         ApplyModalityLookupTableCommand command = new ApplyModalityLookupTableCommand(); 
         command.Flags = ModalityLookupTableCommandFlags.None; 
         command.LookupTable = pLookupTable; 
         command.LookupTableDescriptor = LookupTableDescriptor; 
         command.Run(image); 
 
         RasterCodecs.Shutdown(); 
      }

Remarks

  • This class remaps the image pixels through a LookupTable (LookupTable). In the DICOM world, this is referred to as "applying a non-linear Modality LookupTable".
  • This class is similar to RemapIntensityCommand because it remaps the image pixel values through a LookupTable. The class differs from RemapIntensityCommand as follows:

    ApplyModalityLookupTableCommand allows you to specify an incomplete LookupTable. Values less than the first mapped index will be mapped to the first entry in the palette. Values higher than "first mapped index" + "LookupTable length" will be mapped to the last entry in the LookupTable.

    ApplyModalityLookupTableCommand only works on grayscale images.
    ApplyModalityLookupTableCommand can create signed images. The output image will be signed (if ModalityLookupTableCommandFlags.SignedLookupTable is set), or unsigned (ModalityLookupTableCommandFlags.SignedLookupTable is not set).
  • The values in the LookupTable will be masked such that only the useful bits in the image are considered. The values are considered as if the image pixel values are normalized, LowBit = 0.
  • For example, let's say the image is:

    BitsPerPixel = 12

    LowBit = 4

    HighBit = 10

    In this case, there are 10-4+1=7 valid bits. This means that there are 128 values to remap. For every pixel, ApplyModalityLookupTableCommand will do the following:
  • Take the pixel value, shift it to the right by 4 and mask out the high bits, producing a value (val = 0..127).
  • The value is remapped according to the LookupTable (values smaller than FirstStoredPixelValueMapped (property of DicomLookupTableDescriptor class) are mapped to first LookupTable entry, while values greater than FirstStoredPixelValueMapped (property of DicomLookupTableDescriptor class) + LookupTable->Length are mapped to the last LookupTable entry).
  • After remapping, the value is shifted to the left by 4 and will replace bits 4 thru 10 from the original image.
  • If the image is signed, the indices for the LookupTable are assumed to be signed and be between -32768 and +32767.
  • If the image is unsigned, the indices are unsigned and are between 0..65535.
  • It is recommended to always set the ModalityLookupTableCommandFlags.UpdateMinMax flag.
  • This class is helpful in applying what is referred to as a "Non-Linear Modality LookupTable" in the DICOM world. According to the DICOM standard a "Modality LookupTable" defines the transformation of manufacturer-dependent pixel values into pixel values, which are manufacturer independent (e.g. Hounsfield units for CT, Optical Density for film digitizers, etc.).
  • This class supports 12 and 16-bit grayscale. Support for 12 and 16-bit grayscale is available only in the Document/Medical toolkits.
  • This command does not support 32-bit grayscale images.
For more information, refer to Changing Brightness and Contrast.

Inheritance Hierarchy

System.Object
   Leadtools.ImageProcessing.RasterCommand
      Leadtools.ImageProcessing.Core.ApplyModalityLookupTableCommand

Requirements

Target Platforms: Microsoft .NET Framework 2.0, Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 family

See Also