Mentions légales du service

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

Perform bottom right padding in codec, remove it from write and read

parent d67ba3d2
No related branches found
No related tags found
No related merge requests found
...@@ -63,9 +63,15 @@ if ~exist(recDir,'dir') ...@@ -63,9 +63,15 @@ if ~exist(recDir,'dir')
mkdir(recDir); mkdir(recDir);
end end
% Do padding
LFSize = size(LFRef);
LFSizePad = ceil(LFSize./LFParams.padding).*LFParams.padding-LFSize;
LFSizePad(3:end) = 0;
LFRef = padarray(LFRef,LFSizePad,'replicate','post');
% Write input yuv file % Write input yuv file
if LFParams.encode if LFParams.encode
[imgSize,imgRes,imgSizePad] = LF.write(LFRef,LFParams,'filename',LFParams.refFilename); [imgSizePad,imgRes] = LF.write(LFRef,LFParams,'filename',LFParams.refFilename);
end end
% Convert inputs for HEVC % Convert inputs for HEVC
...@@ -76,7 +82,11 @@ LFHEVCParams = LF.LFtoHEVC(imgSizePad,imgRes,LFParams,HEVCParams); ...@@ -76,7 +82,11 @@ LFHEVCParams = LF.LFtoHEVC(imgSizePad,imgRes,LFParams,HEVCParams);
% Read output yuv file % Read output yuv file
if LFParams.decode if LFParams.decode
LFRec = LF.read(imgSize,imgRes,LFParams,'filename',LFParams.recFilename); LFRec = LF.read(imgSizePad,imgRes,LFParams,'filename',LFParams.recFilename);
end end
% Undo padding
gv = arrayfun(@(x) 1:x,LFSize,'UniformOutput',false);
LFRec = LFRec(gv{:});
end end
\ No newline at end of file
function [LFRef,imgSizePad] = pad(LFRef,padding)
%PAD Pad lightfield data
% [LFRef,LFSizePad] = pad(LFRef,blockSize)
LFSize = size(LFRef);
imgSize = LFSize(1:3);
imgRes = LFSize(4:end);
imgSizePad = ceil(imgSize./padding).*padding;
imgSizePad(3) = imgSize(3);
padSize = [imgSizePad-imgSize,zeros(1,numel(imgRes))];
padSizePre = floor(padSize/2);
padSizePost = padSize - padSizePre;
LFRef = padarray(LFRef,padSizePre ,'replicate','pre' );
LFRef = padarray(LFRef,padSizePost,'replicate','post');
end
\ No newline at end of file
...@@ -7,22 +7,15 @@ filename = fullfile(pwd,'sequence'); ...@@ -7,22 +7,15 @@ filename = fullfile(pwd,'sequence');
% Create input parser scheme % Create input parser scheme
p = inputParser; p.StructExpand = true; p.KeepUnmatched = true; p = inputParser; p.StructExpand = true; p.KeepUnmatched = true;
p.addParameter('filename', filename, @ischar); p.addParameter('filename', filename, @ischar);
p.addParameter('padding' , 1 , @isnumeric);
% Parse arguments % Parse arguments
p.parse(varargin{:}); p.parse(varargin{:});
%filename = p.Results.filename; %filename = p.Results.filename;
padding = p.Results.padding;
% Recover frames % Recover frames
imgSizePad = ceil(imgSize./padding).*padding; frames = yuv.read(imgSize,imgRes,varargin{:});
imgSizePad(3) = imgSize(3);
frames = yuv.read(imgSizePad,imgRes,varargin{:});
% Recover LF % Recover LF
LFRec = LF.fromSlices(frames); LFRec = LF.fromSlices(frames);
% Undo padding
LFRec = LF.unpad(LFRec,imgSize);
end end
\ No newline at end of file
function LFRef = unpad(LFRef,imgSize)
%UNPAD Remove padding from lightfield data
% LFRef = unpad(LFRef,LFSize)
LFSizePad = size(LFRef);
imgSizePad = LFSizePad(1:3);
imgRes = LFSizePad(4:end);
padSize = [imgSizePad-imgSize,zeros(1,numel(imgRes))];
padSizePre = floor(padSize/2);
padSizePost = padSize - padSizePre;
gv = arrayfun(@(lfsizepad,pre,post) (1+pre):(lfsizepad-post),...
LFSizePad,padSizePre,padSizePost,'UniformOutput',false);
LFRef = LFRef(gv{:});
end
\ No newline at end of file
function [imgSize,imgRes,imgSizePad] = write(LFRef,varargin) function [imgSize,imgRes] = write(LFRef,varargin)
%WRITE Write lightfield 4D(u,v,x,y) data to yuv file %WRITE Write lightfield 4D(u,v,x,y) data to yuv file
% [LFSize,yuvSize] = WRITE(LFRef,varargin) % [LFSize,yuvSize] = WRITE(LFRef,varargin)
...@@ -7,24 +7,15 @@ filename = fullfile(pwd,'sequence'); ...@@ -7,24 +7,15 @@ filename = fullfile(pwd,'sequence');
% Create input parser scheme % Create input parser scheme
p = inputParser; p.StructExpand = true; p.KeepUnmatched = true; p = inputParser; p.StructExpand = true; p.KeepUnmatched = true;
p.addParameter('filename', filename, @ischar); p.addParameter('filename', filename, @ischar);
p.addParameter('padding' , 1 , @isnumeric);
% Parse arguments % Parse arguments
p.parse(varargin{:}); p.parse(varargin{:});
filename = p.Results.filename; %filename = p.Results.filename;
padding = p.Results.padding;
LFSize = size(LFRef); LFSize = size(LFRef);
imgSize = LFSize(1:3); imgSize = LFSize(1:3);
imgRes = LFSize(4:end); imgRes = LFSize(4:end);
m = utils.getMat(filename,true);
m.imgSize = imgSize;
m.imgRes = imgRes;
% Do padding
[LFRef,imgSizePad] = LF.pad(LFRef,padding);
% Change 5D LF to a collection of 2D frames % Change 5D LF to a collection of 2D frames
frames = LF.toSlices(LFRef); frames = LF.toSlices(LFRef);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment