Skip to content
Snippets Groups Projects
Commit 5c8974df authored by Nicola Vigano's avatar Nicola Vigano
Browse files

gtPlaceSubvolume: added non-integer shifts support

parent 8f304318
No related branches found
No related tags found
No related merge requests found
......@@ -41,6 +41,41 @@ function output = gtPlaceSubVolume(output, input, shift, index, assign_op, use_c
input = index .* input;
end
if (all(shift == round(shift)))
output = place_sub_volume(output, input, shift, assign_op, use_c_functions);
else
inds = shift ~= round(shift);
pos_inds = find(inds);
output = place_sub_volume_at_inds(pos_inds, 1, output, input, shift, assign_op, use_c_functions);
end
end
function output = place_sub_volume_at_inds(pos_inds, coeff, output, input, shift, assign_op, use_c_functions)
if (isempty(pos_inds))
output = place_sub_volume(output, coeff * input, shift, assign_op, use_c_functions);
else
ind = pos_inds(1);
l_s_ind = floor(shift(ind));
u_s_ind = l_s_ind + 1;
l_c_ind = u_s_ind - shift(ind);
u_c_ind = 1 - l_c_ind;
l_shift = shift;
l_shift(ind) = l_s_ind;
u_shift = shift;
u_shift(ind) = u_s_ind;
if (l_c_ind > 0)
output = place_sub_volume_at_inds(pos_inds(2:end), l_c_ind * coeff, output, input, l_shift, assign_op, use_c_functions);
end
if (u_c_ind > 0)
output = place_sub_volume_at_inds(pos_inds(2:end), u_c_ind * coeff, output, input, u_shift, assign_op, use_c_functions);
end
end
end
function output = place_sub_volume(output, input, shift, assign_op, use_c_functions)
inputSize = size(input);
outputSize = size(output);
num_input_dims = numel(inputSize);
......@@ -150,3 +185,4 @@ function output = gtPlaceSubVolume(output, input, shift, index, assign_op, use_c
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment