# Documentation

### This is machine translation

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

# histeq

Enhance contrast using histogram equalization

## Syntax

`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,___)`

## Description

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

## Examples

Enhance the contrast of an intensity image using histogram equalization.

```I = imread('tire.tif'); J = histeq(I); imshow(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); figure imshow(I), figure, imshow(J)```

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.

### Algorithms

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

`$|{c}_{1}\left(T\left(k\right)\right)-{c}_{0}\left(k\right)|,$`

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.