The process of adjusting intensity values can be done automatically using
histogram equalization. Histogram equalization involves
transforming the intensity values so that the histogram of the output image
approximately matches a specified histogram. By default, the histogram equalization
function, histeq
, tries to match a flat histogram
with 64 bins, but you can specify a different histogram instead.
Notice how this curve reflects the histograms in the previous figure, with the input values mostly between 0.3 and 0.6, while the output values are distributed evenly between 0 and 1.
This example shows how to use histogram equalization to adjust the contrast of a grayscale image. The original image has low contrast, with most pixel values in the middle of the intensity range. histeq
produces an output image with pixel values evenly distributed throughout the range.
Read an image into the workspace.
I = imread('pout.tif');
Display the image and its histogram.
figure subplot(1,2,1) imshow(I) subplot(1,2,2) imhist(I,64)
Adjust the contrast using histogram equalization. In this example, the histogram equalization function, histeq
, tries to match a flat histogram with 64 bins, which is the default behavior. You can specify a different histogram instead.
J = histeq(I);
Display the contrast-adjusted image and its new histogram.
figure subplot(1,2,1) imshow(J) subplot(1,2,2) imhist(J,64)
This example shows how to plot the transformation curve for histogram equalization. histeq
can return a 1-by-256 vector that shows, for each possible input value, the resulting output value. (The values in this vector are in the range [0,1], regardless of the class of the input image.) You can plot this data to get the transformation curve.
Read image into the workspace.
I = imread('pout.tif');
Adjust the contrast using histogram equalization, using the histeq
function. Specify the gray scale transformation return value, T
, which is a vector that maps graylevels in the intensity image I
to gray levels in J
.
[J,T] = histeq(I);
Plot the transformation curve. Notice how this curve reflects the histograms in the previous figure, with the input values mostly between 0.3 and 0.6, while the output values are distributed evenly between 0 and 1.
figure plot((0:255)/255,T);