Gabor Feature Vector Algorithm
Show older comments
I have found an algorithm for generate a feature vector of Gabor Filter from one of handwritting text recogntion paper like this sentence :
Subsequently, we divide the 64 × 64 representation into 8 × 8 feature regions, resulting in 64 regions. From each, we extract one value as an element in 512 feature vector (8 × 64).
So, the 64 x 64 is a normalized (resize) image, before convoluted with one of 8 gaborArray Gabor's banks. And the total_bank is 8. And the gaborMag is a convoluted image.
Is this Matlab code could solving an algorithm above?
total_bank = length(gaborArray);
for i = 1:total_bank
subplot(4,2,i)
hasil_gabor{i} = gaborMag(:,:,i); % Convolution between image with each bank Gabor
imshow(gaborMag(:,:,i),[]);
theta = gaborArray(i).Orientation;
lambda = gaborArray(i).Wavelength;
title(sprintf('Orientation=%d, Wavelength=%d',theta,lambda));
featureVector = [];
for a = 1:jumlah_bank
gaborAbs = sum(abs(gaborMag(:,i)), 2); % sum all matrix elements in each rows
gaborAbs = gaborAbs(:);
% Normalized to zero mean and unit variance.
gaborAbs = ((gaborAbs-mean(gaborAbs))/(4.*std(gaborAbs,1))) + 0.5; % feature vector equation from Moftah Elzobi et al
featureVector = [featureVector; gaborAbs];
end
end
From algorithm above, i get right featureVector = 512 (one column). But i am not sure.
Thanks in advance. :)
9 Comments
Walter Roberson
on 20 Jan 2016
I do not see where you split the 64 x 64 into 8 x 8 regions?
Angga Lisdiyanto
on 20 Jan 2016
Edited: Angga Lisdiyanto
on 20 Jan 2016
Walter Roberson
on 20 Jan 2016
Then your code appears to be incorrect. You appear to be convolving the entire 64 x 64 ahead of time, before breaking it up to 8 x 8 regions. The 8 x 8 regions need to be convolved separately.
Angga Lisdiyanto
on 20 Jan 2016
Edited: Angga Lisdiyanto
on 20 Jan 2016
Angga Lisdiyanto
on 20 Jan 2016
Walter Roberson
on 20 Jan 2016
Each 8 x 8 is be convolved separately. The results can differ compared to convolving the whole 64 x 64 at once; in particular the results along each 8 x 8 edge could be different depending on how the convolution handles the outside boundaries. In convolution it is common for the outside to be padded with 0's as if it were the only block that existed; whereas if you did all 64 x 64 at once, the values brought in would be actual values from the other 8 x 8 sub-blocks.
Angga Lisdiyanto
on 20 Jan 2016
Edited: Angga Lisdiyanto
on 20 Jan 2016
Angga Lisdiyanto
on 20 Jan 2016
Edited: Angga Lisdiyanto
on 20 Jan 2016
Angga Lisdiyanto
on 20 Jan 2016
Answers (0)
Categories
Find more on Image Category Classification in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


