Mentions légales du service

Skip to content
Snippets Groups Projects
join.m 2.10 KiB
function [Lab,Off,varargout] = join(Labs,Offs,varargin)
%ALIGN Summary of this function goes here
%   Detailed explanation goes here

nvararg = nargin-2;
numLab = numel(Labs);
Maxs = cell(size(Labs));

filter = logical([1,1,0,0,0]);

for lab = 1:numLab
    if ~isempty(Offs{lab}); break; end
end

Off = Offs{lab};
numDim = numel(Off);
Max = size(Labs{lab});
Max(end+1:numDim) = 1;
Max = Max+Off;

for lab = 1:numLab
    if isempty(Labs{lab}); continue; end
    
    Maxs{lab} = size(Labs{lab});
    Maxs{lab}(end+1:numDim) = 1;
    Maxs{lab} = Maxs{lab} + Offs{lab};
    
    Off = min(Offs{lab},Off);
    Max = max(Maxs{lab},Max);
end

Size = Max-Off;
Lab = zeros(Size);

[varargout,Size_it,Max_it,Maxs_it] = deal(cell(1,nvararg));

for it = 1:nvararg
    for lab = 1:numLab
        if ~isempty(varargin{it}{lab})
            break
        end
    end
    
    numDim = numel(Off);
    Max_it{it} = size(varargin{it}{lab});
    Max_it{it}(end+1:numDim) = 1;
    Max_it{it} = Max_it{it}+Off;
    
    for lab = 1:numLab
        if isempty(varargin{it}{lab}); continue; end
        
        Maxs_it{it}{lab} = size(varargin{it}{lab});
        Maxs_it{it}{lab}(end+1:numDim) = 1;
        Maxs_it{it}{lab} = Maxs_it{it}{lab} + Offs{lab};
        
        Max_it{it} = max(Maxs_it{it}{lab},Max);
    end
    
    Size_it{it} = Max_it{it}-Off;
    varargout{it} = nan(Size_it{it});
end

for lab = 1:numLab
    if isempty(Labs{lab}); continue; end
    
    padPre  = Offs{lab}-Off;
    padPost = Max-Maxs{lab};
    
    padPre (~filter) = 0;
    padPost(~filter) = 0;
    
    Lab_ = padarray(Labs{lab},padPre ,0,'pre' );
    Lab_ = padarray(Lab_     ,padPost,0,'post');
    
    Lab(Lab_==lab) = lab;
    
    for it = 1:nvararg
        %padPre  = Offs{lab}-Off;
        padPost = Max_it{it}-Maxs_it{it}{lab};
        
        %padPre (~filter) = 0;
        padPost(~filter) = 0;
        
        varargout_ = padarray(varargin{it}{lab},padPre ,nan,'pre' );
        varargout_ = padarray(varargout_        ,padPost,nan,'post');
        
        Lab_it = Lab_.*ones(Size_it{it});
        varargout{it}(Lab_it==lab) = varargout_(Lab_it==lab);
    end
end

end