←Select platform

ApplyVoiLookupTableCommand Class

Summary

Sets up the paint or paint and image processing methods' window leveling options for a specific image through a lookup-table (LookupTable).

Syntax

C#
VB
Java
Objective-C
WinRT C#
C++
public sealed class ApplyVoiLookupTableCommand : Leadtools.Imageprocessing.Leadtools.ImageProcessing.IRasterCommand
@interface LTApplyVoiLookupTableCommand : LTRasterCommand
public class ApplyVoiLookupTableCommand extends RasterCommand
function Leadtools.ImageProcessing.Core.ApplyVoiLookupTableCommand()

Remarks

This command is available in the Document and Medical Imaging toolkits.

  • 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". Refer to "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 the FirstStoredPixelValueMapped (property of the DicomLookupTableDescriptor class) are mapped to the first LookupTable entry, while values greater than the FirstStoredPixelValueMapped (property of the DicomLookupTableDescriptor class) + LookupTable->Length are mapped to the last LookupTable entry.
  • It is best 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. In Silverlight versions of LEADTOOLS, this image processing command will fail if the image data for the RasterImage object is stored internally using a Silverlight WriteableBitmap object. For more information, refer to Image Processing Command Limitations in Silverlight.

Example

Run the ApplyVoiLookupTableCommand on an image.

C#
VB
WinRT C#
Silverlight C#
Silverlight VB
Imports Leadtools 
Imports Leadtools.Codecs 
Imports Leadtools.ImageProcessing.Core 
 
    
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 
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing.Core; 
 
       
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"; 
} 
using Leadtools; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing.Core; 
 
       
public async Task ApplyVoiLookupTableCommandExample() 
{ 
   // Load an image 
   RasterCodecs codecs = new RasterCodecs(); 
   codecs.ThrowExceptionsOnInvalidImages = true; 
   // Load the image 
   string srcFileName = @"Assets\Image2.dcm"; 
   StorageFile loadFile = await Tools.AppInstallFolder.GetFileAsync(srcFileName); 
   RasterImage image = await codecs.LoadAsync(LeadStreamFactory.Create(loadFile)); 
 
   // 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); 
 
} 
using Leadtools; 
using Leadtools.Examples; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing.Core; 
 
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(); 
} 
Imports Leadtools 
Imports Leadtools.Codecs 
Imports Leadtools.ImageProcessing.Core 
 
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 

Requirements

Target Platforms

Products | Support | Contact Us | Copyright Notices
© 1991-2017 LEAD Technologies, Inc. All Rights Reserved.
Leadtools.ImageProcessing.Core Assembly
Click or drag to resize