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

6D-Reconstruction: small speedup of the initialization (only noticeable for ospace super-sampling)

parent d49bedae
No related branches found
No related tags found
No related merge requests found
...@@ -654,22 +654,27 @@ classdef Gt6DReconstructionAlgorithmFactory < handle ...@@ -654,22 +654,27 @@ classdef Gt6DReconstructionAlgorithmFactory < handle
valid_proj_indxes = find(valid_proj_dirs)'; valid_proj_indxes = find(valid_proj_dirs)';
num_valid_projs = numel(valid_proj_indxes); num_valid_projs = numel(valid_proj_indxes);
offsets{ii}.('sino_offsets') = []; c_sino_offsets = cell(2, num_valid_projs);
offsets{ii}.('blob_offsets') = []; c_blob_offsets = cell(2, num_valid_projs);
offsets{ii}.('proj_offsets') = []; c_proj_offsets = cell(1, num_valid_projs);
offsets{ii}.('proj_coeffs') = []; c_proj_coeffs = cell(1, num_valid_projs);
offsets{ii}.proj(num_valid_projs) = struct( ... slices_pos_blobs = reshape(slice_pos_in_blob(valid_proj_indxes, ii, :), [], 2);
'sino_offset', [], 'blob_offset', [], ... ws_int_coeffs = reshape(w_int_coeffs(valid_proj_indxes, ii, :), [], 2);
'proj_offsets', [], 'proj_coeffs', [] );
% computing the correction for the blob truncation, if any
% applies
blob_shirnking_offset = (~blobs_to_not_shrink(valid_proj_indxes)) ...
.* ( 1 - slice_lims(valid_proj_indxes, 1) );
for jj = 1:num_valid_projs for jj = 1:num_valid_projs
n = valid_proj_indxes(jj); n = valid_proj_indxes(jj);
slices_1 = [proj_coeffs{n}(slice_pos_in_blob(n, ii, 1)).slices]; slices_1 = proj_coeffs{n}(slices_pos_blobs(jj, 1)).slices;
coeffs_1 = [proj_coeffs{n}(slice_pos_in_blob(n, ii, 1)).coeffs] * w_int_coeffs(n, ii, 1); coeffs_1 = proj_coeffs{n}(slices_pos_blobs(jj, 1)).coeffs * ws_int_coeffs(jj, 1);
slices_2 = [proj_coeffs{n}(slice_pos_in_blob(n, ii, 2)).slices]; slices_2 = proj_coeffs{n}(slices_pos_blobs(jj, 2)).slices;
coeffs_2 = [proj_coeffs{n}(slice_pos_in_blob(n, ii, 2)).coeffs] * w_int_coeffs(n, ii, 2); coeffs_2 = proj_coeffs{n}(slices_pos_blobs(jj, 2)).coeffs * ws_int_coeffs(jj, 2);
% ugly but it avoids a lot of compuation later % ugly but it avoids a lot of compuation later
if (numel(slices_1) == 2 && numel(slices_2) == 2 && all(slices_1 == slices_2)) if (numel(slices_1) == 2 && numel(slices_2) == 2 && all(slices_1 == slices_2))
...@@ -691,20 +696,29 @@ classdef Gt6DReconstructionAlgorithmFactory < handle ...@@ -691,20 +696,29 @@ classdef Gt6DReconstructionAlgorithmFactory < handle
end end
% Correcting w-slices indices for blob truncation % Correcting w-slices indices for blob truncation
if (~blobs_to_not_shrink(n)) slices = slices + blob_shirnking_offset(jj);
slices = slices - slice_lims(n, 1) +1;
end ones_num_slices = ones(numel(slices), 1);
c_sino_offsets{1, jj} = jj;
c_sino_offsets{2, jj} = jj(1, ones_num_slices);
offsets{ii}.proj(jj) = struct( ... c_blob_offsets{1, jj} = n;
'sino_offset', jj, 'blob_offset', n, ... c_blob_offsets{2, jj} = n(1, ones_num_slices);
'proj_offsets', slices, 'proj_coeffs', coeffs );
offsets{ii}.('sino_offsets') = [offsets{ii}.('sino_offsets'), jj(1, ones(numel(slices), 1))]; c_proj_offsets{jj} = slices;
offsets{ii}.('blob_offsets') = [offsets{ii}.('blob_offsets'), n(1, ones(numel(slices), 1))]; c_proj_coeffs{jj} = coeffs;
offsets{ii}.('proj_offsets') = [offsets{ii}.('proj_offsets'), slices];
offsets{ii}.('proj_coeffs') = [offsets{ii}.('proj_coeffs'), coeffs];
end end
offsets{ii} = struct( ...
'sino_offsets', [c_sino_offsets{2, :}], ...
'blob_offsets', [c_blob_offsets{2, :}], ...
'proj_offsets', [c_proj_offsets{:}], ...
'proj_coeffs', [c_proj_coeffs{:}], ...
'proj', struct( ...
'sino_offset', c_sino_offsets(1, :), 'blob_offset', c_blob_offsets(1, :), ...
'proj_offsets', c_proj_offsets, 'proj_coeffs', c_proj_coeffs ) ...
);
geometries{ii} = double(geometries{ii}(valid_proj_dirs, :)); geometries{ii} = double(geometries{ii}(valid_proj_dirs, :));
end 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