## HISTEQ normalization range not clear

### Jurgen (view profile)

on 18 Nov 2012

When I tried to equalize an image using histeq I got an unexpected result. The original has values in the range 0-199 and the output has a range of 153-255, I was hoping for more contrast. So I wrote a few lines of code myself, to see if I could reproduce the results. If I apply 'faulty' normalization to the cumulative histogram of the original I got similar, but not identical, results. Leading me to believe histeq.m does not normalize properly.

Or am I doing something wrong? Heres the code to reproduce it:

```im = imread('pout','tif'); %or cameraman if you like
% get original histogram:
graycount = imhist(im);
% Calculate CDF & Normalize:
graymap   = cumsum(graycount)/sum(graycount);
graymap   = uint8(graymap*255/max(graymap));
% Apply CDF as LUT & Get new histogram:
imEQ      = graymap(im+1);
EQcount   = imhist(imEQ);
% Same using histeq():
imhisteq  = histeq(im,256);
histeqcount = imhist(histeq(im,256));
```

Then test for equality with isequal and some figures:

```if(~isequal(histeqcount,EQcount))
disp('Histeq does something else!!')
end
figure;
subplot(1,2,1);stem(histeqcount);title('hist. Histeq im');
subplot(1,2,2);stem(cumsum(histeqcount));title('cum. hist. Histeq im');
figure;
subplot(1,2,1);stem(EQcount);title('manual hist. EQ im');
subplot(1,2,2);stem(cumsum(EQcount));title('manual cum. hist. EQ im');
figure;
hist(EQcount-histeqcount,100);title('Difference histeq and manual histograms')
figure;        subplot(2,2,1);imshow(histeq(im,256));subplot(2,2,3);imshow(vec2mat(histeqcount,20));       subplot(2,2,2);imshow(graymap(im+1));subplot(2,2,4);imshow(vec2mat(EQcount,20))
```

Very similar images, I think histeq normalized it differently but why? Also a better result is gotten if normalized CDF to 0-1:

```graymap = cumsum(graycount)/sum(graycount); %raw CDF
% Using built-in functions:
graymap = im2uint8(mat2gray(graymap));
% Or explicitly:
graymap = uint8((graymap -min(graymap))*255/(max(graymap)-min(graymap)));
```

## Products

No products are associated with this question.

#### Join the 15-year community celebration.

Play games and win prizes!

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi