Lets Learn together... Happy Reading

" Two roads diverged in a wood, and I,
I took the one less traveled by,
And that has made all the difference "-Robert Frost

Recent Posts

Matlab code: Histogram equalization without using histeq function


              It is the re-distribution of gray level values uniformly. Let’s consider a 2 dimensional image which has values ranging between 0 and 255.




MATLAB CODE:

GIm=imread('tire.tif');
numofpixels=size(GIm,1)*size(GIm,2);
figure,imshow(GIm);
title('Original Image');


HIm=uint8(zeros(size(GIm,1),size(GIm,2)));
freq=zeros(256,1);
probf=zeros(256,1);
probc=zeros(256,1);
cum=zeros(256,1);
output=zeros(256,1);
%freq counts the occurrence of each pixel value.
%The probability of each occurrence is calculated by probf.
for i=1:size(GIm,1)
    for j=1:size(GIm,2)
        value=GIm(i,j);
        freq(value+1)=freq(value+1)+1;
        probf(value+1)=freq(value+1)/numofpixels;
    end
end
sum=0;
no_bins=255;
%The cumulative distribution probability is calculated. 
for i=1:size(probf)
   sum=sum+freq(i);
   cum(i)=sum;
   probc(i)=cum(i)/numofpixels;
   output(i)=round(probc(i)*no_bins);
end
for i=1:size(GIm,1)
    for j=1:size(GIm,2)
            HIm(i,j)=output(GIm(i,j)+1);
    end
end
figure,imshow(HIm);
title('Histogram equalization');



             




%The result is shown in the form of a table
figure('Position',get(0,'screensize'));
dat=cell(256,6);
for i=1:256
dat(i,:)={i,freq(i),probf(i),cum(i),probc(i),output(i)};   
end
   columnname =   {'Bin''Histogram''Probability''Cumulative histogram','CDF','Output'};
columnformat = {'numeric''numeric''numeric''numeric''numeric','numeric'};
columneditable =  [false false false false false false];
t = uitable('Units','normalized','Position',...
            [0.1 0.1 0.4 0.9], 'Data', dat,...
            'ColumnName', columnname,...
            'ColumnFormat', columnformat,...
            'ColumnEditable', columneditable,...
            'RowName',[]); 
    subplot(2,2,2); bar(GIm);
    title('Before Histogram equalization');
    subplot(2,2,4); bar(HIm);
    title('After Histogram equalization');




                              

Here is a simple Version of Histogram Equalization MATLAB CODE:

%Read a grayscale Image or a matrix mxn
A=imread('tire.tif');
figure,imshow(A);
%Specify the bin range[0 255]
bin=255;
%Find the histogram of the image.
Val=reshape(A,[],1);
Val=double(Val);
I=hist(Val,0:bin);
%Divide the result by number of pixels
Output=I/numel(A);
%Calculate the Cumlative sum
CSum=cumsum(Output);
%Perform the transformation S=T(R) where S and R in the range [ 0 1]
HIm=CSum(A+1);
%Convert the image into uint8
HIm=uint8(HIm*bin);
figure,imshow(HIm);



                          
                                 
like button Like "IMAGE PROCESSING" page

18 comments:

Anonymous said... Reply to comment

its nice that this space provides output too..and most importantly..the code works!!unlike most of the other sites!
-thank u soo much for this code.

sầu_đông said... Reply to comment

good, very good

cool_images said... Reply to comment

its last part is not working 3rd fig does not plot.ERROR::::bar must be 2 -D;
help me out
Thanx in advance...

raj kumar said... Reply to comment

A graphical representation which shows a visual impression of the distribution of data termed as Histogram . Histograms consists of tabular frequencies which are shown as adjacent rectangles, with an area equal to the frequency of the observations in the interval.

Aqeel Al-Surmi said... Reply to comment

@cool_images

just change the original image to gray-scale value, because the error occur and mention that only 2D

i had change in the end of the code as follows:

GIm1=rgb2gray(GIm);
subplot(2,2,2);
bar(GIm1);

title('Before Histogram equalization');
subplot(2,2,4);
bar(HIm);
title('After Histogram equalization');

Santhosi Sekar said... Reply to comment

Nice.... its very helpful

sumi said... Reply to comment

can i know, what is that mean with 1 and 2 in this code?
numofpixels=size(GIm,1)*size(GIm,2);
thanks.. ^^

Aaron Angel said... Reply to comment

@sumi

it represents the dimensions. For a matrix, 1 represents rows and 2 represents columns.

Cloud said... Reply to comment

This is very nice tutorial here. Can you provide me with the code for CLAHE.

socksau said... Reply to comment

Is there a bit problem with code, because max value of uint8 is 255, then
freq(value+1)=freq(value+1)+1;
cannot apply for the case value = 255. Further more, you set max gray value is 255, it is only right in almost case, not all case.

Aaron Angel said... Reply to comment

@socksau

In matlab, the array range can start from 1. So the actual range 0 to 255 is mapped as 1 to 256.

Maria Kiyani said... Reply to comment

can anybody give me code of face recognition system using k-means clustering algorithm and PCA .

Rohit Ramesh said... Reply to comment

After changing image to grayscale also, the last output is not working.. uitable is showing as unrecognised parameter : units.

manoj said... Reply to comment

@Aaron Angel 1 means rows and 2 means columns of the image

pradeep venkatachalam said... Reply to comment

i really doint understand how the freq funtion works someone care to explain?

Abirami Gunasekaran said... Reply to comment

whether histogram functions can be applied to rgb image or only to gray scale???

kassambe said... Reply to comment

nice, could you generalize median filter to any size of the window?

Kaichung Wong said... Reply to comment

I had the same problem with Rohit Ramesh (April 4, 2013). The 3rd figure shows nothing and the error as below:

Error using uitable
Bad property value found.
Object Name : uitable
Property Name : 'Units'.

Error in uitable (line 52)
thandle = builtin('uitable', varargin{:});

Error in territory7 (line 46)
t = uitable('Units','normalised','Position',...

Enjoyed Reading? Share Your Views

Previous Post Next Post Home
Related Posts Plugin for WordPress, Blogger...
Twitter Bird Gadget Google ping Hypersmash.com