--- a +++ b/functions/functions_Gabor/findBestWaveletsTesting.m @@ -0,0 +1,204 @@ +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); + + + +