IPSDK 4.1.0.2
IPSDK : Image Processing Software Development Kit
Equalization LUT computation
IntensityLUTequalize (inHistogram,inOutputRange)

Detailed Description

computes look up table used to equalize an histogram

Given an input histogram $InHistoBins$ (associated to $N$ classes) and an output range for values $InOutputRange = [InOutputMin, InOutputMax]$, output look up table $OutIntensityLUT$ is computed as follow :
We first compute cumulative distribution function :

\[ Cdf[i] = \sum_{j=0}^{i}{InHistoBins_{Frequency}[j]} \]

Output look up table $OutIntensityLUT$ is then given by :

\[ OutIntensityLUT[i] = \dfrac{InOutputMax - InOutputMin}{NormFactor}Cdf[i] + InOutputMin \]

where

\[ NormFactor = \sum_{j=0}^{N}{InHistoBins_{Frequency}[j]} \]

See also
http://en.wikipedia.org/wiki/Equalization
http://en.wikipedia.org/wiki/Histogram_equalization

Example of Python code :

Example imports

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

Code Example

# opening of input images
inImg = PyIPSDK.loadTiffImageFile(inputImgPath)
# computation of image histogram
histo = glbmsr.histogramMsr2d(inImg)
# definition of equalization range
equalizeRange = PyIPSDK.createRange(0, 255)
# equalization lut computation
outLut = itrans.equalize(histo, equalizeRange)

Example of C++ code :

Example informations

Header file

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

Code Example

// open input image
ImagePtr pInImg = loadTiffImageFile(inputImgPath);
// compute histogram of input image
HistogramDataConstPtr pOutHistogram = histogramMsr(pInImg);
// define an output range for operation
RangePtr pInOutputRange(boost::make_shared<Range>());
pInOutputRange->setValue<Range::Min>(0);
pInOutputRange->setValue<Range::Max>(255);
// compute histogram equalization
IntensityLUTPtr pOutIntensityLUT = equalize(pOutHistogram, pInOutputRange);