12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- function warped = warpBlocksToStandardSize( model, pos, fh_featureExtractor )
- % function warped = warpBlocksToStandardSize( model, pos, fh_featureExtractor )
- %
- % BRIEF:
- % Warp positive examples to fit model dimensions.
- % Used for training root filters from positive bounding boxes.
- %
- % author: Alexander Freytag
- % date: 13-03-2014 ( last updated)
- if ( nargin < 3 )
- fh_featureExtractor = [];
- end
- i_modelSize = size(model.w);
- i_modelSize = i_modelSize(1:2);
-
- numpos = length(pos);
-
- b_leaveBoundary = getFieldWithDefault ( fh_featureExtractor, 'b_leaveBoundary', false );
-
- if ( b_leaveBoundary )
- cropsize = (i_modelSize+2) .* model.i_binSize;
- %only needed in this case
- pixels = double(i_modelSize * model.i_binSize);
- heights = double([pos(:).y2]' - [pos(:).y1]' + 1);
- widths = double([pos(:).x2]' - [pos(:).x1]' + 1);
- else
- cropsize = (i_modelSize) .* model.i_binSize;
- end
-
- warped = [];
- lastreadimg='';
-
- for i = 1:numpos
- % fprintf('%s: warp: %d/%d\n', name, i, numpos);
- if(~strcmp(pos(i).im, lastreadimg))
- im = readImage(pos(i).im);
- lastreadimg = pos(i).im;
- end
-
- if ( b_leaveBoundary )
- padx = model.i_binSize * widths(i) / pixels(2);
- pady = model.i_binSize * heights(i) / pixels(1);
- else
- padx=0;
- pady=0;
- end
-
- x1 = round(double(pos(i).x1)-padx);
- x2 = round(double(pos(i).x2)+padx);
- y1 = round(double(pos(i).y1)-pady);
- y2 = round(double(pos(i).y2)+pady);
-
- window = subarray(im, y1, y2, x1, x2, 1);%note: 0 as last option is currently not supported
- warped{end+1} = imresize(window, cropsize, 'bilinear');%, 'Antialiasing', false);
- end
- if numpos == 1,
- assert(~isempty(warped));
- end
- end
- function B = subarray(A, i1, i2, j1, j2, pad)
- % B = subarray(A, i1, i2, j1, j2, pad)
- % Extract subarray from array
- % pad with boundary values if pad = 1
- % pad with zeros if pad = 0
- dim = size(A);
- %i1
- %i2
- is = i1:i2;
- js = j1:j2;
- if pad
- is = max(is,1);
- js = max(js,1);
- is = min(is,dim(1));
- js = min(js,dim(2));
- B = A(is,js,:);
- else
- % todo
- end
- end
|