IPSDK 0.2
IPSDK : Image Processing Software Development Kit
LUT Transformation 2dSee full documentation
imagelutTransform2dImg (inImg,lut)
imagelutTransform2dImg (inImg,pILut)

Detailed Description

application of a look-up table for each 2d plan of an input image algorithm

If the image is made of one single plan (single 2d grey levels image), the algorithm applies the look-up table provided by the user to the intensities of the image. If the image is multi-sliced (made of several plans, like a single 2d RGB image, for instance, or a sequence image, etc.), a collection of look-up tables (one table per plan) is applied to the intensities of the image.

The look-up table is defined using the ipsdk::imaproc::attr::IntensityLUT data item, that is composed of the following parameters:

Considering, for instance, a single 2d grey levels input image InImg and the lookup table LUT to apply, output image OutImg pixels will equal to:

\[ OutImg(x, y) = \begin{cases} LUT.lookupTable[0], \text{if } InImg(x, y) < LUT.min \\ LUT.lookupTable[(InImg(x, y) - LUT.min) / LUT.binWidth], \text{if } LUT.min \leq InImg(x, y) < LUT.min + len(LUT.lookupTable) \times LUT.binWidth \\ LUT.lookupTable[len(LUT.lookupTable)-1] , \text{if } InImg(x, y) > LUT.min + len(LUT.lookupTable) \times LUT.binWidth \end{cases} \]

Note
If the input image is multi-sliced and the user wants to apply the same lookup table for all the plans of the input image, he can specify one single lookup table as input.

Given the following look-up table :

\[ LUT.min = 150 LUT.binWidth = 1 LUT.lookupTable = [i for i in range(106)] \]

Here is an example of look-up table transformation applied to a 8-bits grey level image :

lutTransformImg.png

In this example, all pixels with an intensity lower than 150 in input image are set to 0 in output image. Other pixels are set to a value that equals to $InImg(x, y)-150$ in output image.

Example of Python code :

Example imports

import PyIPSDK
import PyIPSDK.IPSDKIPLGeometricTransform as gtrans
import PyIPSDK.IPSDKIPLIntensityTransform as itrans
import PyIPSDK.IPSDKIPLGlobalMeasure as glbmsr

Code Example

# opening of input images
inImg = PyIPSDK.loadTiffImageFile(inputImgPath)
lut = PyIPSDK.createIntensityLUT(0, 50, [255-i*50 for i in range(256)])
autoOutImg = itrans.lutTransform2dImg(inImg, lut)

Example of C++ code :

Example informations

Header file

#include <IPSDKIPL/IPSDKIPLIntensityTransform/Processor/LUTTransform2dImg/LUTTransform2dImg.h>

Code Example

// Sample with a generated output image
// ------------------------------------
ImagePtr pAutoOutImg = lutTransform2dImg(pInImg, pLut);
// Sample with a provided output image
// -----------------------------------
lutTransform2dImg(pInImg, pLut, pOutImg);