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

GtGrainODFuvwSolver: compute sinogram size from real uv limits

parent d8ce633c
No related branches found
No related tags found
No related merge requests found
......@@ -93,34 +93,16 @@ classdef GtGrainODFuvwSolver < GtGrainODFwSolver
blob_uvw_lims = permute(cat(3, blob_u_lims, blob_v_lims, blob_w_lims), [1 3 2]);
with_shape_functions = ~isempty(self.shape_functions);
% Building W information
if (with_shape_functions)
if (any(strcmpi(self.shape_functions_type, {'uvw', 'nw2uvw'})))
for ii_o = numel(self.shape_functions{1}):-1:1
proj_w_lims(:, :, ii_o) = cat(1, self.shape_functions{1}{ii_o}(:).bbwim);
end
for ii_v = numel(self.shape_functions):-1:1
for ii_o = numel(self.shape_functions{1}):-1:1
proj_u_lims(:, :, ii_o, ii_v) = cat(1, self.shape_functions{ii_v}{ii_o}(:).bbuim);
proj_v_lims(:, :, ii_o, ii_v) = cat(1, self.shape_functions{ii_v}{ii_o}(:).bbvim);
end
end
% By expressing the third index with the column :, and
% not expressing the fourth at all, we do an implicit
% reshape from 4 imentions to 3
proj_u_lims = [min(proj_u_lims(:, 1, :), [], 3), max(proj_u_lims(:, 2, :), [], 3)];
proj_v_lims = [min(proj_v_lims(:, 1, :), [], 3), max(proj_v_lims(:, 2, :), [], 3)];
proj_uv_lims = cat(3, proj_u_lims, proj_v_lims);
delta_uvs = reshape(proj_uv_lims(:, 2, :) - proj_uv_lims(:, 1, :), [], 2);
else
for ii_o = numel(self.shape_functions):-1:1
proj_w_lims(:, :, ii_o) = cat(1, self.shape_functions{ii_o}(:).bbwim);
end
[delta_uvs, proj_uv_lims] = self.sampler.get_uv_deviations();
delta_uvs = delta_uvs(self.sampler.selected, :);
proj_uv_lims = proj_uv_lims(self.sampler.selected, :, :);
end
proj_w_mins = reshape(proj_w_lims(:, 1, :), num_blobs, []);
......@@ -135,11 +117,37 @@ classdef GtGrainODFuvwSolver < GtGrainODFwSolver
[delta_ws, proj_w_lims] = self.sampler.get_omega_deviations(with_shape_functions);
delta_ws = delta_ws(self.sampler.selected);
proj_w_lims = proj_w_lims(self.sampler.selected, :);
end
[delta_uvs, proj_uv_lims] = self.sampler.get_uv_deviations();
delta_uvs = delta_uvs(self.sampler.selected, :);
num_rspace_voxels = size(self.voxel_centers, 1);
% Building UV information
if (with_shape_functions && any(strcmpi(self.shape_functions_type, {'uvw', 'nw2uvw'})))
for ii_v = num_rspace_voxels:-1:1
for ii_o = numel(self.shape_functions{1}):-1:1
proj_u_lims(:, :, ii_o, ii_v) = cat(1, self.shape_functions{ii_v}{ii_o}(:).bbuim);
proj_v_lims(:, :, ii_o, ii_v) = cat(1, self.shape_functions{ii_v}{ii_o}(:).bbvim);
end
end
% By expressing the third index with the column :, and
% not expressing the fourth at all, we do an implicit
% reshape from 4 imentions to 3
proj_u_lims = [min(proj_u_lims(:, 1, :), [], 3), max(proj_u_lims(:, 2, :), [], 3)];
proj_v_lims = [min(proj_v_lims(:, 1, :), [], 3), max(proj_v_lims(:, 2, :), [], 3)];
else
for ii_v = num_rspace_voxels:-1:1
disp_sampler = self.sampler.regenerate_displaced(self.voxel_centers(ii_v, :));
[~, proj_uv_lims(:, :, :, ii_v)] = disp_sampler.get_uv_deviations();
end
proj_uv_lims = proj_uv_lims(self.sampler.selected, :, :);
proj_u_lims = [min(proj_uv_lims(:, 1, 1, :), [], 4), max(proj_uv_lims(:, 2, 1, :), [], 4)];
proj_v_lims = [min(proj_uv_lims(:, 1, 2, :), [], 4), max(proj_uv_lims(:, 2, 2, :), [], 4)];
end
proj_uv_lims = cat(3, proj_u_lims, proj_v_lims);
delta_uvs = reshape(proj_uv_lims(:, 2, :) - proj_uv_lims(:, 1, :), [], 2);
chosen_sizes = max(blob_sizes, [delta_uvs, delta_ws]);
proj_uvw_lims = permute(cat(3, proj_uv_lims, proj_w_lims), [1 3 2]);
......
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