This is machine translation

Translated by Microsoft
Mouse over text to see original. Click the button below to return to the English verison of the page.


Enhance contrast using histogram equalization


J = histeq(I,hgram)
J = histeq(I,n)
[J, T] = histeq(I)
[gpuarrayJ, gpuarrayT] = histeq(gpuarrayI,___)
newmap = histeq(X, map, hgram)
newmap = histeq(X, map)
[newmap, T] = histeq(X,___)


J = histeq(I,hgram) transforms the intensity image I so that the histogram of the output intensity image J with length(hgram) bins approximately matches hgram. The vector hgram should contain integer counts for equally spaced bins with intensity values in the appropriate range: [0, 1] for images of class double, [0, 255] for images of class uint8, and [0, 65535] for images of class uint16. histeq automatically scales hgram so that sum(hgram) = prod(size(I)). The histogram of J will better match hgram when length(hgram) is much smaller than the number of discrete levels in I.

J = histeq(I,n) transforms the intensity image I, returning in J an intensity image with n discrete gray levels. A roughly equal number of pixels is mapped to each of the n levels in J, so that the histogram of J is approximately flat. (The histogram of J is flatter when n is much smaller than the number of discrete levels in I.) The default value for n is 64.

[J, T] = histeq(I) returns the grayscale transformation that maps gray levels in the image I to gray levels in J.

[gpuarrayJ, gpuarrayT] = histeq(gpuarrayI,___) performs the histogram equalization on a GPU. The input image and the output image are gpuArrays. This syntax requires the Parallel Computing Toolbox™.

newmap = histeq(X, map, hgram) transforms the colormap associated with the indexed image X so that the histogram of the gray component of the indexed image (X,newmap) approximately matches hgram. The histeq function returns the transformed colormap in newmap. length(hgram) must be the same as size(map,1).

newmap = histeq(X, map) transforms the values in the colormap so that the histogram of the gray component of the indexed image X is approximately flat. It returns the transformed colormap in newmap.

[newmap, T] = histeq(X,___) returns the grayscale transformation T that maps the gray component of map to the gray component of newmap.

Code Generation support: Yes.

MATLAB Function Block support: Yes.

Class Support

I can be of class uint8, uint16, int16, single, or double. The output image J has the same class as I. The optional output T is always of class double.

gpuarrayI is a gpuArray of class uint8, uint16, int16, single, or double. The output image gpuarrayJ has the same class as gpuarrayI. The optional output gpuarrayT is always a gpuArray of class double.

X can be of class uint8, single, or double. The output colormap newmap is always of class double.


Enhance the contrast of an intensity image using histogram equalization.

I = imread('tire.tif');
J = histeq(I);
figure, imshow(J)

Display a histogram of the original image.

figure; imhist(I,64)

Compare it to a histogram of the processed image.

figure; imhist(J,64)

This example performs the same histogram equalization on the GPU.

I = gpuArray(imread('tire.tif'));
J = histeq(I);
imshow(I), figure, imshow(J)

More About

collapse all

Code Generation

This function supports the generation of C code using MATLAB® Coder™. Note that if you choose the generic MATLAB Host Computer target platform, the function generates code that uses a precompiled, platform-specific shared library. Use of a shared library preserves performance optimizations but limits the target platforms for which code can be generated. For more information, see Understanding Code Generation with Image Processing Toolbox.

When generating code, histeq does not support indexed images.

MATLAB Function Block

You can use this function in the MATLAB Function Block in Simulink.

When using histeq in the MATLAB Function Block, the input argument N must be a compile-time constant.


When you supply a desired histogram hgram, histeq chooses the grayscale transformation T to minimize


where c0 is the cumulative histogram of A, c1 is the cumulative sum of hgram for all intensities k. This minimization is subject to the constraints that T must be monotonic and c1(T(a)) cannot overshoot c0(a) by more than half the distance between the histogram counts at a. histeq uses the transformation b = T(a) to map the gray levels in X (or the colormap) to their new values.

If you do not specify hgram, histeq creates a flat hgram,

hgram = ones(1,n)*prod(size(A))/n;

and then applies the previous algorithm.

Introduced before R2006a

Was this topic helpful?