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

## 12 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.

Great job, but i have a question.

Why on i and j you used i= 1:size(B,1)-((PadM*2)+1) and j=1:size(B,2)-((PadN*2)+1) instead of use i= 1:size(B,1) and j=1:size(B,2), for the lest elements from the right can participate on the calculation of the probability of density?

Nice man. really good code.

## Enjoyed Reading? Share Your Views