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

Absorption reconstruction: added configuration side support for PSFs

parent 14dfafcf
No related branches found
No related tags found
No related merge requests found
......@@ -23,6 +23,7 @@ function proj = gtAstraPrepareAbsorptionStack(parameters, varargin)
conf = struct( ...
'rot_angle', [], ...
'rot_axis', [0 0 1], ...
'psf', [], ...
'save', true, ...
'filename', 'absorption_stack' );
conf = parse_pv_pairs(conf, varargin);
......@@ -39,12 +40,15 @@ if (isfield(parameters.rec, 'absorption'))
else
% Old style parameters
warning('Old "rec" parameters')
rec_abs = struct(... % can be 'SIRT', '2DFBP' or '3DTV'
'algorithm', parameters.rec.method, ...
'num_iter', parameters.rec.abs_num_iter, ...
'interval', parameters.rec.absinterval, ...
'padding', 5, ...
'options', []);
% algorithm can be 'SIRT', '2DFBP' or '3DTV'
rec_abs = gtRecAbsorptionDefaultParameters(parameters.rec.method);
rec_abs.num_iter = parameters.rec.abs_num_iter;
rec_abs.interval = parameters.rec.absinterval;
end
if (~isempty(conf.psf))
rec_abs.psf = conf.psf;
elseif (~isfield(rec_abs, 'psf'))
rec_abs.psf = [];
end
ang_incr = pi / acq.nproj;
......@@ -104,10 +108,12 @@ for jj = 1:numel(imgs_nums)
end
[abs_img, info] = edf_read(absname, [], false, info);
stack(:, jj, :) = -log(max(0.01,abs_img))';
stack(:, jj, :) = abs_img';
fprintf(repmat('\b', 1, num_chars))
end
stack = -log(max(0.01, stack));
fprintf('Done in %f seconds.\n', toc(c));
% deal with the sense of the rotation
......@@ -128,6 +134,7 @@ new_stack((end - rec_abs.padding + 1):end, :) = new_stack((end - rec_abs.padding
proj = struct( ...
'padding', rec_abs.padding, ...
'psf', rec_abs.psf, ...
'rot_angle', conf.rot_angle, ... % Additional rotation
'rot_axis', conf.rot_axis, ... % Additional rotation
'stack', new_stack, ...
......
......@@ -8,7 +8,7 @@ function par_rec = gtRecAbsorptionDefaultParameters(algo)
case {'SIRT', '2DFBP'}
par_rec = struct(...
'algorithm', upper(algo), 'num_iter', 30, ...
'interval', 10, 'padding', 5, 'options', []);
'interval', 10, 'padding', 5, 'psf', [], 'options', []);
case '3DTV'
par_3DTV_rec_opts = struct( ...
......@@ -18,7 +18,8 @@ function par_rec = gtRecAbsorptionDefaultParameters(algo)
'epsilon', 1e-4 ...
);
par_rec = struct(...
'algorithm', upper(algo), 'num_iter', 30, 'interval', 10, ...
'padding', 5, 'options', par_3DTV_rec_opts);
'algorithm', upper(algo), 'num_iter', 100, ...
'interval', 10, 'padding', 5, 'psf', [], ...
'options', par_3DTV_rec_opts);
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