Newer
Older
Nicola Vigano
committed
function bl = gtFwdSimBuildDifstackBlobs(blobids, indexes, parameters, stackUSize, stackVSize)
Nicola Vigano
committed
% BUILDDIFSTACKSPOTS
Nicola Vigano
committed
% bl = gtFwdSimBuildDifstackSpots(spotids, indexes, parameters, stackUSize, stackVSize)
Nicola Vigano
committed
%
% blobids : spotid from grain
% indexes :
% parameters : parameters.mat
Nicola Vigano
committed
% stackUSize :
Nicola Vigano
committed
% stackVSize :
%
% bl :
num_blobs = numel(blobids);
if (~exist('indexes', 'var') || isempty(indexes))
indexes = 1:num_blobs;
end
bl(1:num_blobs) = gtFwdSimBlobDefinition();
Nicola Vigano
committed
for ii = reshape(indexes, 1, [])
Nicola Vigano
committed
[blob_vol, blob_bb, blob_mask, blob_int] = gtFwdSimBuildBlob(blobids(ii), parameters);
Nicola Vigano
committed
Nicola Vigano
committed
% Transposing to keep the same convention as spots
blob_vol = permute(blob_vol, [2 1 3]);
blob_mask = permute(blob_mask, [2 1 3]);
Nicola Vigano
committed
blob_bb = blob_bb([2 1 3 5 4 6]);
Nicola Vigano
committed
bl(ii).mbbsize = blob_bb(4:6);
bl(ii).mbbu = [blob_bb(1), blob_bb(1) + blob_bb(4) + 1];
bl(ii).mbbv = [blob_bb(2), blob_bb(2) + blob_bb(5) + 1];
bl(ii).mbbw = [blob_bb(3), blob_bb(3) + blob_bb(6) + 1];
Nicola Vigano
committed
% Essentially zero pads the blob to make it fit into ASTRA's
% diffraction stack
shifts_blob = gtFwdSimGetStackShifts(stackUSize, stackVSize, blob_bb, false);
shifts = [shifts_blob.u, shifts_blob.v, 1];
Nicola Vigano
committed
Nicola Vigano
committed
% We are applying a padding of one slice (per side) on the w
Nicola Vigano
committed
% diretion
Nicola Vigano
committed
blob_size_im = [stackUSize, stackVSize, blob_bb(6)+2];
blob_bb_im = [blob_bb(1:3) - shifts, blob_size_im];
bl(ii).intm = gtPlaceSubVolume( zeros(blob_size_im, 'single'), ...
Nicola Vigano
committed
blob_vol, shifts);
bl(ii).mask = gtPlaceSubVolume( false(blob_size_im), ...
Nicola Vigano
committed
uint8(blob_mask), shifts);
Nicola Vigano
committed
bl(ii).bbsize = blob_size_im;
Nicola Vigano
committed
Nicola Vigano
committed
bl(ii).bbuim = [blob_bb_im(1), blob_bb_im(1) + blob_bb_im(4) - 1];
bl(ii).bbvim = [blob_bb_im(2), blob_bb_im(2) + blob_bb_im(5) - 1];
bl(ii).bbwim = [blob_bb_im(3), blob_bb_im(3) + blob_bb_im(6) - 1];
Nicola Vigano
committed
bl(ii).intensity = blob_int;