Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 8d037423 authored by DIB Elian's avatar DIB Elian
Browse files

Updated align join and split functions to take multiple inputs

Removed unnecessary function alignJoin
parent fb8a92ea
No related branches found
No related tags found
No related merge requests found
function [Val1,Off1,Val2,Off2] = align(Val1,Off1,Val2,Off2)
function [Vals,Offs,varargout] = align(Vals,Offs,varargin)
%ALIGN Summary of this function goes here
% Detailed explanation goes here
if isempty(Val1)
Val1 = Val2;
Off1 = Off2;
elseif ~isempty(Val2)
Size1 = size(Val1);
Size2 = size(Val2);
Max1 = Off1+Size1;
Max2 = Off2+Size2;
Off_ = min(Off1,Off2);
Max_ = max(Max1,Max2);
Val1 = padarray(Val1,Off1-Off_,nan,'pre');
Val2 = padarray(Val2,Off2-Off_,nan,'pre');
nvararg = nargin-2;
numVal = numel(Vals);
Maxs = cell(size(Vals));
Off_ = Offs{1};
Max_ = Offs{1}+size(Vals{1});
for val = 1:numVal
Maxs{val} = Offs{val}+size(Vals{val});
Off1 = Off_;
Off2 = Off_;
Off_ = min(Offs{val},Off_);
Max_ = max(Maxs{val},Max_);
end
Val1 = padarray(Val1,Max_-Max1,nan,'post');
Val2 = padarray(Val2,Max_-Max2,nan,'post');
varargout = varargin;
for val = 1:numVal
Vals{val} = padarray(Vals{val},Offs{val}-Off_,nan,'pre');
Vals{val} = padarray(Vals{val},Max_-Maxs{val},nan,'post');
Offs{val} = Off_;
for it = 1:nvararg
varargout{it}{val} = padarray(varargout{it}{val},Offs{val}-Off_,nan,'pre');
varargout{it}{val} = padarray(varargout{it}{val},Max_-Maxs{val},nan,'post');
end
end
end
\ No newline at end of file
function [Val1,Off1,Val2,Off2] = alignJoin(Val1,Off1,Val2,Off2)
%ALIGNJOIN Summary of this function goes here
% Detailed explanation goes here
if isempty(Val1)
Val1 = Val2;
Off1 = Off2;
elseif ~isempty(Val2)
Size1 = size(Val1);
Size2 = size(Val2);
Max1 = Off1+Size1;
Max2 = Off2+Size2;
Off_ = min(Off1,Off2);
Max_ = max(Max1,Max2);
Val1 = padarray(Val1,Off1-Off_,nan,'pre');
Val2 = padarray(Val2,Off2-Off_,nan,'pre');
Off1 = Off_;
Off2 = Off_;
Val1 = padarray(Val1,Max_-Max1,nan,'post');
Val2 = padarray(Val2,Max_-Max2,nan,'post');
M1 = ~isnan(Val1);
M2 = ~isnan(Val2);
Val1(M1) = Val1(M1);
Val1(M2) = Val2(M2);
end
end
\ No newline at end of file
function Val1 = join(Val1,Val2)
function [Val,Lab,Off,varargout] = join(Vals,Labs,Offs,varargin)
%JOIN Summary of this function goes here
% Detailed explanation goes here
if isempty(Val1)
Val1 = Val2;
elseif ~isempty(Val2)
M1 = ~isnan(Val1);
M2 = ~isnan(Val2);
nvararg = nargin-3;
numLab = numel(Labs);
Sizes = cell(1,numLab);
Off = Offs{1};
Size = Off+size(Labs{1});
for lab = 1:numLab
Off = min(Off,Offs{lab});
Sizes{lab} = size(Labs{lab});
Size = max(Size,Offs{lab}+Sizes{lab});
end
numDim = numel(Off);
[Val,Lab,varargout{1:nvararg}] = deal(nan(Size));
for lab = 1:numLab
Mask = Labs{lab}==lab;
gv = arrayfun(@(sl,ol,o) (1:sl)+ol-o,Sizes{lab},Offs{lab},Off,'UniformOutput',false);
GV = cell(1,numDim);
[GV{:}] = ndgrid(gv{:});
inds = sub2ind(Size,GV{:});
inds = inds(Mask(:));
Val1(M1) = Val1(M1);
Val1(M2) = Val2(M2);
Val(inds) = Vals{lab}(Mask(:));
Lab(inds) = Labs{lab}(Mask(:));
for it = 1:nvararg
varargout{it}(inds) = varargin{it}{lab}(Mask(:));
end
end
end
\ No newline at end of file
function [M1,M2] = split(M,Mask)
function [Vals,Labs,Offs,varargout] = split(Val,Lab,Off,varargin)
%SPLIT Summary of this function goes here
% Detailed explanation goes here
[M1,M2] = deal(M);
M1(~Mask) = NaN;
M2( Mask) = NaN;
nvararg = nargin-3;
numLab = max(Lab(:));
[Vals,Labs,Offs,varargout{1:nvararg}] = deal(cell(1,numLab));
for lab = 1:numLab
[Vals{lab},gv] = utils.tighten(Val,Lab==lab);
Labs{lab} = Lab(gv{:});
Offs{lab} = Off-1+cellfun(@(v) v(1),gv);
for it = 1:nvararg
varargout{it}{lab} = varargin{it}(gv{:});
end
end
end
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment