From 5c8974df834ddb89217cd7242d12dfda1b4f3578 Mon Sep 17 00:00:00 2001 From: Nicola Vigano <nicola.vigano@esrf.fr> Date: Mon, 14 Mar 2016 16:57:05 +0100 Subject: [PATCH] gtPlaceSubvolume: added non-integer shifts support Signed-off-by: Nicola Vigano <nicola.vigano@esrf.fr> --- zUtil_Imaging/gtPlaceSubVolume.m | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/zUtil_Imaging/gtPlaceSubVolume.m b/zUtil_Imaging/gtPlaceSubVolume.m index 744e5402..f7b7a010 100644 --- a/zUtil_Imaging/gtPlaceSubVolume.m +++ b/zUtil_Imaging/gtPlaceSubVolume.m @@ -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 + -- GitLab