123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- function boxes = detectWithGivenFeatures(pyraFeats,model,thresh)
- %function boxes = detectWithGivenFeatures(pyraFeats,model,thresh)
- %
- % BRIEF:
- % Detect object in images by searching for large model responses in
- % terms of convolution scores
- %
- % Pretty much the same as the original code of who, only differs in
- % handing over precomputed features.
- % Additionally, no hallucinated levels are deleted.
- %
- % author: Alexander Freytag
- % date: 26-02-2014 (dd-mm-yyyy)
- levels = 1:length(pyraFeats.feat);
- %pre-allocate some memory (assume not more then 10k boxes in advance)
- boxes = zeros(10000,5);
- myDetectorFilter = {model.w};
- % padding of image borders
- padx = pyraFeats.padx;
- pady = pyraFeats.pady;
-
- sizx = size(model.w,2);
- sizy = size(model.w,1);
- cnt = 0;
- for l = levels,
- % get features of current scale
- scale = pyraFeats.scale(l);
-
- % do the actual convolution
- if ( ndims ( myDetectorFilter{1} ) > 2 )
- resp = fconv3D( pyraFeats.feat{l}, myDetectorFilter, 1,1);
- else
- resp = fconv2D( pyraFeats.feat{l}, myDetectorFilter, 1,1);
- end
-
- % correction of data structure
- resp = resp{1};
-
- % only accept scores over thresh
- [y,x] = find(resp >= thresh);
-
- if ( ~isempty(x) )
- I = (x-1)*size(resp,1)+y;
- % convert responses to original image coordinates
- x1 = (x-1-padx)*scale + 1;
- y1 = (y-1-pady)*scale + 1;
- x2 = x1 + sizx*scale - 1;
- y2 = y1 + sizy*scale - 1;
- i = cnt+1:cnt+length(I);
- % store corners of box + score
- boxes(i,:) = [x1 y1 x2 y2 resp(I)];
- % increase number of responses found so far
- cnt = cnt+length(I);
- end
- end
- %that's it, return the found boxes with corresponding scores
- boxes = boxes(1:cnt,:);
- end
|