shift.m 438 B

123456789101112131415
  1. % [RES] = shift(MTX, OFFSET)
  2. %
  3. % Circular shift 2D matrix samples by OFFSET (a [Y,X] 2-vector),
  4. % such that RES(POS) = MTX(POS-OFFSET).
  5. function res = shift(mtx, offset)
  6. dims = size(mtx);
  7. offset = mod(-offset,dims);
  8. res = [ mtx(offset(1)+1:dims(1), offset(2)+1:dims(2)), ...
  9. mtx(offset(1)+1:dims(1), 1:offset(2)); ...
  10. mtx(1:offset(1), offset(2)+1:dims(2)), ...
  11. mtx(1:offset(1), 1:offset(2)) ];