diff --git a/align.m b/align.m index 94f52e02cd07a456a135a0e350ee4f815dbcee08..d6773c514f3b266e984592b7477440580f0ba33c 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 ff020ad7a7fe70168fd1ca71510a455ce0872e22..8c952b33900a5263c516fdb1aeaa83fed9e717c9 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 ab2af9fb8bef484b988a9bf1d90860b2a216119c..3eae5209ac474643f5b3b37c0f11e89db69dd47b 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 d527e59772ce52dfc96ee3ab192b65ef48728cec..061941c407b920b056cd62674bbe96938aec9c89 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 44cbf5422c179bc1193f3242270707a872644967..76bafe82eae5d6b7fe1cfc4f2d7413659bbd16a6 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 675aa505d1a21118b3da8d3cf9f534ca50f78e42..70e8c0750e2c7ad805b0b8524defec315e4e4025 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 afef225456bd68c21e4992d9645241c97d5d0328..24d86071f5e42be0d828be43373e157f62bda22d 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 04a4cc50d4a784288a4914013ff239a6d360c1f7..e91f419ee1f609f263e7d2e6873af13a87fb4194 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 63c98e68b419bb8de7c79ad23aa5f80b36929cfe..63f9858d10ea3392d35e26155d3aa600ecded29b 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);