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

Linear Contrast Enhancement

The function to perform the enhancement

The coefficient ‘a’ performs the contrast enhancement while the coefficient ‘b’ is for adjusting the brightness.
Let’s start with an example,
MATLAB CODE:
%READ THE INPUT IMAGE
I = imread('vesuvius.png');

a = 1;
b = 60;

y =  a*double(I) + b;
y =  uint8(y);

%HISTOGRAM OF THE INPUT AND OUTPUT IMAGE
hist_I=imhist(I);
hist_y=imhist(y);

figure,stem([0:255],hist_I);hold on; stem([0:255],hist_y);legend Original Enhanced
figure,subplot(1,2,1),imshow(I);title('Original Image');
       subplot(1,2,2);imshow(y);title('After LCE Enhacement');



EXPLANATION:
The function ‘y’ will give an output where the values of the pixels in the input image will be increased by 60.



The behavior of the histogram of the output image is not changed. It retains the shape of the input histogram and also the information but it is shifted to the right by 60 pixels.
If pixels are subtracted then the histogram will be shifted to the left side and the image will look darker.
The table below represents the pixel bins from 0 to 255 and the number of pixels for each bin value in the input and output image.



The total number of pixels in the input image with the value zero is 20809 after the enhancement i.e the addition of 60 to the zero value , the total number of pixels in the output image with the value 60 is 20809. While the pixel value ‘60’ in the input image has the total number of occurrence 17004 , the output image will have the same number of pixel occurrence at the pixel value 120.



EXAMPLE 2:
MATLAB CODE:
%READ THE INPUT IMAGE
I = imread('vesuvius.png');

a = 1.58;
b = 0;

y =  a*double(I) + b;
y =  uint8(y);

%HISTOGRAM OF THE INPUT AND OUTPUT IMAGE
hist_I=imhist(I);
hist_y=imhist(y);

figure,stem([0:255],hist_I);hold on; stem([0:255],hist_y);legend Original Enhanced
figure,subplot(1,2,1),imshow(I);title('Original Image');
       subplot(1,2,2);imshow(y);title('After LCE Enhacement');







The histogram of the output image has the same values as of the histogram of the input image but stretched or expanded.  The coefficients ‘a’ and ‘b’ can be modified based on the visual analysis.
The minimum value of the input image:  0
The maximum value of the input image: 161
The mean of the input image:  87.86

The minimum value of the output image:  0
The maximum value of the output image: 254
The mean of the output image: 138.84

The result of the output image indicates that the pixel values are spread between 0 and 255.






The coefficient a = 1.58

The bin number 1 is multiplied with 1.58.

NEW VALUE = 2( rounding off)

So the number of occurrence of pixel value 1 is now the number of occurrence of pixel value 2 (MARKED in GREEN)



Similarly, the bin number 3 is multiplied with 1.58

NEW VALUE = round(4.74) = 5

The number of occurrence of pixel value 3 before enhancement is 14805 after multiplying with 1.58, the value 14805 is moved to the bin 5. (MARKED in RED)



EXAMPLE 3:



When the values are normalized between 0 and 1, it will be multiplied by 255 to get the pixel values between 0 and 255.


MATLAB CODE:
I = imread('vesuvius.png');
I = double(I);
y = 255*((I-min(I(:)))/range(I(:)));

y = uint8(y);
I = uint8(I);
%HISTOGRAM OF THE INPUT AND OUTPUT IMAGE
hist_I=imhist(I);
hist_y=imhist(y);

figure,stem([0:255],hist_I);hold on; stem([0:255],hist_y);legend Original Enhanced
figure,subplot(1,2,1),imshow(I);title('Original Image');
       subplot(1,2,2);imshow(y);title('After LCE Enhacement');


Contrast Enhancement for RGB image
MATLAB CODE:
clear all
clc
close all
%READ THE INPUT IMAGE
I = imread('Landsat5.png');

%PREALLOCATE THE OUTPUT IMAGE MATRIX
Oimg = zeros(size(I));

R = I(:,:,1); %RED COMPONENT
G = I(:,:,2); %GREEN COMPONENT
B = I(:,:,3); %BLUE COMPONENT

R_hist = imhist(R);%HISTOGRAM OF THE RED COMPONENT
G_hist = imhist(G);%HISTOGRAM OF THE GREEN COMPONENT
B_hist = imhist(B);%HISTOGRAM OF THE BLUE COMPONENT

figure,stem([0:255],R_hist,'r');hold on; stem([0:255],G_hist,'g');hold on; stem([0:255],B_hist,'b');legend Red Green Blue;title('Original Image');




min(R(:)),max(R(:)),mean(R(:))
min(G(:)),max(G(:)),mean(G(:))
min(B(:)),max(B(:)),mean(B(:))


MIN VALUE
MAX VALUE
MEAN VALUE
RED COMPONENT
0
108
43.00
GREEN COMPONENT
0
121
53.54
BLUE COMPONENT
0
111
39.63



R = double(R);
G = double(G);
B = double(B);

%NORMALIZE THE PIXEL VALUES BETWEEN 0 AND 255
R = uint8(255*((R-min(R(:)))/range(R(:))));
G = uint8(255*((G-min(G(:)))/range(G(:))));
B = uint8(255*((B-min(B(:)))/range(B(:))));




min(R(:)),max(R(:)),mean(R(:))
min(G(:)),max(G(:)),mean(G(:))
min(B(:)),max(B(:)),mean(B(:))






MIN VALUE
MAX VALUE
MEAN VALUE
RED COMPONENT
0
255
101.55
GREEN COMPONENT
0
255
112.84
BLUE COMPONENT
0
255
91.0471


R_hist = imhist(R);%HISTOGRAM OF THE RED COMPONENT
G_hist = imhist(G);%HISTOGRAM OF THE GREEN COMPONENT
B_hist = imhist(B);%HISTOGRAM OF THE BLUE COMPONENT

figure,stem([0:255],R_hist,'r');hold on; stem([0:255],G_hist,'g');hold on; stem([0:255],B_hist,'b');legend Red Green Blue; title('After Enhancement');






Oimg(:,:,1)=R; %ENHANCED RED COMPONENT
Oimg(:,:,2)=G; %ENHANCED GREEN COMPONENT
Oimg(:,:,3)=B; %ENHANCED BLUE COMPONENT

Oimg = uint8(Oimg); %RGB IMAGE AFTER ENHANCEMENT


figure,subplot(1,2,1),imshow(I);title('Original Image');
       subplot(1,2,2);imshow(Oimg);title('After LCE Enhacement');


PIC: USGS/NASA Landsat



EXPLANATION:
The RGB image is read into a matrix. The Red, Green and Blue channels are normalized between 0 and 255 separately.



Also check 'Balance Contrast Enhancement Technique'
like button Like "IMAGE PROCESSING" page

Part 3: Median Filter - RGB Image

MATLAB CODE:

clear all

%READ THE RGB IMAGE
I = imread('peppers.png');

A = imnoise(I,'Salt & pepper',0.1);
figure,imshow(A);title('IMAGE WITH SALT AND PEPPER NOISE');


%DEFINE THE WINDOW SIZE MXN
M=3;
N=3;

%PAD THE MATRIX WITH ZEROS ON ALL SIDES
modifyA=padarray(A,[floor(M/2),floor(N/2)]);

B = zeros([size(A,1) size(A,2)]);
med_indx = round((M*N)/2); %MEDIAN INDEX
for i = 1:size(modifyA,1)-(M-1)
    for j = 1:size(modifyA,2)-(N-1)
       
       
        temp = modifyA(i:i+(M-1),j:j+(N-1),:);
        %RED,GREEN AND BLUE CHANNELS ARE TRAVERSED SEPARATELY
        for k = 1:3

          tmp = temp(:,:,k);
          B(i,j,k) = median(tmp(:));

        end
      
       
    end
end


%CONVERT THE IMAGE TO UINT8 FORMAT.
B = uint8(B);
figure,imshow(B);
title('IMAGE AFTER MEDIAN FILTERING');



EXPLANATION:
·        The image is read into the matrix I.  
·        Salt and pepper noise is added to the image.  Learn howto add 'salt and pepper noise to an image'.
·        Define the window size MxN example: 3x3, 7x7, 5x3
·        Pad the image with zeros on all sides. This is done to perform the filtering on the border pixels. Learn howto pad with zeros using MATLAB built_in function padarray.
·        Median is the middle point of the series. The index that is obtained by dividing the total number of elements in a window by 2 gives the position.

·        A sliding window of size M x N is used on each channel (Red, Green and Blue) separately and the elements in the window are sorted and the middle element from the sorted array is chosen.
like button Like "IMAGE PROCESSING" page

Part 2: 2D Median Filter With Different Window Size

MATLAB CODE:

clear all

%READ AN IMAGE
I = imread('zebra.jpg');
display(size(I));

%CONVERT RGB IMAGE INTO GRAYSCALE
A = rgb2gray(I);

%ADD SALT AND PEPPER NOISE TO THE GRAYSCALE IMAGE
A = imnoise(A,'Salt & pepper',0.1);

figure,imshow(A);title('IMAGE WITH SALT AND PEPPER NOISE');

%DEFINE THE WINDOW SIZE MXN
M=5;
N=5;

%PAD THE MATRIX WITH ZEROS ON ALL SIDES
modifyA=padarray(A,[floor(M/2),floor(N/2)]);
figure,imshow(uint8(modifyA)); title('PADDED WITH ZEROS');

B = zeros([size(A,1) size(A,2)]);
med_indx = round((M*N)/2); %MEDIAN INDEX

for i=1:size(modifyA,1)-(M-1)
    for j=1:size(modifyA,2)-(N-1)
       
       
        temp=modifyA(i:i+(M-1),j:j+(N-1),:);
        tmp_sort = sort(temp(:));%tmp(:) converts 2D matrix to 1D matrix
        B(i,j) = tmp_sort(med_indx);
      
      
       
    end
end


 %CONVERT THE IMAGE TO UINT8 FORMAT.
B=uint8(B);
figure,imshow(B);
title('IMAGE AFTER MEDIAN FILTERING');

EXPLANATION:
·        The image is read into the matrix A.  
·        The image is color matrix that contains Red, Green and Blue channels so ‘rgb2gray()’ command is used to convert RGB image to grayscale.
·        Salt and pepper noise is added to the image.  Learn how to add 'salt and pepper noise to an image'.
·        Define the window size MxN example: 3x3, 7x7, 5x3
·        Pad the image with zeros on all sides. This is done to perform the filtering on the border pixels. Learn howto pad with zeros using MATLAB built_in function padarray.
·        Median is the middle point of the series. The index that is obtained by dividing the total number of elements in a window by 2 gives the position.
·        A sliding window of size M x N is used and the elements in the window are sorted and the middle element from the sorted array is chosen.





EXPLANATION:

·        The image filtered with 3x3 window still contains salt and pepper noise but the edges are still sharp.
·        The image filtered with 5x5 window  contains less noise compared to 3x3 window filter and edges are smoothed a bit
·        The image filtered with 7x7 window is free of noise but the edges are smoothed to certain extent.
like button Like "IMAGE PROCESSING" page
Previous Post Next Post Home
Google ping Hypersmash.com