diff --git a/toSubAps.m b/toSubAps.m index c5726a0970448d156946f4195b3d0148568fd845..a97cfdd8e78c7befde4e5df56ce933a35225c79e 100644 --- a/toSubAps.m +++ b/toSubAps.m @@ -6,14 +6,17 @@ sz = size(data); sz = sz(4:end); sz(end+1:2) = 1; mask = true(sz); +maxValue = []; +if isinteger(data); maxValue = intmax(class(data)); end + p = inputParser(); -p.addParameter('name' , '' , @ischar); -p.addParameter('shift', 0 , @isnumeric); -p.addParameter('mask' , mask , @(x) islogical(x)&&isequal(size(x),size(mask))); -p.addParameter('ext' , 'png', @ischar); -p.addParameter('map' , [] , @(x) isempty(x)||isnumeric(x)); -p.addParameter('alpha', [] , @(x) isempty(x)||isnumeric(x)); -p.addParameter('maxValue', [] , @(x) isempty(x)||isnumeric(x)); +p.addParameter('name' , '' , @ischar); +p.addParameter('shift' , 0 , @isnumeric); +p.addParameter('mask' , mask , @(x) islogical(x)&&isequal(size(x),size(mask))); +p.addParameter('ext' , 'png' , @ischar); +p.addParameter('map' , [] , @(x) isempty(x)||isnumeric(x)); +p.addParameter('alpha' , [] , @(x) isempty(x)||isnumeric(x)); +p.addParameter('maxValue', maxValue , @(x) isempty(x)||isnumeric(x)); p.parse(varargin{:}); name = p.Results.name; @@ -24,34 +27,8 @@ map = p.Results.map; alpha = p.Results.alpha; maxValue = p.Results.maxValue; -if ~startsWith(ext,'.') - ext = ['.',ext]; -end - -if ~exist(Dir,'dir') - mkdir(Dir) -end - -switch ext - case '.png' - if ~isempty(map) - fun_write = @(frame,filename) imwrite(frame,map,fullfile(Dir,[filename,'.png'])); - elseif ~isempty(alpha) - fun_write = @(frame,frame_alpha,filename) imwrite(frame,fullfile(Dir,[filename,'.png']),'Alpha',frame_alpha); - else - fun_write = @(frame,filename) imwrite(frame,fullfile(Dir,[filename,'.png'])); - end - case '.pfm' - data = single(data); - warning('implicit conversion to single in pfmwrite'); - fun_write = @(frame,filename) LF.pfmwrite(frame,fullfile(Dir,[filename,'.pfm'])); - case '.mat' - fun_write = @(frame,filename) save(fullfile(Dir,[filename,'.mat']),'disparity',frame); - case {'.ppm','.pgm'} - fun_write = @(frame,max_value,filename) imwrite(frame,fullfile(Dir,[filename,ext]),'MaxValue',max_value); - otherwise - fun_write = @(frame,filename) imwrite(frame,fullfile(Dir,[filename,ext])); -end +if ~startsWith(ext,'.'); ext = ['.',ext]; end +if ~exist(Dir,'dir'); mkdir(Dir); end frames = LF.toSlices(data); @@ -66,39 +43,55 @@ else filenames = cellfun(@(index) strjoin([name,index],'_'),indices,'UniformOutput',false); end +filenames = cellfun(@(filename) fullfile(Dir,[filename,ext]),filenames,'UniformOutput',false); + frames = frames(mask); filenames = filenames(mask); +if ~isempty(alpha) + frames_alpha = LF.toSlices(alpha); + frames_alpha = frames_alpha(mask); +end + switch ext case '.png' - if ~isempty(alpha) - frames_alpha = LF.toSlices(alpha); - frames_alpha = frames_alpha(mask); - cellfun(fun_write,frames,frames_alpha,filenames); - else + if ~isempty(map) + if ~isempty(alpha) + fun_write = @(frame,frame_alpha,filename)... + imwrite(frame,filename,'Alpha',frame_alpha); + + cellfun(fun_write,frames,frames_alpha,filenames); + else + fun_write = @(frame,filename) imwrite(frame,map,filename); + cellfun(fun_write,frames,filenames); + end + elseif ~isempty(alpha) + fun_write = @(frame,frame_alpha,filename)... + imwrite(frame,filename,'Alpha',frame_alpha); + + cellfun(fun_write,frames,frames_alpha,filenames); + else + fun_write = @(frame,filename) imwrite(frame,filename); cellfun(fun_write,frames,filenames); - end + end case '.mat' for it = 1:numel(frames) disparity = frames{it}; - filename = fullfile(Dir,[filenames{it},'.mat']); + filename = filenames{it}; save(filename,'disparity'); end case {'.pgm','.ppm'} - if isempty(maxValue) - if isinteger(frames{1}) - maxValue = intmax(class(frames{1})); - else - maxValue = 255; - end - end + fun_write = @(frame,filename) imwrite(frame,filename,'MaxValue',maxValue); - maxValue = num2cell(maxValue*ones(size(frames))); - cellfun(fun_write,frames,maxValue,filenames); - + cellfun(fun_write,frames,filenames); + case '.pfm' + warning('implicit conversion to single in pfmwrite'); + + fun_write = @(frame,filename) LF.pfmwrite(single(frame),filename); + cellfun(fun_write,frames,filenames); otherwise + fun_write = @(frame,filename) imwrite(frame,filename); cellfun(fun_write,frames,filenames); end -end - +end \ No newline at end of file