LEADTOOLS Image Processing (Leadtools.ImageProcessing.Core assembly) Send comments on this topic. | Back to Introduction - All Topics | Help Version 17.0.3.29
ApplyVoiLookupTableCommand Class
See Also  Members  
Leadtools.ImageProcessing.Core Namespace : ApplyVoiLookupTableCommand Class



Sets up the paint or paint and image processing methods' window leveling options for a specific image through a lookup-table (LookupTable). This class is available in the Document/Medical Toolkits only. Supported in Silverlight, Windows Phone 7

Object Model

ApplyVoiLookupTableCommand ClassDicomLookupTableDescriptor Class

Syntax

Visual Basic (Declaration) 
Public Class ApplyVoiLookupTableCommand 
   Inherits Leadtools.ImageProcessing.RasterCommand
   Implements IRasterCommand 
Visual Basic (Usage)Copy Code
Dim instance As ApplyVoiLookupTableCommand
C# 
public class ApplyVoiLookupTableCommand : Leadtools.ImageProcessing.RasterCommand, IRasterCommand  
C++/CLI 
public ref class ApplyVoiLookupTableCommand : public Leadtools.ImageProcessing.RasterCommand, IRasterCommand  

Example

Run the Leadtools.ImageProcessing.Core.ApplyVoiLookupTableCommand on an image.

Visual BasicCopy Code
Public Sub ApplyVoiLookupTableCommandExample()
   Dim codecs As New RasterCodecs()
   codecs.ThrowExceptionsOnInvalidImages = True

   Dim leadImage As RasterImage = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "IMAGE2.dcm"))

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

   For i = 0 To 65536

      If (i < 30) Then
         pLookupTable(i) = 0

      Else
         If (i > 630) Then
            pLookupTable(i) = 630
         Else
            pLookupTable(i) = CType(i, Int16)
         End If

      End If

   Next

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

   Dim command As ApplyVoiLookupTableCommand = New ApplyVoiLookupTableCommand
   command.Flags = VoiLookupTableCommandFlags.None
   command.LookupTable = pLookupTable
   command.LookupTableDescriptor = LookupTableDescriptor
   command.Run(leadImage)

End Sub

Public NotInheritable Class LEAD_VARS
   Public Const ImagesDir As String = "C:\Users\Public\Documents\LEADTOOLS Images"
End Class
C#Copy Code
public void ApplyVoiLookupTableCommandExample()
   {
      // Load an image
      RasterCodecs codecs = new RasterCodecs();
      codecs.ThrowExceptionsOnInvalidImages = true;

      RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "IMAGE2.dcm"));

      // Prepare the command
      int                i; 
      short[] pLookupTable = new short[0x10000];
      DicomLookupTableDescriptor LookupTableDescriptor = new DicomLookupTableDescriptor();

      for(i = 0; i < 0x10000; i++)
      {
         if(i < 30) 
         {
            pLookupTable[i] = 0;
         }
         else
            if(i > 630) 
            pLookupTable[i] = 630;
         else
            pLookupTable[i] = (short)i;
      }

      // fill the LookupTableDescriptor object
      LookupTableDescriptor.FirstStoredPixelValueMapped = 0;
      LookupTableDescriptor.EntryBits = 16;

      ApplyVoiLookupTableCommand command = new ApplyVoiLookupTableCommand();
      command.Flags                      = VoiLookupTableCommandFlags.None;
      command.LookupTable                = pLookupTable;
      command.LookupTableDescriptor      = LookupTableDescriptor;
      command.Run(image);

   }

static class LEAD_VARS
{
   public const string ImagesDir = @"C:\Users\Public\Documents\LEADTOOLS Images";
}
SilverlightCSharpCopy Code
public void ApplyVoiLookupTableCommandExample(RasterImage image, Stream outStream)
{
   // Prepare the command
   int i;
   short[] pLookupTable = new short[0x10000];
   DicomLookupTableDescriptor LookupTableDescriptor = new DicomLookupTableDescriptor();
   for(i = 0; i < 0x10000; i++)
   {
      if(i < 30) 
      {
         pLookupTable[i] = 0;
      }
      else
         if(i > 630) 
         pLookupTable[i] = 630;
      else
         pLookupTable[i] = (short)i;
   }

   // fill the LookupTableDescriptor object
   LookupTableDescriptor.FirstStoredPixelValueMapped = 0;
   LookupTableDescriptor.EntryBits = 16;

   ApplyVoiLookupTableCommand command = new ApplyVoiLookupTableCommand();
   command.Flags                      = VoiLookupTableCommandFlags.None;
   command.LookupTable                = pLookupTable;
   command.LookupTableDescriptor      = LookupTableDescriptor;
   command.Run(image);

   // Save result image
   RasterCodecs codecs = new RasterCodecs();
   codecs.Save(image, outStream, RasterImageFormat.Jpeg, 24);
   image.Dispose();
}
SilverlightVBCopy Code
Public Sub ApplyVoiLookupTableCommandExample(ByVal image As RasterImage, ByVal outStream As Stream)
   ' Prepare the command
   Dim i As Integer
   Dim pLookupTable As Short() = New Short(&H10000 - 1){}
   Dim LookupTableDescriptor As DicomLookupTableDescriptor = New DicomLookupTableDescriptor()
   i = 0
   Do While i < &H10000
      If i < 30 Then
         pLookupTable(i) = 0
      Else
         If i > 630 Then
         pLookupTable(i) = 630
      Else
         pLookupTable(i) = CShort(i)
      End If
      End If
      i += 1
   Loop

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

   Dim command As ApplyVoiLookupTableCommand = New ApplyVoiLookupTableCommand()
   command.Flags = VoiLookupTableCommandFlags.None
   command.LookupTable = pLookupTable
   command.LookupTableDescriptor = LookupTableDescriptor
   command.Run(image)

   ' Save result image
   Dim codecs As RasterCodecs = New RasterCodecs()
   codecs.Save(image, outStream, RasterImageFormat.Jpeg, 24)
   image.Dispose()
End Sub

Remarks

  • This class sets up the paint or paint and image processing methods' window leveling options for a specific image through a lookup-table (LookupTable). In the DICOM world, this is referred to as "applying a non-linear VOI LookupTable".
  • This class will remap the LookupTable used to display and process an image by applying a user-defined lookup table. In the DICOM world this is referred to as applying a "non-linear VOI LookupTable". The DICOM standard states:
  • "A VOI LookupTable defines the transformation of the modality pixel values into pixel values that are meaningful for print, display, etc. This transformation is applied after any Modality LookupTable". Please see "VOI LookupTable Module Attributes" in the DICOM standard for more details.
  • This class does not change the image data; it only updates the entries inside the image display LookupTable.
  • The value is remapped according to the LookupTable (values smaller than FirstStoredPixelValueMapped (property of the DicomLookupTableDescriptor class) are mapped to the first LookupTable entry, while values greater than FirstStoredPixelValueMapped (property of the DicomLookupTableDescriptor class) + LookupTable->Length are mapped to the last LookupTable entry).
  • It is recommended to always set the VoiLookupTableCommandFlags flag.
  • In the DICOM world you will need to set the VoiLookupTableCommandFlags flag if the photometric interpretation of the image is "MONOCHROME1", where the minimum grayscale value is intended to be displayed as white after any VOI gray scale transformations have been performed.
  • 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.ApplyVoiLookupTableCommand

Requirements

Target Platforms: Silverlight 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family, Windows Vista, Windows 7, MAC OS/X (Intel Only)

See Also