Mentions légales du service

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

Updated functions to accommodate changes in SR structure

parent 1fec2587
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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();
......
......@@ -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
......@@ -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)
......
......@@ -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
......@@ -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
......@@ -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
......@@ -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]);
......
......@@ -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]);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment