0001 function newX = shift( x, dir, k)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 if ( ndims(x)==2 && any( size(x)==1 )==1 )
0028 if ( strcmp(dir,'right') == 1 ) || ...
0029 ( strcmp(dir,'rt' ) == 1 ) || ...
0030 ( strcmp(dir,'down') == 1 ) || ...
0031 ( strcmp(dir,'dn' ) == 1 )
0032
0033 newX = x( [ end-k+1:end 1:end-k ] );
0034
0035 elseif ( strcmp(dir,'left') == 1 ) || ...
0036 ( strcmp(dir,'lt' ) == 1 ) || ...
0037 ( strcmp(dir,'up' ) == 1 )
0038
0039 newX = x( [ k+1:end 1:k ] );
0040 else
0041 error('Parameter dir is not inputed correctly!');
0042 end
0043
0044
0045 elseif ( ndims(x)==2 || (ndims(x)==3 && any(size(x)==3)==1) )
0046 idx = repmat( {':'}, ndims(x), 1);
0047 if ( strcmp(dir,'right') == 1) || ...
0048 ( strcmp(dir,'rt' ) == 1)
0049
0050 dim = 2;
0051 n = size(x, dim);
0052 idx{dim} = [n-k+1:n 1:n-k];
0053
0054 elseif ( strcmp(dir,'down') == 1) || ...
0055 ( strcmp(dir,'dn' ) == 1)
0056
0057 dim = 1;
0058 n = size(x, dim);
0059 idx{dim} = [n-k+1:n 1:n-k];
0060
0061 elseif ( strcmp(dir,'left') == 1) || ...
0062 ( strcmp(dir,'lt' ) == 1)
0063
0064 dim = 2;
0065 n = size(x, dim);
0066 idx{dim} = [k+1:n 1:k];
0067
0068 elseif ( strcmp(dir,'up') == 1 )
0069
0070 dim = 1;
0071 n = size(x, dim);
0072 idx{dim} = [k+1:n 1:k];
0073 else
0074 error('Parameter dir is not inputed correctly!');
0075 end
0076
0077 newX = x(idx{:});
0078
0079
0080
0081 else
0082 error('Matrix dimensionality is too large.');
0083 end
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123 end