[1422d3]: / functions / functions_Gabor / findBestWaveletsTesting.m

Download this file

205 lines (149 with data), 6.7 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
function [bestWaveletsAll, PCANet] = findBestWaveletsTesting(imagesCell, orient_default, orient_best, PCANet, numImagesToUse, imageSize, fidLogs, param, stepPrint, plotta)
%init
bestWaveletsAll(param.numBestWavelets).filter = [];
%display
fprintf_pers(fidLogs, ['\t\t\t' num2str(numImagesToUse) ' images used for Gabor analysis... \n'])
%--------------------------------------
%Compute parametrized wavelets
%parametrizedWavelets = gaborArrayParametrized(param.sigma, param.wavelength, param.divThetaParametrized);
parametrizedWavelets = gaborArrayParametrized(param.sigma, param.wavelength, deg2rad(orient_default));
%--------------------------------------
%Compute complete multi-scale Gabor filter bank
%fprintf_pers(fidLogs, '\t\tComputing Gabor array... \n')
gaborBank = gaborArrayFromScales(imageSize, deg2rad(unique([orient_default orient_best])), param, plotta);
%init counter for how many times each wavelet is chosen
o_counterAll = zeros(numel(gaborBank), 1);
if plotta
fsfigure
for indf = 1 : param.divThetaParametrized
%sum(real(parametrizedWavelets(indf).filter(:)))
subplot(1,param.divThetaParametrized,indf)
imshow(real(parametrizedWavelets(indf).filter),[])
axis on
axis image
end %for indf
suplabel([num2str(param.divThetaParametrized) ' filters fixed']);
figure,
imhist(real(parametrizedWavelets(indf).filter))
%pause
end %if plotta
%loop on images
parfor j = 1 : numImagesToUse
% for j = 1 : numel(imagesCell)
%get id of current worker
t = getCurrentTask();
%display progress
if mod(j, stepPrint) == 0
fprintf(1, ['\t\tCore ' num2str(t.ID) ': ' num2str(j) ' / ' num2str(numImagesToUse) '\n'])
end %if mod(i, 100) == 0
%get img
im = imagesCell{j};
%test img alternative
%%%%%%%%%%%%%%%%%%%%%%%%%%
%im = loadPreprocessImage('D:\UoT\Projects\Palmprint Gabor tuning\Code\alt\GaborWavelet\images\1_1.jpg', imageSize);
%im = loadPreprocessImage('D:\UoT\Projects\Palmprint Gabor tuning\Code\alt\GaborWavelet\images\test image\Peppers.tiff', imageSize);
%%%%%%%%%%%%%%%%%%%%%%%%%%
%pause
%--------------------------------------
%Compute frequency of Gabor filter bank
%fprintf_pers(fidLogs, '\t\tComputing spectrum of gabor array... \n')
%totFreq = computeFrequencyGaborArray(gaborBank, plotta);
%--------------------------------------
%Perform reference Gabor filtering
%fprintf_pers(fidLogs, '\t\tPerforming reference Gabor filtering... \n')
resF = referenceGaborFilter(gaborBank, im);
%--------------------------------------
%create powerMap for all filters
%fprintf_pers(fidLogs, '\t\tComputing powermaps... \n')
powerMapF = computePowerMaps(resF, gaborBank);
%--------------------------------------
%Sort filter response information
%fprintf_pers(fidLogs, '\t\tSorting filter response information... \n')
[sortRes, sizeRes] = sortFilterResponse(gaborBank, powerMapF);
%--------------------------------------
%Compute most used wavelets
%fprintf_pers(fidLogs, '\t\t\tComputing most used wavelets... \n')
o_counter = getMostUsedWavelets(sortRes, gaborBank, powerMapF, param, sizeRes, plotta);
%increment
o_counterAll = o_counterAll + o_counter;
end %for j = 1 : length(vectorIndexTest)
%display most used filters
if plotta
figure,
bar(1:size(o_counterAll), o_counterAll)
xlabel('Wavelet n.')
ylabel('Perc. of occurence')
title('Most used wavelets');
end %if plotta
%--------------------------------------
%sort most used filters counter
[~, ind_o_counter_All_sort] = sort(o_counterAll, 'descend');
%consider only best wavelets
ind_o_counter_All_sort = ind_o_counter_All_sort(1 : param.numBestWavelets);
bestWavelets = gaborBank(ind_o_counter_All_sort);
%display bestWavelets
if plotta
fsfigure
for indf = 1 : numel(bestWavelets)
subplot(1, numel(bestWavelets),indf)
imshow(bestWavelets(indf).even,[])
axis on
axis image
end %for indf
suplabel([num2str(numel(bestWavelets)) ' filters most used']);
end %if plotta
%--------------------------------------
%assign to global structure
countfilter = 1;
%parametrized
for o = 1 : numel(parametrizedWavelets)
bestWaveletsAll(countfilter).filter = parametrizedWavelets(o).filter;
countfilter = countfilter + 1;
end %for o
%dynamic
for o = 1 : numel(bestWavelets)
bestWaveletsAll(countfilter).filter = complex(bestWavelets(o).even, bestWavelets(o).odd);
countfilter = countfilter + 1;
end %for o
%display
% if plotta
% bestWaveletsCell = squeeze(struct2cell(bestWavelets));
% figure,
% subplot(1,2,1)
% montage(bestWaveletsCell(1,:), 'DisplayRange', [])
% axis on
% axis image
% title('Best wavelets: even');
% subplot(1,2,2)
% montage(bestWaveletsCell(2,:), 'DisplayRange', [])
% title('Best wavelets: odd');
% pause
% end %if plotta
%--------------------------------------
%loop on images, test reconstruct
if 0
for j = 1 : numel(imagesCell)
%get img
im = imagesCell{j};
%Perform reference Gabor filtering
resF = referenceGaborFilter(bestWaveletsAll, im);
%create powerMap for all filters
powerMapF = computePowerMaps(resF, bestWaveletsAll);
%Sort filter response information
[sortRes, sizeRes] = sortFilterResponse(bestWaveletsAll, powerMapF);
%--------------------------------------
%Loop on wavelets - all filters
%fprintf_pers(fidLogs, '\t\t\tReconstructing image with all filters... \n')
% allFiltersIndexes = 1:numel(gaborBank);
%[tmpImage, errV] = reconstructImage(resF, sortRes, gaborBank, powerMapF, allFiltersIndexes, im, imageSize, sizeRes, param, plotta);
%--------------------------------------
%Loop on wavelets - best filters
%fprintf_pers(fidLogs, ['\t\t\tReconstructing image with the best ' num2str(param.numBestWavelets) ' filters... \n'])
[tmpImageBest, errBestV] = reconstructImage(resF, sortRes, bestWaveletsAll, powerMapF, [1 : numel(bestWaveletsAll)], im, imageSize, sizeRes, param, plotta);
pause
end %for j = 1 : numel(imagesCell)
end %if 0
%--------------------------------------
%update number of filters
%assign updated number of filters to PCANet
PCANet.NumFilters(end) = numel(bestWaveletsAll);