0001
0002
0003
0004 clear all; close all;
0005 disp('===============> Learning the active basis model from positive training images');
0006
0007 load ../template_params
0008
0009
0010
0011 numImage = 1;
0012 I = cell(numImage, 1);
0013 sizex = 63; sizey = 63;
0014 center = 32; a = 22; b = 10;
0015 I0 = single(zeros(sizex, sizey));
0016 for x = 1:sizex
0017 for y = 1:sizey
0018 if (((x-center)/a)^2+((y-center)/b)^2<1.)
0019 I0(x, y) = single(1.);
0020 end
0021 end
0022 end
0023 I{1} = I0+0.;
0024
0025 allSizex = zeros(1, numImage, 'single')+sizex;
0026 allSizey = zeros(1, numImage, 'single')+sizey;
0027
0028
0029 s = 4;
0030 storeName = ['../result/naturalStat' num2str(s-1)];
0031 load(storeName);
0032 numElement = 14;
0033 halfFilterSize = ( size(GaborFilter{(s-1)*nGaborOri+1},1) - 1 ) / 2;
0034 disp(['start filtering training images at Gabor length ' num2str(2*halfFilterSize+1)]); tic
0035
0036 selectedOrient = zeros(numElement, 1, 'single');
0037 selectedx = zeros(numElement, 1, 'single');
0038 selectedy = zeros(numElement, 1, 'single');
0039 selectedlambda = zeros(numElement, 1, 'single');
0040 selectedLogZ = zeros(numElement, 1, 'single');
0041 symbolicTemplate = zeros(sizex, sizey, 'single');
0042
0043
0044
0045 SUM1map = applyfilterMultiScale(I, GaborFilter((s-1)*nGaborOri+(1:nGaborOri)), nGaborOri);
0046 disp(['filtering time: ' num2str(toc) ' seconds']);
0047
0048
0049 locationShiftLimit = 0;
0050 orientShiftLimit = 0;
0051 Csigmoid(numImage, allSizex, allSizey, nGaborOri, GaborSaturation, SUM1map);
0052 MAX1map = cell(numImage, nGaborOri);
0053 subsampleM1 = 1;
0054 trackMap = cell(numImage, nGaborOri);
0055 for img = 1:numImage
0056 for orient = 1:nGaborOri
0057 MAX1map{img, orient} = single(zeros(floor(sizex/subsampleM1), floor(sizey/subsampleM1)));
0058 trackMap{img, orient} = single(zeros(floor(sizex/subsampleM1), floor(sizey/subsampleM1)));
0059 end
0060 end
0061 disp(['start maxing training images at Gabor length ' num2str(2*halfFilterSize+1)]); tic
0062 CgetMAX1track(numImage, allSizex, allSizey, nGaborOri, locationShiftLimit, orientShiftLimit, subsampleM1, ...
0063 SUM1map, MAX1map, trackMap);
0064 disp(['maxing time: ' num2str(toc) ' seconds']);
0065
0066
0067
0068 learningSampleSize = 1;
0069 deformedTemplate = cell(1, learningSampleSize);
0070 for img = 1 : learningSampleSize
0071 deformedTemplate{img} = single(zeros(sizex, sizey));
0072 end
0073 SUM2score = zeros(learningSampleSize, 1);
0074 disp(['start mex-C learning of template at Gabor length ' num2str(2*halfFilterSize+1)]); tic
0075 CsharedSketch(nGaborOri, locationShiftLimit, orientShiftLimit, GaborSaturation, subsampleM1, ...
0076 numElement, learningSampleSize, sizex, sizey, ...
0077 SUM1map, MAX1map, trackMap, ...
0078 halfFilterSize, CorrGabor((s-1)*nGaborOri + (1:nGaborOri), (s-1)*nGaborOri + (1:nGaborOri)),...
0079 GaborSymbol( (s-1)*nGaborOri + (1:nGaborOri) ), ...
0080 numStoredPoint, (storedLambda), (storedExpectation), (storedLogZ), ...
0081 selectedOrient, selectedx, selectedy, selectedlambda, selectedLogZ, SUM2score, ...
0082 symbolicTemplate, deformedTemplate);
0083
0084 selectedScale = ones(numElement,1)*(s-1);
0085 S2Template{1} = struct('numElement',numElement,'selectedOrient',selectedOrient,...
0086 'selectedx',selectedx,'selectedy',selectedy,'selectedScale',selectedScale,...
0087 'selectedlambda',selectedlambda,'selectedLogZ',selectedLogZ,...
0088 'sizex',sizex,'sizey',sizey,'symbolicTemplate',symbolicTemplate,...
0089 'subsampleM1',subsampleM1);
0090
0091
0092
0093 im = imread('angle1.png');
0094 if size(im,3) == 3
0095 im = rgb2gray(im);
0096 end
0097 im = single(imresize(im,0.15));
0098 im(im < 250) = 0;
0099 im(im >= 250) = 1;
0100 I{1} = im;
0101 [sizex sizey] = size(im);
0102 allSizex = single(sizex); allSizey = single(sizey);
0103 numElement = 14;
0104 halfFilterSize = ( size(GaborFilter{(s-1)*nGaborOri+1},1) - 1 ) / 2;
0105 disp(['start filtering training images at Gabor length ' num2str(2*halfFilterSize+1)]); tic
0106
0107 selectedOrient = zeros(numElement, 1, 'single');
0108 selectedx = zeros(numElement, 1, 'single');
0109 selectedy = zeros(numElement, 1, 'single');
0110 selectedlambda = zeros(numElement, 1, 'single');
0111 selectedLogZ = zeros(numElement, 1, 'single');
0112 symbolicTemplate = zeros(sizex, sizey, 'single');
0113
0114
0115 SUM1map = applyfilterMultiScale(I, GaborFilter((s-1)*nGaborOri+(1:nGaborOri)), nGaborOri);
0116 disp(['filtering time: ' num2str(toc) ' seconds']);
0117
0118
0119 locationShiftLimit = 0;
0120 orientShiftLimit = 0;
0121 Csigmoid(numImage, allSizex, allSizey, nGaborOri, GaborSaturation, SUM1map);
0122 MAX1map = cell(numImage, nGaborOri);
0123 subsampleM1 = 1;
0124 trackMap = cell(numImage, nGaborOri);
0125 for img = 1:numImage
0126 for orient = 1:nGaborOri
0127 MAX1map{img, orient} = single(zeros(floor(sizex/subsampleM1), floor(sizey/subsampleM1)));
0128 trackMap{img, orient} = single(zeros(floor(sizex/subsampleM1), floor(sizey/subsampleM1)));
0129 end
0130 end
0131 disp(['start maxing training images at Gabor length ' num2str(2*halfFilterSize+1)]); tic
0132 CgetMAX1track(numImage, allSizex, allSizey, nGaborOri, locationShiftLimit, orientShiftLimit, subsampleM1, ...
0133 SUM1map, MAX1map, trackMap);
0134 disp(['maxing time: ' num2str(toc) ' seconds']);
0135
0136
0137
0138 learningSampleSize = 1;
0139 deformedTemplate = cell(1, learningSampleSize);
0140 for img = 1 : learningSampleSize
0141 deformedTemplate{img} = single(zeros(sizex, sizey));
0142 end
0143 SUM2score = zeros(learningSampleSize, 1);
0144 disp(['start mex-C learning of template at Gabor length ' num2str(2*halfFilterSize+1)]); tic
0145 CsharedSketch(nGaborOri, locationShiftLimit, orientShiftLimit, GaborSaturation, subsampleM1, ...
0146 numElement, learningSampleSize, sizex, sizey, ...
0147 SUM1map, MAX1map, trackMap, ...
0148 halfFilterSize, CorrGabor((s-1)*nGaborOri + (1:nGaborOri), (s-1)*nGaborOri + (1:nGaborOri)),...
0149 GaborSymbol( (s-1)*nGaborOri + (1:nGaborOri) ), ...
0150 numStoredPoint, (storedLambda), (storedExpectation), (storedLogZ), ...
0151 selectedOrient, selectedx, selectedy, selectedlambda, selectedLogZ, SUM2score, ...
0152 symbolicTemplate, deformedTemplate);
0153
0154 selectedScale = ones(numElement,1)*(s-1);
0155
0156 S2Template{2} = struct('numElement',numElement,'selectedOrient',selectedOrient,...
0157 'selectedx',selectedx,'selectedy',selectedy,'selectedScale',selectedScale,...
0158 'selectedlambda',selectedlambda,'selectedLogZ',selectedLogZ,...
0159 'sizex',sizex,'sizey',sizey,'symbolicTemplate',symbolicTemplate,...
0160 'subsampleM1',subsampleM1);
0161
0162
0163 selectedx = single([0 0 0 0 0 0 15 15 15 15 15 15]);
0164 selectedy = single([0 10 20 30 40 50 0 10 20 30 40 50]-30);
0165 selectedOrient = single([0 0 0 0 0 0 0 0 0 0 0 0]);
0166
0167 selectedScale = ones(numElement,1)*(s-1+1);
0168 numElement = length(selectedx);
0169 selectedlambda = 0.6*ones(numElement, 1, 'single');
0170 selectedLogZ = 1.2*ones(numElement, 1, 'single');
0171 sym = displayTemplate( ...
0172 selectedx,selectedy,selectedOrient, selectedScale, ones(numElement,1),...
0173 GaborSymbol,nGaborOri,subsampleM1);
0174 S2Template{3} = struct('numElement',numElement,'selectedOrient',selectedOrient,...
0175 'selectedx',selectedx,'selectedy',selectedy,'selectedScale',selectedScale,...
0176 'selectedlambda',selectedlambda,'selectedLogZ',selectedLogZ,...
0177 'sizex',sizex,'sizey',sizey,'symbolicTemplate',sym,...
0178 'subsampleM1',subsampleM1);
0179
0180
0181 disp(['mex-C learning time: ' num2str(toc) ' seconds']);
0182 templateName = ['../result/learnedS2Template'];
0183 save(templateName, 'S2Template');
0184
0185