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

14 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

Enjoyed Reading? Share Your Views

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