From 00a8329eef581ca38dd233ee114f414577f83b4b Mon Sep 17 00:00:00 2001 From: Nicola Vigano <nicola.vigano@esrf.fr> Date: Fri, 16 Jan 2015 12:41:41 +0100 Subject: [PATCH] FwdSim: renamed stackHSize to stackUSize, and simplified a few things in blob creation Signed-off-by: Nicola Vigano <nicola.vigano@esrf.fr> --- zUtil_Deformation/GtOrientationSampling.m | 8 ++-- .../test_generation/Gt6DTwinTestCreator.m | 4 +- zUtil_ForwardSim/gtForwardSimulate_v2.m | 20 +++++--- zUtil_ForwardSim/gtFwdSimBuildDifstackBlobs.m | 46 +++++++++++-------- zUtil_ForwardSim/gtFwdSimBuildDifstackSpots.m | 32 ++++++------- zUtil_ForwardSim/gtFwdSimBuildProjGeometry.m | 14 +++--- .../gtFwdSimCheckSpotInRawImages.m | 2 +- .../gtFwdSimGetDiffspotsCommonProperties.m | 2 +- zUtil_ForwardSim/gtFwdSimGetStackShifts.m | 8 ++-- .../gtFwdSimPredictGrainVolumeSize.m | 4 +- zUtil_ForwardSim/gtFwdSimPredictVolumeSize.m | 4 +- zUtil_ForwardSim/gtShowFsim.m | 4 +- 12 files changed, 82 insertions(+), 66 deletions(-) diff --git a/zUtil_Deformation/GtOrientationSampling.m b/zUtil_Deformation/GtOrientationSampling.m index 0097b1ff..660e2061 100644 --- a/zUtil_Deformation/GtOrientationSampling.m +++ b/zUtil_Deformation/GtOrientationSampling.m @@ -335,10 +335,10 @@ classdef GtOrientationSampling < handle cosnc = abs(cosd(n)) >= 0.5; dn = zeros(size(n)); bls_bbm = cat(1, bls(:).mbbsize); - % 4th component is the horizontal, while the 5th is the - % vertical - dn(cosnc) = bls_bbm(cosnc, 4) ./ abs(cosd(n(cosnc))); - dn(~cosnc) = bls_bbm(~cosnc, 5) ./ abs(sind(n(~cosnc))); + % 1th component is the horizontal, while the 2th is the + % vertical !! + dn(cosnc) = bls_bbm(cosnc, 1) ./ abs(cosd(n(cosnc))); + dn(~cosnc) = bls_bbm(~cosnc, 2) ./ abs(sind(n(~cosnc))); dn = dn ./ (2 * sqrt(sum((uv - gc_det_pos) .^ 2, 2))); % Let's take a small eviation in eta, to determine the plane diff --git a/zUtil_Deformation/test_generation/Gt6DTwinTestCreator.m b/zUtil_Deformation/test_generation/Gt6DTwinTestCreator.m index e70b9b14..a94e28c2 100644 --- a/zUtil_Deformation/test_generation/Gt6DTwinTestCreator.m +++ b/zUtil_Deformation/test_generation/Gt6DTwinTestCreator.m @@ -297,7 +297,7 @@ classdef Gt6DTwinTestCreator < Gt6DTestCreator % position of Detector % detPos = detposcorner ... -% + spotsCommProps.stackHSize/2 * parameters.labgeo.detdiru * omegaRotTens ... +% + spotsCommProps.stackUSize/2 * parameters.labgeo.detdiru * omegaRotTens ... % + spotsCommProps.stackVSize/2 * parameters.labgeo.detdirv * omegaRotTens; % detPos = detPos * omegaRotTens - grain.center ./ pixelsize; detPos = diffBeamDir * norm(detposcorner); @@ -329,7 +329,7 @@ classdef Gt6DTwinTestCreator < Gt6DTestCreator diagonal = round(norm(size(obj.fullVol))); % take the biggest spot and add a relative extra margin (multiplicative factor oversize) - spotsProps.stackHSize = diagonal; + spotsProps.stackUSize = diagonal; % ...same for vertical direction spotsProps.stackVSize = diagonal; end diff --git a/zUtil_ForwardSim/gtForwardSimulate_v2.m b/zUtil_ForwardSim/gtForwardSimulate_v2.m index a0927eec..5c63fc15 100644 --- a/zUtil_ForwardSim/gtForwardSimulate_v2.m +++ b/zUtil_ForwardSim/gtForwardSimulate_v2.m @@ -246,6 +246,9 @@ for n = first : last 'bbwim', [], ... % Image BB on W <- Not strictly w 'bbsize', [], ... % Image BoundingBox (includes margins) 'mbbsize', [], ... % Real (Measured) Blob Bounding Box + 'mbbu', [], ... % Real (Measured) Blob BB on U + 'mbbv', [], ... % Real (Measured) Blob BB on V + 'mbbw', [], ... % Real (Measured) Blob BB on W <- Not strictly w 'intensity', [] ); % Blob original intensity checkSpots = struct('info', cell(numspots, 1)); @@ -310,7 +313,7 @@ for n = first : last end bls = gtFwdSimBuildDifstackBlobs(candidateIDs, [], parameters, ... - spotsCommProps.stackHSize, spotsCommProps.stackVSize); + spotsCommProps.stackUSize, spotsCommProps.stackVSize); proj_bl = proj_bls(ii * ones(numel(bls), 1)); @@ -413,7 +416,7 @@ for n = first : last fprintf(' (Done).\n - Building difstack..'); difstack = gtFwdSimBuildDifstackSpots(spotid, included, parameters, ... - spotsCommProps.stackHSize, spotsCommProps.stackVSize, ... + spotsCommProps.stackUSize, spotsCommProps.stackVSize, ... spotsCommProps.Xsize, spotsCommProps.Ysize, ... bb, info); @@ -461,7 +464,7 @@ for n = first : last proj = gtFwdSimBuildProjGeometry(... diff_beam_dirs(included, :), gr.center, W(included), ... bb(included, :), parameters, ... - spotsCommProps.stackHSize, spotsCommProps.stackVSize, ... + spotsCommProps.stackUSize, spotsCommProps.stackVSize, ... selected); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -664,10 +667,12 @@ function proj_bls = predict_spot_masks_from_indexed(gr, grain_INDX, ... % Producing blobs' boundingboxes (as by dilated segmentation info) bls_INDXTR = gtFwdSimBuildDifstackBlobs(difspotID_INDXTR, [], ... - parameters, spotsCommProps.stackHSize, spotsCommProps.stackVSize); + parameters, spotsCommProps.stackUSize, spotsCommProps.stackVSize); % INDEXTER Data - BBs = cat(1, bls_INDXTR(:).mbbsize); - BBs = BBs(:, [1 2 4 5]); + BBus = cat(1, bls_INDXTR(:).mbbu); + BBvs = cat(1, bls_INDXTR(:).mbbv); + BBsizes = cat(1, bls_INDXTR(:).mbbsize); + BBs = [BBus(:, 1), BBvs(:, 1), BBsizes(:, 1:2)]; Ws = segmentedSpots.CentroidImage(difspotID_INDXTR) .* parameters.labgeo.omstep; @@ -685,6 +690,9 @@ function proj_bls = predict_spot_masks_from_indexed(gr, grain_INDX, ... for ii_b = 1:numel(proj_bls) proj_bls(ii_b).mbbsize = proj_bls_original(ii_b).bbsize; + proj_bls(ii_b).mbbu = proj_bls_original(ii_b).bbuim; + proj_bls(ii_b).mbbv = proj_bls_original(ii_b).bbvim; + proj_bls(ii_b).mbbw = proj_bls_original(ii_b).bbwim; end end diff --git a/zUtil_ForwardSim/gtFwdSimBuildDifstackBlobs.m b/zUtil_ForwardSim/gtFwdSimBuildDifstackBlobs.m index 2ac7e7fa..edef6589 100644 --- a/zUtil_ForwardSim/gtFwdSimBuildDifstackBlobs.m +++ b/zUtil_ForwardSim/gtFwdSimBuildDifstackBlobs.m @@ -1,11 +1,11 @@ -function bl = gtFwdSimBuildDifstackBlobs(blobids, indexes, parameters, stackHSize, stackVSize) +function bl = gtFwdSimBuildDifstackBlobs(blobids, indexes, parameters, stackUSize, stackVSize) % BUILDDIFSTACKSPOTS -% bl = gtFwdSimBuildDifstackSpots(spotids, indexes, parameters, stackHSize, stackVSize) +% bl = gtFwdSimBuildDifstackSpots(spotids, indexes, parameters, stackUSize, stackVSize) % % blobids : spotid from grain % indexes : % parameters : parameters.mat -% stackHSize : +% stackUSize : % stackVSize : % % bl : @@ -24,39 +24,47 @@ function bl = gtFwdSimBuildDifstackBlobs(blobids, indexes, parameters, stackHSiz 'bbwim', [], ... % Image BB on W <- Not strictly w 'bbsize', [], ... % Image BoundingBox (includes margins) 'mbbsize', [], ... % Real (Measured) Blob Bounding Box + 'mbbu', [], ... % Real (Measured) Blob BB on U + 'mbbv', [], ... % Real (Measured) Blob BB on V + 'mbbw', [], ... % Real (Measured) Blob BB on W <- Not strictly w 'intensity', [] ); % Blob original intensity for ii = reshape(indexes, 1, []) [blob_vol, blob_bb, blob_mask, blob_int] = gtFwdSimBuildBlob(blobids(ii), parameters); - % Essentially zero pads the blob to make it fit into ASTRA's - % diffraction stack - shifts_blob = gtFwdSimGetStackShifts(stackHSize, stackVSize, blob_bb, false); - shifts = [shifts_blob.v, shifts_blob.h, 1]; - + % Transposing to keep the same convention as spots + blob_vol = permute(blob_vol, [2 1 3]); + blob_mask = permute(blob_mask, [2 1 3]); blob_bb = blob_bb([2 1 3 5 4 6]); - bl(ii).mbbsize = blob_bb; + 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(3), blob_bb(2) + blob_bb(5) + 1]; + bl(ii).mbbw = [blob_bb(4), blob_bb(3) + blob_bb(6) + 1]; + + % 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]; % We are applying a padding of one slice (perside) on the w % diretion + 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(stackVSize, stackHSize, blob_bb(6)+2), ... + zeros(blob_size_im, 'single'), ... blob_vol, shifts); - bl(ii).intm = permute(bl(ii).intm, [2 1 3]); bl(ii).mask = gtPlaceSubVolume( ... - zeros(stackVSize, stackHSize, blob_bb(6)+2), ... + false(blob_size_im), ... uint8(blob_mask), shifts); - bl(ii).mask = permute(logical(bl(ii).mask), [2 1 3]); - bl(ii).bbsize = size(bl(ii).intm); + bl(ii).bbsize = blob_size_im; - bl(ii).bbuim = [(blob_bb(1) - shifts_blob.h), ... - (blob_bb(1) - shifts_blob.h + bl(ii).bbsize(1) - 1)]; - bl(ii).bbvim = [(blob_bb(2) - shifts_blob.v), ... - (blob_bb(2) - shifts_blob.v + bl(ii).bbsize(2) - 1)]; - bl(ii).bbwim = [blob_bb(3)-1, (blob_bb(3) + blob_bb(6))]; + 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]; bl(ii).intensity = blob_int; end diff --git a/zUtil_ForwardSim/gtFwdSimBuildDifstackSpots.m b/zUtil_ForwardSim/gtFwdSimBuildDifstackSpots.m index d9e83914..5b10dd3b 100644 --- a/zUtil_ForwardSim/gtFwdSimBuildDifstackSpots.m +++ b/zUtil_ForwardSim/gtFwdSimBuildDifstackSpots.m @@ -1,14 +1,14 @@ -function [difstack, shifts] = gtFwdSimBuildDifstackSpots(spotids, indexes, parameters, stackHSize, stackVSize, Xsize, Ysize, bb, info) +function [difstack, shifts] = gtFwdSimBuildDifstackSpots(spotids, indexes, parameters, stackUSize, stackVSize, Usize, Vsize, bb, info) % BUILDDIFSTACKSPOTS -% [difstack, shifts] = gtFwdSimBuildDifstackSpots(spotids, indexes, parameters, stackHSize, stackVSize, Xsize, Ysize, bb, info) +% [difstack, shifts] = gtFwdSimBuildDifstackSpots(spotids, indexes, parameters, stackUSize, stackVSize, Usize, Vsize, bb, info) % % spotids : spotid from grain % indexes % parameters : parameters.mat -% stackHSize : +% stackUSize : % stackVSize : -% Xsize : -% Ysize : +% Usize : +% Vsize : % bb : bounding boxes % info % @@ -17,14 +17,14 @@ function [difstack, shifts] = gtFwdSimBuildDifstackSpots(spotids, indexes, param num_spots = numel(spotids); - difstack = zeros(stackHSize, num_spots, stackVSize, 'single'); + difstack = zeros(stackUSize, num_spots, stackVSize, 'single'); if (~exist('indexes', 'var') || isempty(indexes)) indexes = 1:num_spots; end if (~exist('parameters', 'var') || isempty(parameters)) - load('parameters.mat'); + parameters = gtLoadParameters(); end if (~exist('info', 'var') || isempty(info)) difspotfile = fullfile(parameters.acq.dir, '2_difspot', '00000', 'difspot00001.edf'); @@ -35,20 +35,20 @@ function [difstack, shifts] = gtFwdSimBuildDifstackSpots(spotids, indexes, param end end - shifts = gtFwdSimGetStackShifts(stackHSize, stackVSize, bb(indexes, :), true); + shifts = gtFwdSimGetStackShifts(stackUSize, stackVSize, bb(indexes, :), true); for ii = 1:numel(indexes) - spotid = spotids(indexes(ii)); - bb_id = bb(indexes(ii), :); + spot_id = spotids(indexes(ii)); + spot_bb = bb(indexes(ii), :); + + [spot, ~] = gtFwdSimBuildSpot(spot_id, parameters, Usize, Vsize, spot_bb, info); - [spot, ~] = gtFwdSimBuildSpot(spotid, parameters, Xsize, Ysize, bb_id, info); % Essentially zero pads the spot to make it fit into ASTRA's % diffraction stack + spot_pad = gtPlaceSubVolume( ... + zeros(stackUSize, stackVSize, 'single'), spot', ... + [shifts.u(ii), shifts.v(ii), 0]); - spot_pad = gtPlaceSubImage2(spot,... - zeros(stackVSize, stackHSize, 'single'),... - shifts.h(ii) + 1, shifts.v(ii) + 1, 'summed'); - - difstack(:, indexes(ii), :) = spot_pad'; + difstack(:, indexes(ii), :) = spot_pad; end end diff --git a/zUtil_ForwardSim/gtFwdSimBuildProjGeometry.m b/zUtil_ForwardSim/gtFwdSimBuildProjGeometry.m index d7e40fea..00421720 100644 --- a/zUtil_ForwardSim/gtFwdSimBuildProjGeometry.m +++ b/zUtil_ForwardSim/gtFwdSimBuildProjGeometry.m @@ -1,5 +1,5 @@ -function proj = gtFwdSimBuildProjGeometry(diff_beam_dirs, gr_center, omegas, bb, parameters, stackHSize, stackVSize, selected, det_ind) -% FUNCTION proj = gtFwdSimBuildProjGeometry(diff_beam_dirs, gr_center, omegas, bb, parameters, stackHSize, stackVSize, selected, det_ind) +function proj = gtFwdSimBuildProjGeometry(diff_beam_dirs, gr_center, omegas, bb, parameters, stackUSize, stackVSize, selected, det_ind) +% FUNCTION proj = gtFwdSimBuildProjGeometry(diff_beam_dirs, gr_center, omegas, bb, parameters, stackUSize, stackVSize, selected, det_ind) % if (~exist('det_ind', 'var') || isempty(det_ind)) det_ind = 1; @@ -13,12 +13,12 @@ function proj = gtFwdSimBuildProjGeometry(diff_beam_dirs, gr_center, omegas, bb, num_projs = size(diff_beam_dirs, 1); - spot_shifts = gtFwdSimGetStackShifts(stackHSize, stackVSize, bb, true); + spot_shifts = gtFwdSimGetStackShifts(stackUSize, stackVSize, bb, true); % Bouning boxes in detector coordinates! bbpos_det_grain = [ ... - (bb(:, 1) - spot_shifts.h), (bb(:, 2) - spot_shifts.v), ... - stackHSize(ones(num_projs, 1)), stackVSize(ones(num_projs, 1)) ... + (bb(:, 1) - spot_shifts.u), (bb(:, 2) - spot_shifts.v), ... + stackUSize(ones(num_projs, 1)), stackVSize(ones(num_projs, 1)) ... ]; % Bouning boxes in detector coordinates! @@ -52,13 +52,13 @@ function proj = gtFwdSimBuildProjGeometry(diff_beam_dirs, gr_center, omegas, bb, proj.geom_abs = proj_geom_abs; proj.num_rows = stackVSize; - proj.num_cols = stackHSize; + proj.num_cols = stackUSize; proj.centerpix = gtGeoLab2Sam(gr_center, eye(3), labgeo, recgeo, true); use_polyhedron = numel(find(selected)) >= 3; vol_size = gtFwdSimPredictVolumeSize(gr_center, omegas(selected), ... - bb(selected, :), parameters, stackHSize, stackVSize, use_polyhedron); + bb(selected, :), parameters, stackUSize, stackVSize, use_polyhedron); proj.vol_size_x = vol_size(2); proj.vol_size_y = vol_size(1); diff --git a/zUtil_ForwardSim/gtFwdSimCheckSpotInRawImages.m b/zUtil_ForwardSim/gtFwdSimCheckSpotInRawImages.m index 079572fd..abb183cf 100644 --- a/zUtil_ForwardSim/gtFwdSimCheckSpotInRawImages.m +++ b/zUtil_ForwardSim/gtFwdSimCheckSpotInRawImages.m @@ -4,7 +4,7 @@ function [found_intensity, spotInfo] = gtFwdSimCheckSpotInRawImages(uvw, spotsCo % % uvw : spot position at 'u', 'v', 'w' % spotsCommProps : diffraction spots common properties (Xsize, Ysize, -% stackHSize, stackVSize) +% stackUSize, stackVSize) % parameters : parameters.mat omega_step = parameters.labgeo.omstep; diff --git a/zUtil_ForwardSim/gtFwdSimGetDiffspotsCommonProperties.m b/zUtil_ForwardSim/gtFwdSimGetDiffspotsCommonProperties.m index fdf080d8..6a079352 100644 --- a/zUtil_ForwardSim/gtFwdSimGetDiffspotsCommonProperties.m +++ b/zUtil_ForwardSim/gtFwdSimGetDiffspotsCommonProperties.m @@ -34,7 +34,7 @@ function spotsProps = gtFwdSimGetDiffspotsCommonProperties(grain, detrefpos_pix, grainBBox = [max(grain.bbxs), max(grain.bbys)]; % take the biggest spot and add a relative extra margin (multiplicative factor oversize) - spotsProps.stackHSize = round(grainBBox(1) * fsim.oversize); + spotsProps.stackUSize = round(grainBBox(1) * fsim.oversize); % ...same for vertical direction spotsProps.stackVSize = round(grainBBox(2) * fsim.oversize); diff --git a/zUtil_ForwardSim/gtFwdSimGetStackShifts.m b/zUtil_ForwardSim/gtFwdSimGetStackShifts.m index 5349ab18..bc9c2379 100644 --- a/zUtil_ForwardSim/gtFwdSimGetStackShifts.m +++ b/zUtil_ForwardSim/gtFwdSimGetStackShifts.m @@ -1,9 +1,9 @@ -function shifts = gtFwdSimGetStackShifts(stackHSize, stackVSize, bb, use_spots) +function shifts = gtFwdSimGetStackShifts(stackUSize, stackVSize, bb, use_spots) if (~exist('use_spots', 'var') || use_spots) - shifts.h = round((stackHSize - bb(:, 3)) / 2); + shifts.u = round((stackUSize - bb(:, 3)) / 2); shifts.v = round((stackVSize - bb(:, 4)) / 2); else - shifts.h = round((stackHSize - bb(:, 5)) / 2); - shifts.v = round((stackVSize - bb(:, 4)) / 2); + shifts.u = round((stackUSize - bb(:, 4)) / 2); + shifts.v = round((stackVSize - bb(:, 5)) / 2); end end diff --git a/zUtil_ForwardSim/gtFwdSimPredictGrainVolumeSize.m b/zUtil_ForwardSim/gtFwdSimPredictGrainVolumeSize.m index b4577f0a..a53595f1 100644 --- a/zUtil_ForwardSim/gtFwdSimPredictGrainVolumeSize.m +++ b/zUtil_ForwardSim/gtFwdSimPredictGrainVolumeSize.m @@ -14,11 +14,11 @@ function vol_size = gtFwdSimPredictGrainVolumeSize(gr, parameters, use_polyhedro bb = gr.bb; end - stackHSize = gr.proj.num_cols; + stackUSize = gr.proj.num_cols; stackVSize = gr.proj.num_rows; selected = gr.selected; vol_size = gtFwdSimPredictVolumeSize(gr.center, omegas(selected), ... - bb(selected, :), parameters, stackHSize, stackVSize, use_polyhedron); + bb(selected, :), parameters, stackUSize, stackVSize, use_polyhedron); end diff --git a/zUtil_ForwardSim/gtFwdSimPredictVolumeSize.m b/zUtil_ForwardSim/gtFwdSimPredictVolumeSize.m index 1642c522..18a7d36c 100644 --- a/zUtil_ForwardSim/gtFwdSimPredictVolumeSize.m +++ b/zUtil_ForwardSim/gtFwdSimPredictVolumeSize.m @@ -1,4 +1,4 @@ -function vol_size = gtFwdSimPredictVolumeSize(gr_center, omegas, bb, parameters, stackHSize, stackVSize, use_polyhedron) +function vol_size = gtFwdSimPredictVolumeSize(gr_center, omegas, bb, parameters, stackUSize, stackVSize, use_polyhedron) if (~exist('use_polyhedron', 'var') || isempty(use_polyhedron)) use_polyhedron = false; end @@ -16,7 +16,7 @@ function vol_size = gtFwdSimPredictVolumeSize(gr_center, omegas, bb, parameters, else % We should in the future handle properly vertical detector % (general geometry) maybe determining a convex shape of the grain! - vol_size = [stackHSize, stackHSize, stackVSize]; + vol_size = [stackUSize, stackUSize, stackVSize]; oversize_vol = fsim.oversizeVol / fsim.oversize; end diff --git a/zUtil_ForwardSim/gtShowFsim.m b/zUtil_ForwardSim/gtShowFsim.m index 63333b83..629e541a 100644 --- a/zUtil_ForwardSim/gtShowFsim.m +++ b/zUtil_ForwardSim/gtShowFsim.m @@ -1609,7 +1609,7 @@ function sfShowMontage(hObj, ~, varargin) % prepare the stack [difstack, shifts] = gtFwdSimBuildDifstackSpots(ids, [], parameters, ... - spotsCommProps.stackHSize, spotsCommProps.stackVSize, ... + spotsCommProps.stackUSize, spotsCommProps.stackVSize, ... spotsCommProps.Xsize, spotsCommProps.Ysize, ... bb); @@ -1709,7 +1709,7 @@ function sfUpdateFullImage(hObj, ~) % prepare the stack [~, shifts] = gtFwdSimBuildDifstackSpots(ids, [], parameters, ... - spotsCommProps.stackHSize, spotsCommProps.stackVSize, ... + spotsCommProps.stackUSize, spotsCommProps.stackVSize, ... spotsCommProps.Xsize, spotsCommProps.Ysize, ... bb); -- GitLab