Image Processing Toolbox User's Guide |

Enhance contrast using histogram equalization

**Syntax**

J = histeq(I,hgram) J = histeq(I,n) [J,T] = histeq(I,...) newmap = histeq(X,map,hgram) newmap = histeq(X,map) [newmap,T] = histeq(X,...)

**Description**

`histeq`

enhances the contrast of images by transforming the values in an intensity image, or the values in the colormap of an indexed image, so that the histogram of the output image approximately matches a specified histogram.

`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 intensity image `I`

to gray levels in `J`

.

`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`

.

**Class Support**

For syntaxes that include an intensity image `I`

as input, `I`

can be of class `uint8`

, `uint16`

, `int16`

, `single`

, or `double`

. The output image `J`

has the same class as `I`

.

For syntaxes that include an indexed image `X`

as input, `X`

can be of class `uint8`

,` single`

, or `double`

; the output colormap is always of class `double`

. The optional output `T`

(the gray-level transform) is always of class `double`

..

**Example**

Enhance the contrast of an intensity image using histogram equalization.

Display the resulting histograms.

**Algorithm**

When you supply a desired histogram `hgram`

, `histeq`

chooses the grayscale transformation *T* to minimize

where *c*_{0} is the cumulative histogram of `A`

, *c*_{1} is the cumulative sum of `hgram`

for all intensities *k*. This minimization is subject to the constraints that *T* must be monotonic and *c*_{1}*(T(a))* cannot overshoot *c*_{0}*(a)* by more than half the distance between the histogram counts at *a*. `histeq`

uses this transformation 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`

,

and then applies the previous algorithm.

**See Also**

graythresh | hough |

© 1994-2005 The MathWorks, Inc.