diff --git a/LFtoSR.m b/LFtoSR.m index ddf601e4859b78a8cb4d61f556bb7df8ec18c106..f4d2c2266a10b18c989e5cb98543ab0b9cbb250e 100644 --- a/LFtoSR.m +++ b/LFtoSR.m @@ -38,16 +38,17 @@ end % Lightfield properties LFVal = LFSet.Value; LFLab = LFSet.Label; -LFDisp = LFSet.Disparity; +LFDispX = LFSet.DisparityX; +LFDispY = LFSet.DisparityY; LFPos = LFSet.Position; -LFSize = LFSet.Size; +LFSize = size(LFVal); % Number of super-rays to be in the set numLab = max(LFLab(:)); % Initialize super-ray set -[SRVal,SRSize,SRPos,SRDisp,SRLab] = deal(cell(numLab,1)); -SRSet = SR.FieldsToSet(SRVal,SRSize,SRPos,SRDisp,SRLab); +[SRVal,SRLab,SRPos,SRDispX,SRDispY] = deal(cell(numLab,1)); +SRSet = SR.FieldsToSet(SRVal,SRLab,SRPos,SRDispX,SRDispY); % Lightfield grid vectors representing super-ray bounding box ugv = reshape(1:LFSize(1),[],1); @@ -103,7 +104,8 @@ for lab = 1:numLab Mask = LFLab==lab; % Set current super-ray disparity - SRSet(lab).Disparity = median(LFDisp(Mask)); + SRSet(lab).DisparityX = median(LFDispX(Mask)); + SRSet(lab).DisparityY = median(LFDispY(Mask)); % x and y coordinates of each pixel of the super-ray after disparity compensation if relative @@ -136,7 +138,7 @@ for lab = 1:numLab [SRUq,SRVq,SRXq,SRYq] = ndgrid(srugv,srvgv,srxgv,srygv); % Set current super-ray size (size of the bounding box) - SRSet(lab).Size = [numel(srugv),numel(srvgv),numel(srxgv),numel(srygv)]; + SRSize = [numel(srugv),numel(srvgv),numel(srxgv),numel(srygv)]; % Perform disparity compensation if necessary if ~dispComp @@ -159,7 +161,7 @@ for lab = 1:numLab inSRMask = repmat(any(any(inSRMask,1),2),size(inSRMask,1),size(inSRMask,2),1,1); case 'all' % inside super-ray bounding box - inSRMask = true(SRSet(lab).Size); + inSRMask = true(SRSize); end % Set label inside super-ray boundary diff --git a/SRtoLF.m b/SRtoLF.m index e73dd15a4e49ef69a812a847aace374096716d82..3c92dbe63cb5a4d71c474b70ea3ce713555c63f9 100644 --- a/SRtoLF.m +++ b/SRtoLF.m @@ -41,18 +41,19 @@ else end %% Initialize constants -%SRVal = {SRSet.Value}; -%SRLab = {SRSet.Label}; +SRVal = {SRSet.Value}; +% SRLab = {SRSet.Label}; SRPos = {SRSet.Position}; -SRDisp = {SRSet.Disparity}; -SRSize = {SRSet.Size}; +% SRDispX = {SRSet.DisparityX}; +% SRDispY = {SRSet.DisparityY}; +SRSize = cellfun(@size,SRVal,'UniformOutput',false); % Number of super-rays in the set numLab = numel(SRSet); % Lightfield central (reference) view coordinates -uref = floor(SRSet(1).Size(1)/2)+1; -vref = floor(SRSet(1).Size(2)/2)+1; +uref = floor(SRSize{1}(1)/2)+1; +vref = floor(SRSize{1}(2)/2)+1; % Structuring element to dilate super-ray for cubic interpolation se = strel('arbitrary',reshape([0,1,0],1,1,3)|reshape([0,1,0],1,1,1,3)); @@ -76,8 +77,8 @@ if extend end % Initialize lightfield -[LFVal,LFDisp,LFLab,LFBuf] = deal(nan(LFSize)); -LFSet = SR.FieldsToSet(LFVal,LFSize,LFPos,LFDisp,LFLab); +[LFVal,LFLab,LFDispX,LFDispY,LFBuf] = deal(nan(LFSize)); +LFSet = SR.FieldsToSet(LFVal,LFLab,LFPos,LFDispX,LFDispY); switch order case 'ascend' @@ -95,9 +96,10 @@ for lab = sortedLab % Current super-ray properties SRVal = SRSet(lab).Value; - SRSize = SRSet(lab).Size; + SRSize = size(SRVal); SRPos = SRSet(lab).Position; - SRDisp = SRSet(lab).Disparity; + SRDispX = SRSet(lab).DisparityX; + SRDispY = SRSet(lab).DisparityY; SRLab = SRSet(lab).Label; % Super-ray position (offset from reference frame center) @@ -196,10 +198,11 @@ for lab = sortedLab indSRLFMask = indLF(SRLFMask); % Set lightfield pixels values, label and disparity corresponding to current super-ray - LFSet.Value (indSRLFMask) = LFVal(SRLFMask); - LFSet.Label (indSRLFMask) = LFLab(SRLFMask); - LFSet.Disparity(indSRLFMask) = SRDisp; - LFBuf (indSRLFMask) = LFBuf(indSRLFMask)+1; + LFSet.Value (indSRLFMask) = LFVal(SRLFMask); + LFSet.Label (indSRLFMask) = LFLab(SRLFMask); + LFSet.DisparityX(indSRLFMask) = SRDispX; + LFSet.DisparityY(indSRLFMask) = SRDispY; + LFBuf (indSRLFMask) = LFBuf(indSRLFMask)+1; end utils.printSameLine(); diff --git a/align.m b/align.m index ecd70a1230f2d00e7e8cd93068cc348097fca64b..ee62356ce5ab7c489cd013de3a94bbff8430ea8e 100644 --- a/align.m +++ b/align.m @@ -5,12 +5,14 @@ function [SR1Set,SR2Set] = align(SR1Set,SR2Set) SR1Val = {SR1Set.Value}; SR1Lab = {SR1Set.Label}; SR1Pos = {SR1Set.Position}; -SR1Disp = {SR1Set.Disparity}; +SR1DispX = {SR1Set.DisparityX}; +SR1DispY = {SR1Set.DisparityY}; SR2Val = {SR2Set.Value}; SR2Lab = {SR2Set.Label}; SR2Pos = {SR2Set.Position}; -SR2Disp = {SR2Set.Disparity}; +SR2DispX = {SR2Set.DisparityX}; +SR2DispY = {SR2Set.DisparityY}; for lab = 1:numel(SR1Lab) SR1Lab{lab}(SR1Lab{lab}==0) = nan; @@ -25,12 +27,7 @@ for lab = 1:numel(SR1Lab) SR2Lab{lab}(isnan(SR2Lab{lab})) = 0; end -SR1Size = cellfun(@size,SR1Val,'UniformOutput',false); -SR2Size = cellfun(@size,SR2Val,'UniformOutput',false); +SR1Set = SR.FieldsToSet(SR1Val,SR1Lab,SR1Pos,SR1DispX,SR1DispY); +SR2Set = SR.FieldsToSet(SR2Val,SR2Lab,SR2Pos,SR2DispX,SR2DispY); -SR1Set = struct('Value',SR1Val,'Label',SR1Lab,'Position',SR1Pos,... - 'Disparity',SR1Disp,'Size',SR1Size); - -SR2Set = struct('Value',SR2Val,'Label',SR2Lab,'Position',SR2Pos,... - 'Disparity',SR2Disp,'Size',SR2Size); end \ No newline at end of file diff --git a/completeSet.m b/completeSet.m index f815b8e051e23e5991aa6f389e339b7094d42917..768885f0d34a5d3c5ec942a943f1a72d347573af 100644 --- a/completeSet.m +++ b/completeSet.m @@ -2,7 +2,7 @@ function CompSet = completeSet(RefSet,method,varargin) %COMPLETESET Summary of this function goes here % Detailed explanation goes here -[Value,Size,Position,Disparity,~] = SR.SetToFields(RefSet); +[Value,~,Position,DisparityX,DisparityY] = SR.SetToFields(RefSet); SRSize = []; maxSize = []; @@ -26,7 +26,7 @@ parfor it=1:numel(Value) LabelComp{it} = it*double(MaskComp{it}); end -CompSet = SR.FieldsToSet(ValueComp,Size,Position,Disparity,LabelComp); +CompSet = SR.FieldsToSet(ValueComp,LabelComp,Position,DisparityX,DisparityY); %% Auxiliary functions function LFRef = SRtoLF(SRRef) diff --git a/factorizeGlobal.m b/factorizeGlobal.m index 2162c4d4c2b91a210d3bcee5ce0d89bade0e4f1c..85d21b64d2a0aa9962a9ee0204c7b0a5cd386696 100644 --- a/factorizeGlobal.m +++ b/factorizeGlobal.m @@ -11,7 +11,6 @@ SRB = LFtoSR(LFB,SRMask); for lab=1:numel(SRRef) SRBSet(lab).Value = SRB{lab}; - SRBSet(lab).Size = size(SRB{lab}); SRBSet(lab).Label = lab*double(~isnan(SRB{lab})); end @@ -53,5 +52,4 @@ end SRRef = cellfun(@(sr) permute(sr,[3,4,1,2]),SRRef,'UniformOutput',false); end -end - +end \ No newline at end of file diff --git a/factorizeLocal.m b/factorizeLocal.m index f7905ab1104a78c207cfc3ee08faddf5865c7740..df70566ff0bdb280642fd4f33ba23db996144e84 100644 --- a/factorizeLocal.m +++ b/factorizeLocal.m @@ -9,7 +9,6 @@ SRRef = {SRRefSet.Value}; for lab=1:numel(SRRef) SRBSet(lab).Value = SRB{lab}; - SRBSet(lab).Size = size(SRB{lab}); SRBSet(lab).Label = lab*double(~isnan(SRB{lab})); end end \ No newline at end of file diff --git a/fuse.m b/fuse.m index 9c6151f3389c4b66c23b525a380efdc18938da6e..7beb9dfdab12f38f921a7b20e1be77a528c34657 100644 --- a/fuse.m +++ b/fuse.m @@ -2,10 +2,11 @@ function SRBlendSet = fuse(SRVisSet,SRHidSet) %FUSE Summary of this function goes here % Detailed explanation goes here -SRVisVal = {SRVisSet.Value}; -SRVisLab = {SRVisSet.Label}; -SRVisPos = {SRVisSet.Position}; -SRVisDisp = {SRVisSet.Disparity}; +SRVisVal = {SRVisSet.Value}; +SRVisLab = {SRVisSet.Label}; +SRVisPos = {SRVisSet.Position}; +SRVisDispX = {SRVisSet.DisparityX}; +SRVisDispY = {SRVisSet.DisparityY}; SRHidVal = {SRHidSet.Value}; SRHidLab = {SRHidSet.Label}; @@ -19,13 +20,10 @@ end [SRBlendVal,SRBlendPos] = SR.fuseSR(SRVisVal,SRVisPos,SRHidVal,SRHidPos); SRBlendLab = SR.fuseSR(SRVisLab,SRVisPos,SRHidLab,SRHidPos); -SRBlendDisp = SRVisDisp; for lab = 1:numel(SRVisLab) SRBlendLab{lab}(isnan(SRBlendLab{lab})) = 0; end -SRBlendSize = cellfun(@size,SRBlendVal,'UniformOutput',false); -SRBlendSet = struct('Value',SRBlendVal,'Label',SRBlendLab,'Position',SRBlendPos,... - 'Disparity',SRBlendDisp,'Size',SRBlendSize); +SRBlendSet = SR.FieldsToSet(SRBlendVal,SRBlendLab,SRBlendPos,SRVisDispX,SRVisDispY); end \ No newline at end of file diff --git a/pseudoInvGlobal.m b/pseudoInvGlobal.m index 108d9f29b3287e90b0812bdb1246a6fb4e0b84a4..ea44497ac226a5f1c04d76fc4944ca3b56a0bd6f 100644 --- a/pseudoInvGlobal.m +++ b/pseudoInvGlobal.m @@ -8,8 +8,10 @@ SRB = {SRBSet.Value}; SRRef = {SRRefSet.Value}; for lab =1:numel(SRB) - angB = SRBSet(lab).Size(1:2); - angRef = SRRefSet(lab).Size(1:2); + szB = size(SRBSet(lab).Value); + angB = szB(1:2); + szRef = size(SRRefSet(lab).Value); + angRef = szRef(1:2); M = ~isnan(SRBSet(lab).Value); MB = repmat(all(all(M,1),2),[angB,1,1]); MRef = repmat(all(all(M,1),2),[angRef,1,1]); diff --git a/pseudoInvLocal.m b/pseudoInvLocal.m index 2bbbc1bf831054484612e73631f0d099fa34bf41..fbf4861b60e04b34380eb19c2eccfaf899178f34 100644 --- a/pseudoInvLocal.m +++ b/pseudoInvLocal.m @@ -8,8 +8,10 @@ SRB = {SRBSet.Value}; SRRef = {SRRefSet.Value}; for lab =1:numel(SRB) - angB = SRBSet(lab).Size(1:2); - angRef = SRRefSet(lab).Size(1:2); + szB = size(SRBSet(lab).Value); + angB = szB(1:2); + szRef = size(SRRefSet(lab).Value); + angRef = szRef(1:2); M = ~isnan(SRBSet(lab).Value); MB = repmat(all(all(M,1),2),[angB,1,1]); MRef = repmat(all(all(M,1),2),[angRef,1,1]);