From 913ba92166a3081b83f3879147fb52067abb889e Mon Sep 17 00:00:00 2001 From: Nicola Vigano <nicola.vigano@esrf.fr> Date: Thu, 9 Jun 2016 17:10:01 +0200 Subject: [PATCH] 6D-Reconstruction/Twins: fixed raw_images loading Signed-off-by: Nicola Vigano <nicola.vigano@esrf.fr> --- ...t6DCreateProjDataFromTwinnedGrainFwdProj.m | 51 +++++++++++++------ 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/zUtil_Deformation/gt6DCreateProjDataFromTwinnedGrainFwdProj.m b/zUtil_Deformation/gt6DCreateProjDataFromTwinnedGrainFwdProj.m index 1648150c..f6bb06f1 100644 --- a/zUtil_Deformation/gt6DCreateProjDataFromTwinnedGrainFwdProj.m +++ b/zUtil_Deformation/gt6DCreateProjDataFromTwinnedGrainFwdProj.m @@ -157,6 +157,7 @@ function [samp_ors, estim_space_bbox_pix, estim_orient_bbox] = gt6DCreateProjDat max_img_sizes = zeros(num_grains, 2); extended_projs = get6DExtendedProjDefinition(num_grains); + inconvenient_etas = cell(num_grains, 1); samp_ors = cell(num_grains, 1); @@ -201,6 +202,13 @@ function [samp_ors, estim_space_bbox_pix, estim_orient_bbox] = gt6DCreateProjDat extended_projs(ii_g).included = ref_included; extended_projs(ii_g).selected = ref_selected; end + + local_ondet = extended_projs(ii_g).ondet; + local_included = extended_projs(ii_g).included; + refor_ns = refor.allblobs.eta(local_ondet(local_included)); + + % We avoid the vertical spots for convenience + inconvenient_etas{ii_g} = acosd(abs(cosd(refor_ns))) < conf.min_eta; end samp_ors = [samp_ors{:}]; @@ -214,26 +222,35 @@ function [samp_ors, estim_space_bbox_pix, estim_orient_bbox] = gt6DCreateProjDat img_sizes = cell(num_grains, 1); for ii_g = 1:num_grains - local_sel_refl = extended_projs(ii_g).ondet(extended_projs(ii_g).included(extended_projs(ii_g).selected)); + local_ondet = extended_projs(ii_g).ondet; + local_included = extended_projs(ii_g).included; + local_inc_refl = local_ondet(local_included); - uvw_tab{ii_g} = zeros(numel(local_sel_refl), numel(samp_ors(ii_g).bb_ors), 3); + uvw_tab{ii_g} = zeros(numel(local_inc_refl), numel(samp_ors(ii_g).bb_ors), 3); for ii_o = 1:numel(samp_ors(ii_g).bb_ors) - uvw_tab{ii_g}(:, ii_o, :) = samp_ors(ii_g).bb_ors(ii_o).detector(conf.det_index).uvw(local_sel_refl, :); + uvw_tab{ii_g}(:, ii_o, :) = samp_ors(ii_g).bb_ors(ii_o).allblobs.detector(conf.det_index).uvw(local_inc_refl, :); end % Let's treat those blobs at the w edge 360->0 % (from the sampled orientations perspective) - refor_ws = refor.allblobs.omega(local_sel_refl) / gtGetOmegaStepDeg(p, conf.det_index); + refor_ws = refor.allblobs.omega(local_inc_refl) / gtGetOmegaStepDeg(p, conf.det_index); uvw_tab{ii_g}(:, :, 3) = gtGrainAnglesTabularFix360deg(uvw_tab{ii_g}(:, :, 3), refor_ws, p); img_bboxes{ii_g} = [ ... - min(uvw_tab{ii_g}(:, :, 1:2), [], 2), ... - max(uvw_tab{ii_g}(:, :, 1:2), [], 2) ]; + reshape(floor(min(uvw_tab{ii_g}, [], 2)), [], 3), ... + reshape(ceil(max(uvw_tab{ii_g}, [], 2)), [], 3) ]; + + img_sizes{ii_g} = img_bboxes{ii_g}(:, 4:6) - img_bboxes{ii_g}(:, 1:3) + 1; + + max_img_sizes(ii_g, :) = max(img_sizes{ii_g}(:, 1:2), [], 1); - img_sizes{ii_g} = img_bboxes{ii_g}(:, 4:5) - img_bboxes{ii_g}(:, 1:2) + 1; - img_sizes{ii_g} = reshape(img_sizes{ii_g}, [], 2); + if (conf.verbose) + refor_ns = refor.allblobs.eta(local_inc_refl); - max_img_sizes(ii_g, :) = max(img_sizes{ii_g}, [], 1); + fprintf('\nImages for orientation %d:\n', ii_g) + fprintf('%02d)du %8d, dv %8d, dw %8d, eta: %7.3f <- used: %d, u: [%4d %4d], v: [%4d %4d], w: [%4d %4d]\n', ... + [(1:numel(refor_ns))', img_sizes{ii_g}, refor_ns, ~inconvenient_etas{ii_g}, img_bboxes{ii_g}(:, [1 4 2 5 3 6]) ]'); + end end else for ii_g = 1:num_grains @@ -260,10 +277,7 @@ function [samp_ors, estim_space_bbox_pix, estim_orient_bbox] = gt6DCreateProjDat for ii_b = 1:num_blobs num_chars = fprintf('%03d/%03d', ii_b, num_blobs); - if (ii_g > 1 && extended_projs(ii_g).shared_refl(ii_b)) - blobs(ii_b) = samp_ors(1).proj.bl( ... - extended_projs(ii_g).shared_refl_pos_in_parent(ii_b)); - else + if (ii_g == 1 || ~extended_projs(ii_g).shared_refl(ii_b)) blobs(ii_b) = load_blob( ... img_bboxes{ii_g}(ii_b, :), img_sizes{ii_g}(ii_b, :), ... stackUSize, stackVSize, p, conf); @@ -271,6 +285,10 @@ function [samp_ors, estim_space_bbox_pix, estim_orient_bbox] = gt6DCreateProjDat fprintf(repmat('\b', [1, num_chars])); end + % Using the same because it gives the same size/uvw-limits + if (ii_g > 1) + blobs(extended_projs(ii_g).shared_refl) = samp_ors(1).proj(conf.det_index).bl(extended_projs(ii_g).shared_refl_pos_in_parent); + end else fprintf(' - Loading segmented blobs..') @@ -278,9 +296,9 @@ function [samp_ors, estim_space_bbox_pix, estim_orient_bbox] = gt6DCreateProjDat blobs = grs(ii_g).proj.bl; else blobs = gtFwdSimBlobDefinition('blob', num_blobs); - blobs(~extended_projs(ii_g).shared_refl) = grs(ii_g).proj.bl(~extended_projs(ii_g).shared_refl_included_pos); + blobs(~extended_projs(ii_g).shared_refl) = grs(ii_g).proj(conf.det_index).bl(~extended_projs(ii_g).shared_refl_included_pos); % Using the same because it gives the same size/uvw-limits - blobs(extended_projs(ii_g).shared_refl) = samp_ors(1).proj.bl(extended_projs(ii_g).shared_refl_pos_in_parent); + blobs(extended_projs(ii_g).shared_refl) = samp_ors(1).proj(conf.det_index).bl(extended_projs(ii_g).shared_refl_pos_in_parent); if (conf.verbose) parent_ids = grs(1).fwd_sim(conf.det_index).spotid(ref_included(extended_projs(ii_g).shared_refl_pos_in_parent))'; @@ -293,6 +311,7 @@ function [samp_ors, estim_space_bbox_pix, estim_orient_bbox] = gt6DCreateProjDat end fprintf('\b\b: Done in %g seconds.\n - Equalizing blob sizes..', toc(c)) + c = tic(); for ii_b = 1:num_blobs num_chars = fprintf('%02d/%02d', ii_b, num_blobs); @@ -643,6 +662,8 @@ function blob = load_blob(img_bboxes, img_sizes, stackUSize, stackVSize, p, conf blob.intm = gtPlaceSubVolume( ... zeros(blob_size_im, 'single'), single(blob_vol), shifts_blob); + blob.mask = true(blob_size_im); + blob.bbsize = blob_size_im; blob_bb_im = [blob_bb(1, 1:3) - shifts_blob, blob_size_im]; -- GitLab