From 7299e1891b3dffeaccd621385ef999b1caac1409 Mon Sep 17 00:00:00 2001 From: Elian Dib <elian.dib@inria.fr> Date: Tue, 7 May 2019 13:44:33 +0200 Subject: [PATCH] Updated align join and split functions --- align.m | 46 ++++++++++++++++++++++++++++++++++++---------- join.m | 32 ++++++++++++++++++++++++++------ split.m | 8 ++++++++ 3 files changed, 70 insertions(+), 16 deletions(-) diff --git a/align.m b/align.m index 0daff7c..6c090af 100644 --- a/align.m +++ b/align.m @@ -1,16 +1,31 @@ -function [Vals,Offs,varargout] = align(Vals,Offs,varargin) +function [Vals,Offs,varargout] = align(Vals,Offs,filter,varargin) %ALIGN Summary of this function goes here % Detailed explanation goes here -nvararg = nargin-2; +nvararg = nargin-3; numVal = numel(Vals); Maxs = cell(size(Vals)); -Off_ = Offs{1}; -Max_ = Offs{1}+size(Vals{1}); +for val = 1:numVal + if ~isempty(Vals{val}) + break + end +end + +Off_ = Offs{val}; +numDim = numel(Off_); +Max_ = size(Vals{val}); +Max_(end+1:numDim) = 1; +Max_ = Max_+Off_; for val = 1:numVal - Maxs{val} = Offs{val}+size(Vals{val}); + if isempty(Vals{val}) + continue + end + + Maxs{val} = size(Vals{val}); + Maxs{val}(end+1:numDim) = 1; + Maxs{val} = Maxs{val} + Offs{val}; Off_ = min(Offs{val},Off_); Max_ = max(Maxs{val},Max_); @@ -19,13 +34,24 @@ end 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'); + if isempty(Vals{val}) + continue + end + + padPre = Offs{val}-Off_; + padPost = Max_-Maxs{val}; + + padPre (~filter) = 0; + padPost(~filter) = 0; + + Vals{val} = padarray(Vals{val},padPre ,nan,'pre' ); + Vals{val} = padarray(Vals{val},padPost,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'); + varargout{it}{val} = padarray(varargout{it}{val},padPre ,nan,'pre' ); + varargout{it}{val} = padarray(varargout{it}{val},padPost,nan,'post'); end + + Offs{val} = Off_; end end \ No newline at end of file diff --git a/join.m b/join.m index 554d7f0..f4cdbb7 100644 --- a/join.m +++ b/join.m @@ -6,19 +6,39 @@ nvararg = nargin-3; numLab = numel(Labs); Sizes = cell(1,numLab); -Off = Offs{1}; -Size = Off+size(Labs{1}); +for lab = 1:numLab + if ~isempty(Vals{lab}) + break + end +end + +Off = Offs{lab}; +Max = size(Vals{lab}); +numDim = numel(Offs{lab}); +Max(end+1:numDim) = 1; +Max = Off+Max; for lab = 1:numLab + if isempty(Vals{lab}) + continue + end + Off = min(Off,Offs{lab}); - Sizes{lab} = size(Labs{lab}); - Size = max(Size,Offs{lab}+Sizes{lab}); + Sizes{lab} = size(Vals{lab}); + Sizes{lab}(end+1:numDim) = 1; + Max = max(Max,Offs{lab}+Sizes{lab}); end -numDim = numel(Off); -[Val,Lab,varargout{1:nvararg}] = deal(nan(Size)); +Size = Max-Off; + +[Val,varargout{1:nvararg}] = deal(nan(Size)); +Lab = zeros(Size); for lab = 1:numLab + if isempty(Vals{lab}) + continue + end + Mask = Labs{lab}==lab; gv = arrayfun(@(sl,ol,o) (1:sl)+ol-o,Sizes{lab},Offs{lab},Off,'UniformOutput',false); diff --git a/split.m b/split.m index 65a9ef4..4f990aa 100644 --- a/split.m +++ b/split.m @@ -3,12 +3,20 @@ function [Vals,Labs,Offs,varargout] = split(Val,Lab,Off,varargin) % Detailed explanation goes here nvararg = nargin-3; +numDim = numel(Off); numLab = max(Lab(:)); [Vals,Labs,Offs,varargout{1:nvararg}] = deal(cell(1,numLab)); +Offs(:) = deal({Off}); + for lab = 1:numLab + if ~any(Lab(:)==lab) + continue + end + [Vals{lab},gv] = utils.tighten(Val,Lab==lab); Labs{lab} = Lab(gv{:}); + gv(end+1:numDim) = deal({1}); Offs{lab} = Off-1+cellfun(@(v) v(1),gv); for it = 1:nvararg -- GitLab