For every pixel, based on the neighbor hood value the histogram equalization is done. Here I used 3 by 3 window matrix for explanation. By changing the window matrix size, the histogram equalization can be enhanced. By changing the values of M and N the window size can be changed in the code given below.
MATLAB CODE:
A=imread('tire.tif');
figure,imshow(A);
Img=A;
%WINDOW SIZE
M=10;
N=20;
mid_val=round((M*N)/2);
%FIND THE NUMBER OF ROWS AND COLUMNS TO BE PADDED WITH ZERO
in=0;
for i=1:M
for j=1:N
in=in+1;
if(in==mid_val)
PadM=i-1;
PadN=j-1;
break;
end
end
end
%PADDING THE IMAGE WITH ZERO ON ALL SIDES
B=padarray(A,[PadM,PadN]);
for i= 1:size(B,1)-((PadM*2)+1)
for j=1:size(B,2)-((PadN*2)+1)
cdf=zeros(256,1);
inc=1;
for x=1:M
for y=1:N
%FIND THE MIDDLE ELEMENT IN THE WINDOW
if(inc==mid_val)
ele=B(i+x-1,j+y-1)+1;
end
pos=B(i+x-1,j+y-1)+1;
cdf(pos)=cdf(pos)+1;
inc=inc+1;
end
end
%COMPUTE THE CDF FOR THE VALUES IN THE WINDOW
for l=2:256
cdf(l)=cdf(l)+cdf(l-1);
end
Img(i,j)=round(cdf(ele)/(M*N)*255);
end
end
figure,imshow(Img);
figure,
subplot(2,1,1);title('Before Local Histogram Equalization'); imhist(A);
subplot(2,1,2);title('After Local Histogram Equalization'); imhist(Img);
![]() |
| After Local Histogram Equalization |
http://angeljohnsy.blogspot.com/2011/04/matlab-code-histogram-equalization.html






10 comments:
How can this code be modified to perhaps have a window of 7x7
How can this code be modified to have another "window" other than 3x3?
@Anonymous
I have modified the code so that you can change the window size of your convenience.
@Aaron Angel
if i have an image of size 112X92 and i want to apply histogram based image processing what appropriate size of window should i give??
if i have an image of size 112X92 an i want to apply histogram based image processing
what appropriate window size should i give?
@rushabh
Use a large window with mxn values in odd number.
SALAM...can anyone plz help me on MATLAB Code: Global Histogram Equalization on this page..i too need it..plz help me as early as u can..lotttt of thanxxx
@kumail abbas
Check this link
http://angeljohnsy.blogspot.com/2011/04/matlab-code-histogram-equalization.html
how can this code be extended to oriented local histogram equalisation
sir,
please help me
i m providing you some data
OLHE is similar to local histogram
equalization (LHE), but it captures the orientation of edges
while LHE does not. We begin with a brief review on LHE. For
each pixel on an image, we perform the histogram equalization
on the local w -by- h window centering on this pixel using
f ( x ) = (round(cd f ( x )) − min(cd f))*(L-1)/(w · h − cd f)
min
where x is the pixel intensity value, cd f ( x ) is the cumulative
distribution function of the histogram of the pixel intensities in
the w -by- h window, cd f
min is the minimum intensity in this
window, andL is the desired number of output gray levels.
Typically a square window is used, and we definek ≡ w = h .
We call the center of the k -by- k window the anchor . For LHE,
the anchor point is the pixel to be processed itself. For thewhole image, each pixel repeats the above operation and uses
f ( x ) to get its new intensity value. Fig. 1 illustrates LHE.
We define the generalized LHE operator as
L
ξ,η
k
( I W ∗ H
) = I
W ∗ H
(2)
where ξ,η is the relative position of the anchor point to
the pixel to be processed, I W ∗ H
is the input image whose
dimension is W -by- H ,andI
W ∗ H
is the histogram-equalized
image with the same dimension. The typical LHE which uses
the k -by- k local window can be denoted as L
0 , 0
k
, since the
anchor point is exactly the pixel to be processed itself.
If the pixel to be processed is brighter than all the neigh-boring pixels around it, it will have a large intensity value
after the local histogram equalization, and vice versa. We can
make LHE ‘oriented’ by changing anchor positions. Fig. 2
shows nine LHE operators using 3-by-3 windows. The eight
operators with { ξ,η } other than{ 0 , 0 } are ‘oriented’, and they
are dubbed as the Oriented Local Histogram Equalization
operators (OLHE operators) in this paper. The following
gives the formal definition of the OLHE operators:
O
k
≡ L
(
( k − 1 )
2
,
− ( k − 1 )
2
)
k
, O
↓
k
≡ L
( 0 ,
− ( k − 1 )
2
)
k
,
O
k
≡ L
(
− ( k − 1 )
2
,
− ( k − 1 )
2
)
k
, O
−→
k
≡ L
(
( k − 1 )
2
, 0 )
k
,
O
←−
k
≡ L
(
− ( k − 1 )
2
, 0 )
k
, O
k
≡ L
(
( k − 1 )
2
,
( k − 1 )
2
)
k
,
O
↑
k
≡ L
( 0 ,
( k − 1 )
2
)
k
, O
k
≡ L
(
− ( k − 1 )
2
,
( k − 1 )
2
)
k
(3)
where k is an odd number. Note that according to our
definition, there will always be exactly eight OLHE opera-tors no matter what the value of k is. Given an image I ,
OLHE produces 8 images, which areO
k
( I ) , O
↓
k
( I ) , O
k
( I ) ,
O
−→
k
( I ) , O
k
( I ) , O
←−
k
( I ) O
↑
k
( I ) and O
k
( I ) . The 8 images
are referred to as the OLHE images.
hey can any one please help me with code for enhancement of an image of a finger because I have to extract the fingerprint from it but cant get past binzrization cz the change intensity of the pattern in image is very low so it just gives me a black screen please help.
Enjoyed Reading? Share Your Views