# Histograms and contrast

In this section, we are going to learn how to manipulate the contrast and histogram of images in MATLAB.

## Intensity transformations

These transformations act over a unique pixel of the image, modifying its intensity value:

`g = imadjust(f, [low_in high_in], [low_out high_out], gamma)`

The intensity of the pixels is changed according to the plots below, which depend on the value of `gamma`

. If `gamma`

is ommited, it takes a default value of `1`

. If `high_out`

is lower than `low_out`

, the exit intensity will be inverted with respect to the original image.

For example, this:

`g = imadjust(f, [0.5 0.75], [0 1])`

produces:

## Logaritmic transformations

It is also possible to make a **logaritmic transformation**:

`g = c * log(1 + double(f))`

where `c`

is an arbitrary constant. This transformation compresses the dynamic range of an image, and its shape is similar to the gamma curve.

Since the result is going to be in a wide range, it is convenient to reduce it in the following way:

`gs = im2uint8(mat2gray(g))`

The command `mat2gray()`

reduces the scale to values between [0, 1], and the command `im2uint8()`

adapts them to a representation of [0, 255].

## Contrast-Stretching

Finally, the technique of **Contrast-Stretching** compresses the intensity values lower than `m`

into darker values, and values larger than `m`

into lighter values.

`g = 1./(1 + (m./ (double(f) + eps) ).^E)`

`E`

controls the slope of the function and `m`

is the mid-line where you want to switch from dark values to light values, `eps`

is a MATLAB constant that represents the distance between 1.0 and the next largest number that can be represented in double-precision floating point. In this equation it is used to prevent division by zero in the event that the image has any zero valued pixels.

## Histogram processing

To create the histogram of an image in MATLAB:

`h = imhist(f,b)`

where `f`

is the image and `b`

is the number of bins used to form the histogram. If `b`

is not specified, 256 is used by default.

## Histogram equalizing

To equalize a histogram:

`h = histeq(f,nlev)`

where `f`

is the image and `nlev`

is the number of bins for the output image. If `nlev`

is lower than the original number of levels of gray, `histeq`

will try to distribute the levels so that you end up with a flat histogram. By default we choose 256.

## Local adaptations

To make a local adaptation of the histogram of an image:

`g = histeq(f,hspec)`

where `f`

is the image and `hspec`

is the histogram to which we want to adapt the histogram of our image.

You can practice these concepts using `snippet02`

.