Adaptive Histogram Equalization Image Filter¶
Synopsis¶
Apply a power law adaptive histogram equalization controlled by the parameters alpha and beta.
The parameter alpha controls how much the filter acts like the classical
histogram equalization method (alpha = 0) to how much the filter acts like
an unsharp mask (alpha = 1).
The parameter beta controls how much the filter acts like an unsharp mask
(beta = 0) to much the filter acts like pass through (beta = 1, with
alpha = 1).
The parameter window (or radius) controls the size of the region over which local statistics are calculated.
Results¶
  | 
  | 
Input image.  | 
Output image.  | 
  | 
  | 
Input image histogram.  | 
Output image histogram.  | 
Code¶
C++¶
#include "itkAdaptiveHistogramEqualizationImageFilter.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
int
main(int argc, char * argv[])
{
  if (argc < 6)
  {
    std::cerr << "Missing parameters." << std::endl;
    std::cerr << "Usage: " << argv[0] << " inputImageFile outputImageFile alpha beta radius" << std::endl;
    return EXIT_FAILURE;
  }
  constexpr unsigned int Dimension = 2;
  using PixelType = unsigned char;
  using ImageType = itk::Image<PixelType, Dimension>;
  using FileReaderType = itk::ImageFileReader<ImageType>;
  FileReaderType::Pointer reader = FileReaderType::New();
  reader->SetFileName(argv[1]);
  using AdaptiveHistogramEqualizationImageFilterType = itk::AdaptiveHistogramEqualizationImageFilter<ImageType>;
  AdaptiveHistogramEqualizationImageFilterType::Pointer adaptiveHistogramEqualizationImageFilter =
    AdaptiveHistogramEqualizationImageFilterType::New();
  float alpha = std::stod(argv[3]);
  adaptiveHistogramEqualizationImageFilter->SetAlpha(alpha);
  float beta = std::stod(argv[4]);
  adaptiveHistogramEqualizationImageFilter->SetBeta(beta);
  int                                                         radiusSize = std::stoi(argv[5]);
  AdaptiveHistogramEqualizationImageFilterType::ImageSizeType radius;
  radius.Fill(radiusSize);
  adaptiveHistogramEqualizationImageFilter->SetRadius(radius);
  adaptiveHistogramEqualizationImageFilter->SetInput(reader->GetOutput());
  adaptiveHistogramEqualizationImageFilter->Update();
  using WriterType = itk::ImageFileWriter<ImageType>;
  WriterType::Pointer writer = WriterType::New();
  writer->SetFileName(argv[2]);
  writer->SetInput(adaptiveHistogramEqualizationImageFilter->GetOutput());
  writer->Update();
  return EXIT_SUCCESS;
}
Python¶
#!/usr/bin/env python
import itk
import argparse
parser = argparse.ArgumentParser(
    description="Adaptive Histogram Equalization Image Filter."
)
parser.add_argument("input_image")
parser.add_argument("output_image")
parser.add_argument("alpha", type=float)
parser.add_argument("beta", type=float)
parser.add_argument("radius", type=int)
args = parser.parse_args()
Dimension = 2
PixelType = itk.ctype("unsigned char")
ImageType = itk.Image[PixelType, Dimension]
reader = itk.ImageFileReader[ImageType].New()
reader.SetFileName(args.input_image)
histogramEqualization = itk.AdaptiveHistogramEqualizationImageFilter.New(reader)
histogramEqualization.SetAlpha(args.alpha)
histogramEqualization.SetBeta(args.beta)
radius = itk.Size[Dimension]()
radius.Fill(args.radius)
histogramEqualization.SetRadius(radius)
itk.imwrite(histogramEqualization, args.output_image)
Classes demonstrated¶
- 
template<typename 
TImageType, typenameTKernel= Neighborhood<bool, TImageType::ImageDimension>>
classAdaptiveHistogramEqualizationImageFilter: public itk::MovingHistogramImageFilter<TImageType, TImageType, TKernel, Function::AdaptiveEqualizationHistogram<TImageType::PixelType, TImageType::PixelType>> Power Law Adaptive Histogram Equalization.
Histogram equalization modifies the contrast in an image. The AdaptiveHistogramEqualizationImageFilter is a superset of many contrast enhancing filters. By modifying its parameters (alpha, beta, and window), the AdaptiveHistogramEqualizationImageFilter can produce an adaptively equalized histogram or a version of unsharp mask (local mean subtraction). Instead of applying a strict histogram equalization in a window about a pixel, this filter prescribes a mapping function (power law) controlled by the parameters alpha and beta.
The parameter alpha controls how much the filter acts like the classical histogram equalization method (alpha=0) to how much the filter acts like an unsharp mask (alpha=1).
The parameter beta controls how much the filter acts like an unsharp mask (beta=0) to much the filter acts like pass through (beta=1, with alpha=1).
The parameter window controls the size of the region over which local statistics are calculated. The size of the window is controlled by SetRadius the default Radius is 5 in all directions.
By altering alpha, beta and window, a host of equalization and unsharp masking filters is available.
The boundary condition ignores the part of the neighborhood outside the image, and over-weights the valid part of the neighborhood.
For detail description, reference “Adaptive Image Contrast
Enhancement using Generalizations of Histogram Equalization.” J.Alex Stark. IEEE Transactions on
Image Processing, May 2000.- ITK Sphinx Examples:
 





