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');
To find the histogram of an Image: http://angeljohnsy.blogspot.com/2011/06/histogram-of-image.html
Local histogram equalization of an Image: http://angeljohnsy.blogspot.com/2011/06/local-histogram-equalization.html
Local histogram equalization of an Image: http://angeljohnsy.blogspot.com/2011/06/local-histogram-equalization.html
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);







14 comments:
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.
good, very good
its last part is not working 3rd fig does not plot.ERROR::::bar must be 2 -D;
help me out
Thanx in advance...
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.
@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');
Nice.... its very helpful
can i know, what is that mean with 1 and 2 in this code?
numofpixels=size(GIm,1)*size(GIm,2);
thanks.. ^^
@sumi
it represents the dimensions. For a matrix, 1 represents rows and 2 represents columns.
This is very nice tutorial here. Can you provide me with the code for CLAHE.
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.
@socksau
In matlab, the array range can start from 1. So the actual range 0 to 255 is mapped as 1 to 256.
can anybody give me code of face recognition system using k-means clustering algorithm and PCA .
After changing image to grayscale also, the last output is not working.. uitable is showing as unrecognised parameter : units.
@Aaron Angel 1 means rows and 2 means columns of the image
Enjoyed Reading? Share Your Views