myPadArray.m 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. function paddedArray = myPadArray( myArray, padSize, valForPadding )
  2. % function newf = myPadArray( myArray, padSize, valForPadding )
  3. %
  4. % BRIEF:
  5. % Quite the same thing as matlabs padarray, but significantly faster ( about
  6. % ~10 times)
  7. %
  8. % author: Alexander Freytag
  9. % date : 28-02-2014 ( dd-mm-yyyy )
  10. if ( numel ( padSize ) < 2 )
  11. padSize = [padSize, padSize];
  12. end
  13. if ( (ndims ( myArray ) > 2 ) && (numel ( valForPadding ) ~= size(myArray,3) ) )
  14. valForPadding = repmat ( valForPadding, size(myArray,3),1 );
  15. end
  16. classOfMyArray = class ( myArray );
  17. newsize = size( myArray );
  18. newsize(1) = newsize(1)+2*padSize(1);
  19. newsize(2) = newsize(2)+2*padSize(2);
  20. startpos = [padSize(1)+1, padSize(2)+1];
  21. endpos = startpos+[size( myArray,1 ), size( myArray,2 )]-1;
  22. % be safe about not changing the classtype of the padded array
  23. valForPadding = cast ( valForPadding, classOfMyArray);
  24. if ( ndims ( myArray ) == 3 )
  25. % create 'plain' array
  26. paddedArray = ones( newsize, classOfMyArray );
  27. for i=1:size(myArray,3)
  28. paddedArray(:,:,i) = valForPadding(i)*paddedArray(:,:,i);
  29. end
  30. % set original content to according position
  31. paddedArray (startpos(1):endpos(1), startpos(2):endpos(2), :) = myArray;
  32. elseif ( ndims ( myArray ) == 2 )
  33. % create 'plain' array
  34. paddedArray = valForPadding*ones( newsize, classOfMyArray );
  35. % set original content to according position
  36. paddedArray (startpos(1):endpos(1), startpos(2):endpos(2) ) = myArray;
  37. else
  38. disp('Number of feature dimensions does not match!')
  39. end
  40. end