Skip to content
Snippets Groups Projects
gt6DMergeRealSpaceVolumes.m 1.34 KiB
Newer Older
function [gr_center_pix, vol_size_pix, bbox_pix] = gt6DMergeRealSpaceVolumes(grs, det_index, oversize)
%     num_ors = numel(grs);
%     vol_sizes = zeros(num_ors, 3);
%     vol_centers = zeros(num_ors, 3);
%     for ii = 1:num_ors
%         vol_sizes(ii, :) = [ ...
%             grs(ii).proj(det_index).vol_size_y, ...
%             grs(ii).proj(det_index).vol_size_x, ...
%             grs(ii).proj(det_index).vol_size_z ];
%         vol_centers(ii, :) = grs(ii).proj(det_index).centerpix;
%     end

    projs = arrayfun(@(x){x.proj(det_index)}, grs);
    projs = [projs{:}];

    vol_sizes = [cat(1, projs.vol_size_y), cat(1, projs.vol_size_x), cat(1, projs.vol_size_z)];
    vol_centers = cat(1, projs.centerpix);

    vol_half_sizes = vol_sizes / 2;

    min_corners = vol_centers - vol_half_sizes;
    max_corners = vol_centers + vol_half_sizes;

    full_vol_min_corners = min(min_corners, [], 1);
    full_vol_max_corners = max(max_corners, [], 1);

    gr_center_pix = (full_vol_max_corners + full_vol_min_corners) / 2;

    vol_size_pix = full_vol_max_corners - full_vol_min_corners;

    if (exist('oversize', 'var'))
        vol_size_pix = vol_size_pix .* oversize;
    end

    vol_size_pix = ceil(vol_size_pix);

    vol_half_size_pix = vol_size_pix / 2;
    bbox_pix = [floor(gr_center_pix - vol_half_size_pix), ceil(gr_center_pix + vol_half_size_pix)];