←Select platform

ApplyLinearModalityLookupTableCommand Class

Summary

Remaps the image pixels by applying a linear transformation described by a rescale slope and an intercept.

Syntax

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

Remarks

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

  • This class remaps the image pixels by applying a linear transformation described by rescale slope and intercept. In the DICOM world, this is referred to as "applying a linear Modality LookupTable (LookupTable)".
  • The linear transformation is described by the equation: Y = mX + b where m: slope of a straight line (this is also referred to as "Rescale Slope" in the DICOM world). b: the y-intercept of a straight line (this is also referred to as "Rescale Intercept" in the DICOM world). Y: the resulting pixel value. X: the input or original pixel value.

  • According to the DICOM standard a "Modality LookupTable (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 only works on grayscale images. Using this class for non-grayscale images will generate an error.
  • It is best to always set the ModalityLookupTableCommandFlags.UpdateMinMax flag.
  • This class can change the image from signed to unsigned, or from unsigned to signed. This is determined by the values of the resulting image pixels after applying the linear transformation.
  • 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, suppose there is an image with the following characteristics: 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.

  • If the ModalityLookupTableCommandFlags.AllowRangeExpansion flag is set in the Flags property, consider the following example: The dataset has the following attributes: BitsPerPixel 16 HighBit 11 LowBit 0 Pixel Range 0 to +4095, Unsigned The number of bits stored inside the image is 11-0+1 =12. If the fIntercept is set to -1024 and the fSlope is set to 0, then after applying the rescale slope and intercept: Output minimum pixel value = (0 *1 +(-1024))= -1024 Output maximum pixel value = (4095 *1 +(-1024))= 3071

  • The new pixel value range (-1024 to 3071) cannot be represented with the current bits stored (12 bits), which can represent values in the range (-2048 to 2048). In this case the class will change the high bit inside the image handle to be 12 instead of 11 (bits stored becomes 13), which can represent values in the range (-8192 to 8191).

  • Please note that the class will not be able to update the high bit and/or low bit if the number of bits stored is already equal to the image bits per pixel.
  • 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

Runs the ApplyLinearModalityLookupTableCommand on an image.

C#
VB
WinRT C#
Silverlight C#
Silverlight VB
Imports Leadtools 
Imports Leadtools.Codecs 
Imports Leadtools.ImageProcessing.Core 
 
    
Public Sub ApplyLinearModalityLookupTableCommandExample() 
   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 command As ApplyLinearModalityLookupTableCommand = New ApplyLinearModalityLookupTableCommand 
   command.Flags = ModalityLookupTableCommandFlags.None 
   command.Intercept = 0.0 
   command.Slope = 0.5 
   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 ApplyLinearModalityLookupTableCommandExample() 
{ 
   // Load an image 
   RasterCodecs codecs = new RasterCodecs(); 
   codecs.ThrowExceptionsOnInvalidImages = true; 
   RasterImage image = codecs.Load(Path.Combine(LEAD_VARS.ImagesDir, "IMAGE2.dcm")); 
 
   // Prepare the command 
   ApplyLinearModalityLookupTableCommand command = new ApplyLinearModalityLookupTableCommand(); 
   command.Flags     = ModalityLookupTableCommandFlags.None; 
   command.Intercept = 0.0; 
   command.Slope     = 0.5; 
   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 ApplyLinearModalityLookupTableCommandExample() 
{ 
   // 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 
   ApplyLinearModalityLookupTableCommand command = new ApplyLinearModalityLookupTableCommand(); 
   command.Flags     = ModalityLookupTableCommandFlags.None; 
   command.Intercept = 0.0; 
   command.Slope     = 0.5; 
   command.Run(image); 
 
} 
using Leadtools; 
using Leadtools.Examples; 
using Leadtools.Codecs; 
using Leadtools.ImageProcessing.Core; 
 
public void ApplyLinearModalityLookupTableCommandExample(RasterImage image, Stream outStream) 
{ 
   // Prepare the command 
   ApplyLinearModalityLookupTableCommand command = new ApplyLinearModalityLookupTableCommand(); 
   command.Flags = ModalityLookupTableCommandFlags.None; 
   command.Intercept = 0.0; 
   command.Slope = 0.5; 
   command.Run(image); 
   // Save result image 
   RasterCodecs codecs = new RasterCodecs(); 
   codecs.Save(image, outStream, RasterImageFormat.DicomGray, image.BitsPerPixel); 
   image.Dispose(); 
} 
Imports Leadtools 
Imports Leadtools.Codecs 
Imports Leadtools.ImageProcessing.Core 
 
Public Sub ApplyLinearModalityLookupTableCommandExample(ByVal image As RasterImage, ByVal outStream As Stream) 
   ' Prepare the command 
   Dim command As ApplyLinearModalityLookupTableCommand = New ApplyLinearModalityLookupTableCommand() 
   command.Flags = ModalityLookupTableCommandFlags.None 
   command.Intercept = 0.0 
   command.Slope = 0.5 
   command.Run(image) 
   ' Save result image 
   Dim codecs As RasterCodecs = New RasterCodecs() 
   codecs.Save(image, outStream, RasterImageFormat.DicomGray, image.BitsPerPixel) 
   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