In this post, I will discuss the Haar wavelet analysis (wavelet transform) in image processing.

Applications of Haar wavelet transform in image processing are Feature extraction, Texture analysis, Image compression etc.

- Wavelet is time frequency resolutions analysis.
- As shown in above figure.1 its have the information of different time frequencies of signal.
- Its like applying a comb of filters bands in signal they are called levels. First we apply full frequency band and have no knowledge of time.
- Apply filter which have half bandwidth of signal lose some frequency information but have some knowledge of time resolution called first level decomposition.
- Further reduce the filter bandwidth will be second level decomposition.

Haar wavelet is made of two filters one is low pass filter and second high pass filter.

**Coefficients of Low pass filter = [0.707, 0.707]**

**Coefficients of High pass filter = [-0.707, 0.707]**

- Figure .3 shows the block diagram of first level decomposition.
- I is image of size m , n. We take the image column vectors (1d) and apply the low pass filter and high pass filter.
- Down sample the output and reshape the image I1 of size m, n/2 (size is n/2 because we down sampled the columns by 2).
- Apply low and high pass filter in row wise in image I1 again down sample the output and reshape the image (m/2,n/2).

- Figure. 5 shows the result of haar wavelet decomposition results at first level.
- LL filter output will proceeds for next level decomposition. As its contains most information of input image and looks almost same at down sampled resolution.
- HH, LH and HL will have texture information in vertical, horizontal and ramp directions. HH, LH and HL are called haar features.
- We can further decompose the LL image into LL1, LH1, HL1 and HH1 images.

MATLAB provide Wavelet Toolbox GUI to perform the wavelet analysis.

Type **wevemenu** in command window of MATLAB.

%%%%%%Code Start %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [LL, LH, HL, HH] = haar_wave(image_in)

%% function haar_wave calculate the haar wave decomposition of given imput image

%% Image in :- input gray level image

%% LL :- Low Low band output image

%% LH :- Low High band output image

%% HL :- High Low band output image

%% HH :- High High band output image

image_in = im2double(image_in);

filter_L = [.707, .707];

filter_H = [-.707, .707];

[row, col] = size(image_in);

image_vector = image_in(:);

%% apply low pass filter in one d image column wise image

image_low_pass_1D = filter(filter_L,1,image_vector);

image_high_pass_1D = filter(filter_H,1,image_vector);

% Down sample the image low and high pass image.

temp = 1;

Dimage_low_pass_1D = 0;

Dimage_high_pass_1D = 0;

for i = 1:2:length(image_low_pass_1D)

Dimage_low_pass_1D(temp) = image_low_pass_1D(i);

Dimage_high_pass_1D(temp) = image_high_pass_1D(i);

temp = temp+1;

end

%% reshape the image in 2 D, size will be row/2 , col

Dimage_low_pass = reshape(Dimage_low_pass_1D,round(row/2), col)’;

Dimage_high_pass = reshape(Dimage_high_pass_1D, round(row/2),col)’;

%% conver the image in 1 D but in column vector, I transpose Dimage_low_paas image above.

Dimage_low_pass_1D = Dimage_low_pass(:);

Dimage_high_pass_1D = Dimage_high_pass(:);

LL_1D = filter(filter_L,1,Dimage_low_pass_1D);

LH_1D = filter(filter_H,1,Dimage_low_pass_1D);

HL_1D = filter(filter_L,1,Dimage_high_pass_1D);

HH_1D = filter(filter_H,1,Dimage_high_pass_1D);

%Down sample the all 1 _d vector images

temp = 1;

DLL_1D = 0;

DLH_1D = 0;

DHL_1D = 0;

DHH_1D = 0;

for i = 1:2:length(LL_1D)

DLL_1D(temp) = LL_1D(i);

DLH_1D(temp) = LH_1D(i);

DHL_1D(temp) = HL_1D(i);

DHH_1D(temp) = HH_1D(i);

temp = temp+1;

end

%% reshape the images in size row/2 and clo/2

LL = reshape(DLL_1D, round(col/2), round(row/2))’;

LH = reshape(DLH_1D, round(col/2), round(row/2))’;

HL = reshape(DHL_1D, round(col/2), round(row/2))’;

HH = reshape(DHH_1D, round(col/2), round(row/2))’;

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% call the haar wavelet function and check the result

clc % clear the screen

clear all % clear all variables

close all % close all MATLAB windows

%% read Image

% set path to read image from system

ImagePath = ‘D:\DSUsers\uidp6927\image_processingCode\lena.jpg’;

img_RGB = imread(ImagePath); % read image from path

img_RGB = im2double(img_RGB); % Convert image to double precision

img_gray = rgb2gray(img_RGB); % convert image to gray

% first level decomposition

[LL, LH, HL, HH] = haar_wave(img_gray);

% second level decomposition

[LL1, LH1, HL1, HH1] = haar_wave(LL);

%% Draw all image

figure, imshow(img_gray);

figure,

subplot(2,2,1), imshow(LL,[])

title(‘LL haar wave image’)

subplot(2,2,2), imshow(LH,[])

title(‘LH haar wave image’)

subplot(2,2,3), imshow(HL,[])

title(‘HL haar wave image’)

subplot(2,2,4), imshow(HH,[])

title(‘HH haar wave image’)

figure,

subplot(2,2,1), imshow(LL1,[])

title(‘LL1 haar wave image’)

subplot(2,2,2), imshow(LH1,[])

title(‘LH1 haar wave image’)

subplot(2,2,3), imshow(HL1,[])

title(‘HL1 haar wave image’)

subplot(2,2,4), imshow(HH1,[])

title(‘HH1 haar wave image’)

%%%%%%%%%%%%%%%%%Code End %%%%%%%%%%%%%%%%%%%%%%%%%%%%

Happy Learning

Cheers