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

6D-PhantomGeneration: fixed verbose output

parent c0e55a16
No related branches found
No related tags found
No related merge requests found
function [proj, refor, or] = gt6DCreateProjDataFromGrainCluster(grs_list, phase_id)
% FUNCTION [proj, refor, or] = gt6DCreateProjDataFromGrainCluster(grs_list, phase_id)
function [proj, refor, or] = gt6DCreateProjDataFromGrainCluster(grs_list, phase_id, varargin)
% FUNCTION [proj, refor, or] = gt6DCreateProjDataFromGrainCluster(grs_list, phase_id, varargin)
% proj: is a grain.proj structure
% refor: is a grain structure for the average orientation in the average
% point
......@@ -9,6 +9,10 @@ function [proj, refor, or] = gt6DCreateProjDataFromGrainCluster(grs_list, phase_
if (~exist('phase_id', 'var'))
phase_id = 1;
end
conf = struct('verbose', false);
conf = parse_pv_pairs(conf, varargin);
num_grains = numel(grs_list);
if (~isstruct(grs_list))
fprintf('Loading grains: ')
......@@ -26,15 +30,17 @@ function [proj, refor, or] = gt6DCreateProjDataFromGrainCluster(grs_list, phase_
p = gtLoadParameters();
symm = gtCrystGetSymmetryOperators(p.cryst.crystal_system);
cat(1, grs(:).R_vector)
fprintf('Reciprocal disorientations:\n')
for ii_g_1 = 1:num_grains
grs_to_check = (ii_g_1+1):num_grains;
if (numel(grs_to_check) > 0)
fprintf(' - Disorientations from grain: %d\n', grs(ii_g_1).id)
for ii_g_2 = grs_to_check
dis_angle = gtDisorientation(grs(ii_g_1).R_vector', grs(ii_g_2).R_vector', symm);
fprintf(' + Grain %d: %f\n', grs(ii_g_2).id, dis_angle);
if (conf.verbose)
cat(1, grs(:).R_vector)
fprintf('Reciprocal disorientations:\n')
for ii_g_1 = 1:num_grains
grs_to_check = (ii_g_1+1):num_grains;
if (numel(grs_to_check) > 0)
fprintf(' - Disorientations from grain: %d\n', grs(ii_g_1).id)
for ii_g_2 = grs_to_check
dis_angle = gtDisorientation(grs(ii_g_1).R_vector', grs(ii_g_2).R_vector', symm);
fprintf(' + Grain %d: %f\n', grs(ii_g_2).id, dis_angle);
end
end
end
end
......@@ -65,28 +71,28 @@ function [proj, refor, or] = gt6DCreateProjDataFromGrainCluster(grs_list, phase_
grs(ii_g).proj.centerpix - vol_half_size, ...
grs(ii_g).proj.centerpix + vol_half_size ];
end
estim_space_bbox_pix = [floor(min(space_bboxes(:, 1:3), [], 1)), ceil(max(space_bboxes(:, 4:6), [], 1))]
bbox_size_pix = estim_space_bbox_pix(4:6) - estim_space_bbox_pix(1:3)
estim_space_bbox_pix = [floor(min(space_bboxes(:, 1:3), [], 1)), ceil(max(space_bboxes(:, 4:6), [], 1))];
bbox_size_pix = estim_space_bbox_pix(4:6) - estim_space_bbox_pix(1:3);
estim_space_bbox_mm = [ ...
gtGeoSam2Sam(estim_space_bbox_pix(1:3), p.recgeo, p.samgeo, false, false), ...
gtGeoSam2Sam(estim_space_bbox_pix(4:6), p.recgeo, p.samgeo, false, false) ];
bbox_size_mm = estim_space_bbox_mm(4:6) - estim_space_bbox_mm(1:3)
bbox_size_mm = estim_space_bbox_mm(4:6) - estim_space_bbox_mm(1:3);
for ii_g = num_grains:-1:1
sampler = GtOrientationSampling(p, grs(ii_g));
sampler = GtOrientationSampling(p, grs(ii_g), 'verbose', conf.verbose);
odfw_R_vectors{ii_g} = sampler.guess_ODF_BB()';
end
r_vecs = cat(1, odfw_R_vectors{:});
estim_orient_bbox = [min(r_vecs, [], 1), max(r_vecs, [], 1)]
estim_orient_bbox = [min(r_vecs, [], 1), max(r_vecs, [], 1)];
bbox_size_rod = estim_orient_bbox(4:6) - estim_orient_bbox(1:3);
% oversizing the orienation a bit
delta_bbox_size_rod = bbox_size_rod * 0.05 ;
estim_orient_bbox = estim_orient_bbox + [-delta_bbox_size_rod, delta_bbox_size_rod]
delta_bbox_size_rod = bbox_size_rod * 0.05;
estim_orient_bbox = estim_orient_bbox + [-delta_bbox_size_rod, delta_bbox_size_rod];
bbox_size_rod = estim_orient_bbox(4:6) - estim_orient_bbox(1:3);
bbox_size_deg = 2 * atand(bbox_size_rod)
bbox_size_deg = 2 * atand(bbox_size_rod);
% Let's now compute the bb on the images, by computing for each corner
% of the space bb, the position on the detector of each corner of the
......@@ -125,6 +131,27 @@ function [proj, refor, or] = gt6DCreateProjDataFromGrainCluster(grs_list, phase_
or(ii_g) = gtGrainAllblobsFilterOrder(or(ii_g), refgr_omind_ind);
end
if (conf.verbose)
f = figure();
ax = axes('parent', f);
hold(ax, 'on');
gt6DPlotOrientationBBox(ax, cat(1, or(:).R_vector));
for ii_g = 1:num_grains
scatter3(ax, grs(ii_g).R_vector(1), grs(ii_g).R_vector(2), grs(ii_g).R_vector(3), 30);
end
hold(ax, 'off');
drawnow();
fprintf('\n');
fprintf('Estimated spatial voxel BBox: [%3d, %3d, %3d] -> [%3d, %3d, %3d]\n', estim_space_bbox_pix);
fprintf(' BBox size: %3d, %3d, %3d (%f, %f, %f mm)\n', bbox_size_pix, bbox_size_mm);
fprintf(' Estimated orientation BBox: [%3.3f, %3.3f, %3.3f] -> [%3.3f, %3.3f, %3.3f]\n', estim_orient_bbox);
fprintf(' BBox size: %3.3f, %3.3f, %3.3f (deg)\n', bbox_size_deg);
fprintf('\n');
end
or_abs = cat(1, or(:).allblobs);
uvw_tab = zeros(numel(ref_included(ref_selected)), num_ors, 3);
for ii_g = 1:num_ors
......@@ -164,8 +191,10 @@ function [proj, refor, or] = gt6DCreateProjDataFromGrainCluster(grs_list, phase_
refor_ns = refor.allblobs.eta(ref_included(ref_selected));
img_sizes = img_bboxes(:, 4:6) - img_bboxes(:, 1:3) + 1;
fprintf('du %8d, dv %8d, dw %8d, eta: %5.3f\n', ...
[img_sizes, refor_ns]');
if (conf.verbose)
fprintf('du %8d, dv %8d, dw %8d, eta: %5.3f\n', ...
[img_sizes, refor_ns]');
end
% We avoid the vertical spots for convenience
inconvenient_etas = acosd(abs(cosd(refor_ns))) < 15;
......
function gt6DPlotOrientationBBox(ax, sampled_R_vecs, show_vertices)
if (~exist('show_vertices', 'var') || isempty(show_vertices))
show_vertices = false;
end
min_sampled_R_vecs = min(sampled_R_vecs, [], 1);
max_sampled_R_vecs = max(sampled_R_vecs, [], 1);
bbox_R_vecs = [ ...
min_sampled_R_vecs(1), min_sampled_R_vecs(2), min_sampled_R_vecs(3); ...
min_sampled_R_vecs(1), min_sampled_R_vecs(2), max_sampled_R_vecs(3); ...
min_sampled_R_vecs(1), max_sampled_R_vecs(2), min_sampled_R_vecs(3); ...
min_sampled_R_vecs(1), max_sampled_R_vecs(2), max_sampled_R_vecs(3); ...
max_sampled_R_vecs(1), min_sampled_R_vecs(2), min_sampled_R_vecs(3); ...
max_sampled_R_vecs(1), min_sampled_R_vecs(2), max_sampled_R_vecs(3); ...
max_sampled_R_vecs(1), max_sampled_R_vecs(2), min_sampled_R_vecs(3); ...
max_sampled_R_vecs(1), max_sampled_R_vecs(2), max_sampled_R_vecs(3); ...
];
faces = [ ...
1 5; 2 6; 3 7; 4 8; ...
1 3; 2 4; 5 7; 6 8; ...
1 2; 3 4; 5 6; 7 8; ...
];
if (show_vertices)
scatter3(ax, bbox_R_vecs(:, 1), bbox_R_vecs(:, 2), bbox_R_vecs(:, 3), 30, 'y', 'filled');
end
patch('parent', ax, 'Faces', faces, 'Vertices', bbox_R_vecs, 'FaceColor', 'w');
end
......@@ -27,7 +27,7 @@ function gt6DPlotVoxelProperties(orientation_vols, ODF6D, voxel)
hold(ax1, 'on');
show_bbox(ax1, sampled_R_vecs);
gt6DPlotOrientationBBox(ax1, sampled_R_vecs);
show_average_orientation(ax1, voxel_avg_R_vec);
......@@ -60,27 +60,3 @@ function show_orientation_colormap(ax, sampled_R_vecs, intensities, cmap, thr_mi
set(cb, 'Units', 'centimeters')
set(cb, 'Position', [17.35 1 0.65 12])
end
function show_bbox(ax, sampled_R_vecs)
min_sampled_R_vecs = min(sampled_R_vecs, [], 1);
max_sampled_R_vecs = max(sampled_R_vecs, [], 1);
bbox_R_vecs = [ ...
min_sampled_R_vecs(1), min_sampled_R_vecs(2), min_sampled_R_vecs(3); ...
min_sampled_R_vecs(1), min_sampled_R_vecs(2), max_sampled_R_vecs(3); ...
min_sampled_R_vecs(1), max_sampled_R_vecs(2), min_sampled_R_vecs(3); ...
min_sampled_R_vecs(1), max_sampled_R_vecs(2), max_sampled_R_vecs(3); ...
max_sampled_R_vecs(1), min_sampled_R_vecs(2), min_sampled_R_vecs(3); ...
max_sampled_R_vecs(1), min_sampled_R_vecs(2), max_sampled_R_vecs(3); ...
max_sampled_R_vecs(1), max_sampled_R_vecs(2), min_sampled_R_vecs(3); ...
max_sampled_R_vecs(1), max_sampled_R_vecs(2), max_sampled_R_vecs(3); ...
];
faces = [ ...
1 5; 2 6; 3 7; 4 8; ...
1 3; 2 4; 5 7; 6 8; ...
1 2; 3 4; 5 6; 7 8; ...
];
scatter3(ax, bbox_R_vecs(:, 1), bbox_R_vecs(:, 2), bbox_R_vecs(:, 3), 30, 'y', 'filled');
patch('parent', ax, 'Faces', faces, 'Vertices', bbox_R_vecs, 'FaceColor', 'w');
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