Mentions légales du service

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

Rewrote join and fixed split for color light fields

parent fe75da3a
Branches
Tags
No related merge requests found
function [Col,Lab,Off,varargout] = join(Cols,Labs,Offs,varargin)
%JOIN Summary of this function goes here
function [Lab,Off,varargout] = join(Labs,Offs,varargin)
%ALIGN Summary of this function goes here
% Detailed explanation goes here
nvararg = nargin-3;
nvararg = nargin-2;
numLab = numel(Labs);
Sizes = cell(1,numLab);
Maxs = cell(size(Labs));
filter = logical([1,1,0,0,0]);
for lab = 1:numLab
if ~isempty(Cols{lab})
break
end
if ~isempty(Offs{lab}); break; end
end
Off = Offs{lab};
Max = size(Cols{lab});
numDim = numel(Offs{lab});
numDim = numel(Off);
Max = size(Labs{lab});
Max(end+1:numDim) = 1;
Max = Off+Max;
Max = Max+Off;
for lab = 1:numLab
if isempty(Cols{lab})
continue
end
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(Off,Offs{lab});
Sizes{lab} = size(Cols{lab});
Sizes{lab}(end+1:numDim) = 1;
Max = max(Max,Offs{lab}+Sizes{lab});
Off = min(Offs{lab},Off);
Max = max(Maxs{lab},Max);
end
Size = Max-Off;
[Col,varargout{1:nvararg}] = deal(nan(Size));
Lab = zeros(Size);
for lab = 1:numLab
if isempty(Cols{lab})
continue
[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
Mask = Labs{lab}==lab;
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;
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(:));
Lab_ = padarray(Labs{lab},padPre ,0,'pre' );
Lab_ = padarray(Lab_ ,padPost,0,'post');
Col(inds) = Cols{lab}(Mask(:));
Lab(inds) = Labs{lab}(Mask(:));
Lab(Lab_==lab) = lab;
for it = 1:nvararg
varargout{it}(inds) = varargin{it}{lab}(Mask(:));
%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
......
......@@ -5,9 +5,11 @@ function [Cols,Labs,Offs,varargout] = split(Col,Lab,Off,varargin)
nvararg = nargin-3;
numDim = numel(Off);
numLab = max(Lab(:));
[Cols,Labs,Offs,varargout{1:nvararg}] = deal(cell(1,numLab));
Offs(:) = deal({Off});
Lab = Lab.*ones(size(Col));
for lab = 1:numLab
if ~any(Lab(:)==lab)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment