From 27291376fe6b385f095ef6ac01ec1818852cba3d Mon Sep 17 00:00:00 2001 From: Elian Dib <elian.dib@inria.fr> Date: Thu, 25 Jul 2019 12:14:16 +0200 Subject: [PATCH] Modified function for color light fields --- align.m | 3 +-- complete.m | 20 +++++++++----------- completeOriginal.m | 24 +++++++++++++++++------- factorize.m | 3 ++- fuse.m | 5 ++--- getQueryCoordsAffine.m | 1 + join.m | 2 +- project.m | 14 ++++++-------- separate.m | 19 ++++++++++++------- 9 files changed, 51 insertions(+), 40 deletions(-) diff --git a/align.m b/align.m index 94f52e0..d6773c5 100644 --- a/align.m +++ b/align.m @@ -6,14 +6,13 @@ function [Ref,Rec] = align(Ref,Rec) [OffRec,ColRec,LabRec] = SR.SetToFields(Rec); numLab = numel(LabRef); -filter = logical([1,1,1,0,0]); for lab = 1:numLab LabRef{lab}(LabRef{lab}==0) = nan; LabRec{lab}(LabRec{lab}==0) = nan; [Cols,Offs,Labs] = utils.align({ColRef{lab},ColRec{lab}},... - {OffRef{lab},OffRec{lab}},filter,{LabRef{lab},LabRec{lab}}); + {OffRef{lab},OffRec{lab}},{LabRef{lab},LabRec{lab}}); [ColRef{lab},ColRec{lab}] = deal(Cols{:}); [OffRef{lab},OffRec{lab}] = deal(Offs{:}); diff --git a/complete.m b/complete.m index ff020ad..8c952b3 100644 --- a/complete.m +++ b/complete.m @@ -2,27 +2,25 @@ function [Ref,Value,Mask] = complete(Ref,method,varargin) %COMPLETESET Summary of this function goes here % Detailed explanation goes here -[Offset,Color,Label] = SR.SetToFields(Ref); +[Offset,Color] = SR.SetToFields(Ref); Size = cellfun(@size,Color,'UniformOutput',false); [ImgSize,ImgRes] = cellfun(@(x) deal(x(1:3),x(4:end)),Size,'UniformOutput',false); RefSize = size(Ref); -numLab = numel(Label); +numLab = numel(Color); for lab = 1:numLab - Color{lab} = reshape(Color{lab},prod(ImgSize{lab}),prod(ImgRes{lab})); - Label{lab} = reshape(Label{lab},prod(ImgSize{lab}),prod(ImgRes{lab})); - Color{lab}(~(Label{lab}==lab)) = nan; + Color{lab} = reshape(Color{lab},prod(ImgSize{lab}),[]); end switch method case 'global' Value = {Set2Matrix(Color)}; - Mask = {Set2Matrix(Label)}; case 'local' Value = Color; - Mask = Label; end +Mask = Value; + for it = 1:numel(Value) [Value{it},Mask{it}] = utils.complete(Value{it},varargin{:}); end @@ -37,10 +35,10 @@ switch method end for lab = 1:numLab - Color{lab} = reshape(Color{lab},[ImgSize{lab},ImgRes{lab}]); Label{lab} = reshape(Label{lab},[ImgSize{lab},ImgRes{lab}]); - Color{lab}(~Label{lab}) = nan; - Label{lab} = lab*double(Label{lab}); + Color{lab} = reshape(Color{lab},[ImgSize{lab},ImgRes{lab}]); + + Label{lab} = lab*double(any(Label{lab},3)); end Color = reshape(Color,RefSize); @@ -52,7 +50,7 @@ Ref = SR.FieldsToSet(Offset,Color,Label); function Matrix = Set2Matrix(Set) Matrix = cell2mat(reshape(Set,[],1)); end - + function Set = Matrix2Set(Matrix,ImgSize,ImgRes) for iter = 1:numel(ImgSize) ImgSize{iter} = prod(ImgSize{iter}); diff --git a/completeOriginal.m b/completeOriginal.m index ab2af9f..3eae520 100644 --- a/completeOriginal.m +++ b/completeOriginal.m @@ -3,17 +3,27 @@ function Ref = completeOriginal(Ref) % Detailed explanation goes here [Offset,Color,Label] = SR.SetToFields(Ref); -Size = cellfun(@size,Color,'UniformOutput',false); -[ImgSize,ImgRes] = cellfun(@(x) deal(x(1:3),x(4:end)),Size,'UniformOutput',false); numLab = numel(Label); for lab = 1:numLab - Label{lab} = reshape(Label{lab},prod(ImgSize{lab}),prod(ImgRes{lab})); - Label{lab} = repmat(any(Label{lab}==lab,2),1,size(Label{lab},2)); - Label{lab} = lab*double(Label{lab}); - Label{lab} = reshape(Label{lab},[ImgSize{lab},ImgRes{lab}]); - Color{lab}(Label{lab}~=lab) = nan; + LFSize = size(Color{lab}); + ImgSize = LFSize(1:2); + ImgRes = LFSize(4:end); + + ImgSizeC = num2cell(ImgSize); + ImgResC = num2cell(ImgRes); + + Label{lab} = reshape(Label{lab},prod(ImgSize),[]); + Color{lab} = reshape(Color{lab},prod(ImgSize),[]); + + M = any(Label{lab}==lab,2); + Label{lab}( M,:) = lab; + Label{lab}(~M,:) = 0; + Color{lab}(~M,:) = nan; + + Label{lab} = reshape(Label{lab},ImgSizeC{:},[],ImgResC{:}); + Color{lab} = reshape(Color{lab},ImgSizeC{:},[],ImgResC{:}); end Ref = SR.FieldsToSet(Offset,Color,Label); diff --git a/factorize.m b/factorize.m index d527e59..061941c 100644 --- a/factorize.m +++ b/factorize.m @@ -9,6 +9,7 @@ RefSize = size(Ref); numLab = numel(Label); for lab = 1:numLab + Label{lab} = Label{lab}.*ones(Size{lab}); Color{lab} = reshape(Color{lab},prod(ImgSize{lab}),prod(ImgRes{lab})); Label{lab} = reshape(Label{lab},prod(ImgSize{lab}),prod(ImgRes{lab})); Color{lab}(~(Label{lab}==lab)) = nan; @@ -39,7 +40,7 @@ end for lab = 1:numLab Color{lab} = reshape(Color{lab},[ImgSize{lab},ImgRes{lab}]); - Label{lab} = lab.*double(~isnan(Color{lab})); + Label{lab} = lab*double(any(~isnan(Color{lab}),3)); end Color = reshape(Color,RefSize); diff --git a/fuse.m b/fuse.m index 44cbf54..76bafe8 100644 --- a/fuse.m +++ b/fuse.m @@ -14,20 +14,19 @@ elseif isempty(VisSet) end numLab = numel(LabVis); -filter = logical([1,1,1,0,0]); for lab = 1:numLab LabVis{lab}(LabVis{lab}==0) = nan; LabOcc{lab}(LabOcc{lab}==0) = nan; [Cols,Offs,Labs] = utils.align({ColVis{lab},ColOcc{lab}},... - {OffVis{lab},OffOcc{lab}},filter,{LabVis{lab},LabOcc{lab}}); + {OffVis{lab},OffOcc{lab}},{LabVis{lab},LabOcc{lab}}); for it = 1:numel(Labs) Labs{it} = it.*double(Labs{it}==lab); end - [ColVis{lab},LabVis{lab},OffVis{lab}] = utils.join(Cols,Labs,Offs); + [LabVis{lab},OffVis{lab},ColVis{lab}] = utils.join(Labs,Offs,Cols); LabVis{lab} = lab.*double(LabVis{lab}~=0); end diff --git a/getQueryCoordsAffine.m b/getQueryCoordsAffine.m index 675aa50..70e8c07 100644 --- a/getQueryCoordsAffine.m +++ b/getQueryCoordsAffine.m @@ -17,6 +17,7 @@ LFDisp(isnan(LFDisp))=0; % Compute projected coordinates of reference samples gv = arrayfun(@(x) 1:x,LFSize,'UniformOutput',false); +gv{3} = 1; ugv = reshape(gv{4},1,1,1,[],1); vgv = reshape(gv{5},1,1,1,1,[]); ugv = ugv-centerView(1); diff --git a/join.m b/join.m index afef225..24d8607 100644 --- a/join.m +++ b/join.m @@ -4,7 +4,7 @@ function Ref = join(Ref) [Offset,Color,Label] = SR.SetToFields(Ref); -[Color,Label,Offset] = utils.join(Color,Label,Offset); +[Label,Offset,Color] = utils.join(Label,Offset,Color); Ref = SR.FieldsToSet(Offset,Color,Label); diff --git a/project.m b/project.m index 04a4cc5..e91f419 100644 --- a/project.m +++ b/project.m @@ -14,20 +14,18 @@ for lab = 1:numLab SizeRef = size(ColorRef{lab}); SizeRef(end+1:5) = 1; ImgSizeRef = SizeRef(1:3); - ImgResRef = SizeRef(4:end); - ColorRef{lab} = reshape(ColorRef{lab},prod(ImgSizeRef),prod(ImgResRef)); - LabelRef{lab} = reshape(LabelRef{lab},prod(ImgSizeRef),prod(ImgResRef)); - ColorRef{lab}(~( LabelRef{lab}==lab)) = 0; + M = (LabelRef{lab}~=lab) & true(SizeRef); + ColorRef{lab}(M) = 0; + ColorRef{lab} = reshape(ColorRef{lab},prod(ImgSizeRef),[]); SizeRec = size(ColorRec{lab}); SizeRec(end+1:5) = 1; ImgSizeRec = SizeRec(1:3); - ImgResRec = SizeRec(4:end); - ColorRec{lab} = reshape(ColorRec{lab},prod(ImgSizeRec),prod(ImgResRec)); - LabelRec{lab} = reshape(LabelRec{lab},prod(ImgSizeRec),prod(ImgResRec)); - ColorRec{lab}(~(LabelRec{lab}==lab)) = 0; + M = (LabelRec{lab}~=lab) & true(SizeRec); + ColorRec{lab}(M) = 0; + ColorRec{lab} = reshape(ColorRec{lab},prod(ImgSizeRec),[]); end switch method diff --git a/separate.m b/separate.m index 63c98e6..63f9858 100644 --- a/separate.m +++ b/separate.m @@ -3,20 +3,25 @@ function [VisRef,OccRef] = separate(Ref,Mask) % Detailed explanation goes here [Offset,ColVis,LabVis] = SR.SetToFields(Ref); -numLab = numel(LabVis); +numLab = numel(Ref); ColOcc = ColVis; LabOcc = LabVis; for lab = 1:numLab - LabOcc{lab} = LabVis{lab}==lab & ~Mask{lab}; - LabVis{lab} = LabVis{lab}==lab & Mask{lab}; + MVis = LabVis{lab}==lab & Mask{lab}; + MOcc = LabOcc{lab}==lab & ~Mask{lab}; - ColVis {lab}( ~LabVis{lab}) = nan; - ColOcc {lab}(~~LabVis{lab}) = nan; + LabVis{lab}( MVis) = lab; + LabVis{lab}(~MVis) = 0; + LabOcc{lab}( MOcc) = lab; + LabOcc{lab}(~MOcc) = 0; - LabVis{lab} = lab*double(LabVis{lab}); - LabOcc{lab} = lab*double(LabOcc{lab}); + MVis = MVis & true(size(ColVis{lab})); + MOcc = MOcc & true(size(ColOcc{lab})); + + ColVis{lab}(~MVis) = nan; + ColOcc{lab}(~MOcc) = nan; end VisRef = SR.FieldsToSet(Offset,ColVis,LabVis); -- GitLab