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

6D: Added tool to visualize voxel-wise orientation space

parent 6ff9a473
No related branches found
No related tags found
No related merge requests found
function gt6DPlotVoxelProperties(orientation_vols, ODF6D, voxel)
voxel_avg_R_vec = squeeze(ODF6D.voxels_avg_R_vectors(voxel(1), voxel(2), voxel(3), :));
intensities_recon = cellfun(@(x)x(voxel(1), voxel(2), voxel(3)), orientation_vols);
sampled_R_vecs = cat(1, ODF6D.R_vectors{:});
f = figure();
plot_for_figure = true;
if (~plot_for_figure)
ax2 = subplot(1, 4, 1, 'parent', f);
plot(ax2, intensities_recon);
ax1 = subplot(1, 4, [2 3 4], 'parent', f);
else
ax1 = axes('parent', f);
set(f, 'Units', 'centimeters')
set(ax1, 'Units', 'centimeters')
set(f, 'Position', [0 0 20 14])
set(f, 'Paperposition', [0 0 20 14])
set(ax1, 'Position', [1.25 1 16.25 12])
end
scatter3(ax1, [], [], []);
hold(ax1, 'on');
show_bbox(ax1, sampled_R_vecs);
show_average_orientation(ax1, voxel_avg_R_vec);
show_orientation_colormap(ax1, sampled_R_vecs, intensities_recon, jet(), 0);
hold(ax1, 'off');
end
function show_average_orientation(ax, avg_R_vec)
scatter3(ax, avg_R_vec(1), avg_R_vec(2), avg_R_vec(3), 30, [0 0 0], 'filled');
end
function show_orientation_colormap(ax, sampled_R_vecs, intensities, cmap, thr_min)
% cmap = [flipud(cmap); 0 0 0];
indexes_recon_min = intensities > thr_min;
voxel_R_vecs = sampled_R_vecs(indexes_recon_min, :);
voxel_intensities = intensities(indexes_recon_min);
min_int = min(voxel_intensities);
max_int = max(voxel_intensities);
% Rescaling
voxel_intensities = (voxel_intensities - min_int) / (max_int - min_int);
voxel_intensities = voxel_intensities * (size(cmap, 1)-1) + 1;
voxel_intensities = round(voxel_intensities);
scatter3(ax, voxel_R_vecs(:, 1), voxel_R_vecs(:, 2), voxel_R_vecs(:, 3), 20, cmap(voxel_intensities, :), 'filled')
cb = colorbar('peer', ax, 'YTickLabel', min_int:((max_int-min_int)/10):max_int, 'location', 'EastOutside');
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