Histogram
Equalization can be considered as redistribution of the intensity of the image.
Color histogram equalization can be achieved by converting a color image into
HSV/HSI image and enhancing the Intensity while preserving hue and saturation
components.
However, performing histogram equalization on components of R,G and
B independently will not enhance the
image. At the end of this post, check the histogram of before and after histogram equalization of an
image which is obtained by performing histogram equalization on the
components(R,G and B) independently.
Steps
to be performed:
1. Convert
RGB image into HSI Image.
https://www.imageeprocessing.com/2013/05/converting-rgb-image-to-hsi.html
https://www.imageeprocessing.com/2013/05/converting-rgb-image-to-hsi.html
2. Obtain
the ‘Intensity Matrix’ from the HSI Image matrix
3. Perform
Histogram Equalization on the intensity Matrix
https://www.imageeprocessing.com/2011/04/matlab-code-histogram-equalization.html
https://www.imageeprocessing.com/2011/04/matlab-code-histogram-equalization.html
4. Update
the Intensity Matrix from the HSI Image matrix with the histogram equalized
Intensity matrix
5. Convert
HSI Image back to RGB Image
https://www.imageeprocessing.com/2013/06/convert-hsi-image-to-rgb-image.html
https://www.imageeprocessing.com/2013/06/convert-hsi-image-to-rgb-image.html
MATLAB CODE:
%COLOR HISTOGRAM
EQUALIZATION
%READ THE INPUT IMAGE
I = imread('football.jpg');
%CONVERT THE RGB IMAGE INTO
HSV IMAGE FORMAT
HSV = rgb2hsv(I);
%PERFORM HISTOGRAM
EQUALIZATION ON INTENSITY COMPONENT
Heq = histeq(HSV(:,:,3));
HSV_mod = HSV;
HSV_mod(:,:,3) = Heq;
RGB = hsv2rgb(HSV_mod);
figure,subplot(1,2,1),imshow(I);title('Before
Histogram Equalization');
subplot(1,2,2),imshow(RGB);title('After
Histogram Equalization');
EXPLANATION:
RGB image matrix is converted into HSI(Hue
,Saturation and Intensity) format and histogram equalization is applied only on
the Intensity matrix . The Hue and Saturation matrix remains the same. The updated
HSI image matrix is converted back to RGB image matrix.
%DISPLAY THE HISTOGRAM OF
THE ORIGINAL AND THE EQUALIZED IMAGE
HIST_IN = zeros([256 3]);
HIST_OUT = zeros([256 3]);
%http://angeljohnsy.blogspot.com/2011/06/histogram-of-image.html
%HISTOGRAM OF THE RED,GREEN
AND BLUE COMPONENTS
HIST_IN(:,1) =
imhist(I(:,:,1),256); %RED
HIST_IN(:,2) =
imhist(I(:,:,2),256); %GREEN
HIST_IN(:,3) =
imhist(I(:,:,3),256); %BLUE
HIST_OUT(:,1) =
imhist(RGB(:,:,1),256); %RED
HIST_OUT(:,2) =
imhist(RGB(:,:,2),256); %GREEN
HIST_OUT(:,3) =
imhist(RGB(:,:,3),256); %BLUE
mymap=[1 0 0; 0.2 1 0; 0 0.2 1];
figure,subplot(1,2,1),bar(HIST_IN);colormap(mymap);legend('RED CHANNEL','GREEN
CHANNEL','BLUE CHANNEL');title('Before Applying Histogram Equalization');
subplot(1,2,2),bar(HIST_OUT);colormap(mymap);legend('RED CHANNEL','GREEN
CHANNEL','BLUE CHANNEL');title('After Applying Histogram
Equalization');
EXPLANATION:
Obtain the histogram of each component (Red,Green
and Blue) independently.
Define the colormap ‘mymap’ with three colors namely
Red, Green and Blue.
Display the histograms of the components before and
after histogram equalization.
NOTE:
Histogram of the above image by processing the
components independently gives bad result.