Leadtools Send comments on this topic. | Back to Introduction - All Topics | Help Version 16.5.9.25
WindowLevelFillLookupTable Method
See Also  Example
Leadtools Namespace > RasterPalette Class : WindowLevelFillLookupTable Method



lookupTable
Pointer to an array to be updated with the 8-bit RGB quad (i.e. lookup table).
startColor
Starting color value for the gradient.
endColor
Ending color value for the gradient.
low
The low value of the window width, in pixels.
high
The high value for the window width, in pixels.
lowBit

Value indicating the low bit used for leveling.

This is normally 0 and should be less than the highBit.
highBit

Value indicating the high bit used for leveling.

This should be greater than or equal to lowBit and less than 11 for 12-bit grayscale or 15 for 16-bit grayscale.
minValue
The image minimum value. This value can be obtained using MinMaxValuesCommand.
maxValue
The image maximum value. This value can be obtained using MinMaxValuesCommand.
factor

Value that indicates the factor to be applied in the method operation specified in the flags parameter.

This parameter is used only if flags is RasterPaletteWindowLevelFlags.Exponential, RasterPaletteWindowLevelFlags.Logarithmic or RasterPaletteWindowLevelFlags.Sigmoid.

If RasterPaletteWindowLevelFlags.Exponential or RasterPaletteWindowLevelFlags.Sigmoid is specified, its value can be any integer (+/-). If RasterPaletteWindowLevelFlags.Logarithmic is specified, its value should be >>= 0. If factor = 0, the lookup table will be filled linearly.

flags
Flags that indicate how the range is used to fill and the type of the lookup table and whether it contains signed or unsigned data.
Fills the user-allocated 8-bit LUT with values ranging between the startColor and endColor colors according to the selected LUT type.

Syntax

Visual Basic (Declaration) 
Public Shared Sub WindowLevelFillLookupTable( _
   ByVal lookupTable() As RasterColor, _
   ByVal startColor As RasterColor, _
   ByVal endColor As RasterColor, _
   ByVal low As Integer, _
   ByVal high As Integer, _
   ByVal lowBit As Integer, _
   ByVal highBit As Integer, _
   ByVal minValue As Integer, _
   ByVal maxValue As Integer, _
   ByVal factor As Integer, _
   ByVal flags As RasterPaletteWindowLevelFlags _
) 
Visual Basic (Usage)Copy Code
Dim lookupTable() As RasterColor
Dim startColor As RasterColor
Dim endColor As RasterColor
Dim low As Integer
Dim high As Integer
Dim lowBit As Integer
Dim highBit As Integer
Dim minValue As Integer
Dim maxValue As Integer
Dim factor As Integer
Dim flags As RasterPaletteWindowLevelFlags
 
RasterPalette.WindowLevelFillLookupTable(lookupTable, startColor, endColor, low, high, lowBit, highBit, minValue, maxValue, factor, flags)
C# 
public static void WindowLevelFillLookupTable( 
   RasterColor[] lookupTable,
   RasterColor startColor,
   RasterColor endColor,
   int low,
   int high,
   int lowBit,
   int highBit,
   int minValue,
   int maxValue,
   int factor,
   RasterPaletteWindowLevelFlags flags
)
C++/CLI 
public:
static void WindowLevelFillLookupTable( 
   array<RasterColor>^ lookupTable,
   RasterColor startColor,
   RasterColor endColor,
   int low,
   int high,
   int lowBit,
   int highBit,
   int minValue,
   int maxValue,
   int factor,
   RasterPaletteWindowLevelFlags flags
) 

Parameters

lookupTable
Pointer to an array to be updated with the 8-bit RGB quad (i.e. lookup table).
startColor
Starting color value for the gradient.
endColor
Ending color value for the gradient.
low
The low value of the window width, in pixels.
high
The high value for the window width, in pixels.
lowBit

Value indicating the low bit used for leveling.

This is normally 0 and should be less than the highBit.
highBit

Value indicating the high bit used for leveling.

This should be greater than or equal to lowBit and less than 11 for 12-bit grayscale or 15 for 16-bit grayscale.
minValue
The image minimum value. This value can be obtained using MinMaxValuesCommand.
maxValue
The image maximum value. This value can be obtained using MinMaxValuesCommand.
factor

Value that indicates the factor to be applied in the method operation specified in the flags parameter.

This parameter is used only if flags is RasterPaletteWindowLevelFlags.Exponential, RasterPaletteWindowLevelFlags.Logarithmic or RasterPaletteWindowLevelFlags.Sigmoid.

If RasterPaletteWindowLevelFlags.Exponential or RasterPaletteWindowLevelFlags.Sigmoid is specified, its value can be any integer (+/-). If RasterPaletteWindowLevelFlags.Logarithmic is specified, its value should be >>= 0. If factor = 0, the lookup table will be filled linearly.

flags
Flags that indicate how the range is used to fill and the type of the lookup table and whether it contains signed or unsigned data.

Example

Visual BasicCopy Code
Public Sub WindowLevelFillLookupTableExample()
 RasterCodecs.Startup()
 Dim codecs As RasterCodecs = New RasterCodecs()

 codecs.ThrowExceptionsOnInvalidImages = True

 Dim srcFileName As String = LeadtoolsExamples.Common.ImagesPath.Path + "Image1.cmp"
 Dim destFileName As String = LeadtoolsExamples.Common.ImagesPath.Path + "Image1_WindowLevel.tif"

 ' Load an image as 8 bits/pixel
 Dim image As RasterImage = codecs.Load(srcFileName, 8, CodecsLoadByteOrder.Rgb, 1, 1)

 ' change the image to be 16-bit grayscale
 Dim grayscaleCmd As GrayscaleCommand = New GrayscaleCommand(16)
 grayscaleCmd.Run(image)

 ' get the lookup table size
 Dim lookupTableSize As Integer = 1 << (image.HighBit - image.LowBit + 1)

 ' get low/hight bits and minimum/maximum value of this grayscale image
 Dim minMaxBitsCmd As MinMaxBitsCommand = New MinMaxBitsCommand()
 minMaxBitsCmd.Run(image)

 Dim lowBit As Integer = minMaxBitsCmd.MinimumBit
 Dim highBit As Integer = minMaxBitsCmd.MaximumBit

 Dim minMaxValuesCmd As MinMaxValuesCommand = New MinMaxValuesCommand()
 minMaxValuesCmd.Run(image)
 Dim minVal As Integer = minMaxValuesCmd.MinimumValue
 Dim maxVal As Integer = minMaxValuesCmd.MaximumValue

 ' create the lookup table
 Dim lookupTable As RasterColor() = New RasterColor(lookupTableSize - 1) {}

 Dim flags As RasterPaletteWindowLevelFlags = RasterPaletteWindowLevelFlags.Inside Or RasterPaletteWindowLevelFlags.Linear

 If image.Signed Then
    flags = flags Or RasterPaletteWindowLevelFlags.Signed
 End If

 ' initialize the fill lookup table parameters
 Dim startColor As RasterColor = RasterColor.FromGdiPlusColor(Color.Red)
 Dim endColor As RasterColor = RasterColor.FromGdiPlusColor(Color.Blue)

 Dim low As Integer = 23000
 Dim high As Integer = 45000
 Dim factor As Integer = 10

 ' fill the lookup table
 RasterPalette.WindowLevelFillLookupTable(lookupTable, startColor, endColor, low, high, lowBit, highBit, minVal, maxVal, factor, flags)

 ' now do window level on the image
 image.WindowLevel(lowBit, highBit, lookupTable, RasterWindowLevelMode.PaintAndProcessing)

 ' save it back on disk
 codecs.Save(image, destFileName, RasterImageFormat.Tif, 16)

 ' Clean up
 image.Dispose()
 RasterCodecs.Shutdown()
      End Sub
C#Copy Code
public void WindowLevelFillLookupTableExample() 

   RasterCodecs.Startup(); 
   RasterCodecs codecs = new RasterCodecs(); 
 
   codecs.ThrowExceptionsOnInvalidImages = true; 
 
   string srcFileName = LeadtoolsExamples.Common.ImagesPath.Path + "Image1.cmp"; 
   string destFileName = LeadtoolsExamples.Common.ImagesPath.Path + "Image1_WindowLevel.tif"; 
 
   // Load an image as 8 bits/pixel 
   RasterImage image = codecs.Load(srcFileName, 8, CodecsLoadByteOrder.Rgb, 1, 1); 
 
   // change the image to be 16-bit grayscale 
   GrayscaleCommand grayscaleCmd = new GrayscaleCommand(16); 
   grayscaleCmd.Run(image); 
 
   // get the lookup table size 
   int lookupTableSize = 1 << (image.HighBit - image.LowBit + 1); 
 
   // get low/hight bits and minimum/maximum value of this grayscale image 
   MinMaxBitsCommand minMaxBitsCmd = new MinMaxBitsCommand(); 
   minMaxBitsCmd.Run(image); 
 
   int lowBit = minMaxBitsCmd.MinimumBit; 
   int highBit= minMaxBitsCmd.MaximumBit; 
 
   MinMaxValuesCommand minMaxValuesCmd = new MinMaxValuesCommand(); 
   minMaxValuesCmd.Run(image); 
   int minVal = minMaxValuesCmd.MinimumValue; 
   int maxVal = minMaxValuesCmd.MaximumValue; 
 
   // create the lookup table 
   RasterColor[] lookupTable = new RasterColor[lookupTableSize]; 
 
   RasterPaletteWindowLevelFlags flags = 
      RasterPaletteWindowLevelFlags.Inside | 
      RasterPaletteWindowLevelFlags.Linear; 
 
   if(image.Signed) 
      flags |= RasterPaletteWindowLevelFlags.Signed; 
 
   // initialize the fill lookup table parameters 
   RasterColor startColor= RasterColor.FromGdiPlusColor(Color.Red); 
   RasterColor endColor= RasterColor.FromGdiPlusColor(Color.Blue); 
 
   int low = 23000; 
   int high = 45000; 
   int factor = 10; 
 
   // fill the lookup table 
   RasterPalette.WindowLevelFillLookupTable( 
      lookupTable, 
      startColor, 
      endColor, 
      low, 
      high, 
      lowBit, 
      highBit, 
      minVal, 
      maxVal, 
      factor, 
      flags); 
 
   // now do window level on the image 
   image.WindowLevel( 
      lowBit, 
      highBit, 
      lookupTable, 
      RasterWindowLevelMode.PaintAndProcessing); 
 
   // save it back on disk 
   codecs.Save(image, destFileName, RasterImageFormat.Tif, 16); 
 
   // Clean up 
   image.Dispose(); 
   RasterCodecs.Shutdown(); 
}

Remarks

This method is available in the Medical Toolkits.

Use this method to fill in the lookup table, used in RasterImage.WindowLevel, according to the lookup table type flag.

The lookup table will be filled as follows:

Inside/Outside MinValue-Low Low-High High-MaxValue
RasterPaletteWindowLevelFlags.Inside solid black (0,0,0) color gradient ranging from startColor to endColor solid white (255,255,255)
RasterPaletteWindowLevelFlags.Outside solid color (startColor) grayscale values from solid black (0,0,0) to solid white (255, 255, 255) solid color (endColor)
RasterPaletteWindowLevelFlags.Inside | RasterPaletteWindowLevelFlags.DicomStyle None color gradient ranging from startColor to endColor None
RasterPaletteWindowLevelFlags.Outside | RasterPaletteWindowLevelFlags.DicomStyle solid color (startColor) color gradient ranging from startColor to endColor solid color (endColor)

To fill a 16-bit lookup table use WindowLevelFillLookupTableExt.

Only TIFF and DICOM file formats are capable of saving images that have been window-leveled.

Images can be window-leveled by calling RasterImage.WindowLevel and specifying RasterWindowLevelMode.PaintAndProcessing for the flags parameter, by using the WindowLevelCommand or by loading an image from a file format that supports Window Leveling.

If a window-leveled image is saved as any other file format, the image data will be converted before being saved. For more information, refer to Saving Window-Leveled Images.

For more information, refer to Introduction to Image Processing With LEADTOOLS.

For more information, refer to Grayscale Images.

Requirements

Target Platforms: Microsoft .NET Framework 3.0, Windows XP, Windows Server 2003 family, Windows Server 2008 family

See Also