idamnjanovic@61: function cnt = countcover(sz,blocksize,stepsize) idamnjanovic@61: %COUNTCOVER Covering of signal samples by blocks idamnjanovic@61: % CNT = COUNTCOVER(SZ,BLOCKSIZE,STEPSIZE) assumes a p-dimensional signal idamnjanovic@61: % of size SZ=[N1 N2 ... Np] covered by (possibly overlapping) blocks of idamnjanovic@61: % size BLOCKSIZE=[M1 M2 ... Mp]. The blocks start at position (1,1,..,1) idamnjanovic@61: % and are shifted between them by steps of size STEPSIZE=[S1 S2 ... Sp]. idamnjanovic@61: % COUNTCOVER returns a matrix the same size as the signal, containing in idamnjanovic@61: % each entry the number of blocks covering that sample. idamnjanovic@61: % idamnjanovic@61: % See also IM2COLSTEP, COL2IMSTEP, IM2COL. idamnjanovic@61: idamnjanovic@61: idamnjanovic@61: % Ron Rubinstein idamnjanovic@61: % Computer Science Department idamnjanovic@61: % Technion, Haifa 32000 Israel idamnjanovic@61: % ronrubin@cs idamnjanovic@61: % idamnjanovic@61: % August 2008 idamnjanovic@61: idamnjanovic@61: idamnjanovic@61: cnt = ones(sz); idamnjanovic@61: for k = 1:length(sz) idamnjanovic@61: idamnjanovic@61: % this code is modified from function NDGRID, so it computes one idamnjanovic@61: % output argument of NDGRID at a time (to conserve memory) idamnjanovic@61: ids = (1:sz(k))'; idamnjanovic@61: s = sz; s(k) = []; idamnjanovic@61: ids = reshape(ids(:,ones(1,prod(s))),[length(ids) s]); idamnjanovic@61: ids = permute(ids,[2:k 1 k+1:length(sz)]); idamnjanovic@61: idamnjanovic@61: cnt = cnt .* max( min(floor((ids-1)/stepsize(k)),floor((sz(k)-blocksize(k))/stepsize(k))) - ... idamnjanovic@61: max(ceil((ids-blocksize(k))/stepsize(k)),0) + 1 , 0 ); idamnjanovic@61: end