Too many input arguments IMRESIZE
2 ビュー (過去 30 日間)
古いコメントを表示
Hey all! I'm using a custom built code to resize and format an image from a database, such that the final result is in grayscale and at 1920x1080 resolution, with corrected luminance and other properties. etc. The code is given below
function img = getImg(rec,width,height,screen,varargin)
% retrieve the image (rec) from the UT natural scene collection, down
% sampling to the monitor resolution... this should preserve the overall
% dimensions (in deg.) and therefore preserve the spatial frequency
%
% inputs:
%
% rec - a record from the geisler image db
% width - final width of the image (deg.)
% height - final height of the image (deg.)
% screen - a struct containing screen resolution (pixels) and size (deg.)
%
% the screen struct should contain fields as follows:
%
% xpixels - screen width in pixels
% ypixels - screen height in pixels
% width - screen width in deg.
% height - screen height in deg.
%
% optional parameters:
%
% clip - clipping limits as percentiles of the luminance histogram (default: [2,99[)
% pad - padding method, 'none' or 'mean' (default: 'mean')
% parse arguments
p = inputParser();
p.addParameter('clip',[2,99],@(x) validateattributes(x,{'numeric'},{'positive','numel',2,'>=',1,'<=',100})); % as per Geisler and Perry, 2011.
p.addParameter('pad','mean',@(x) ~isempty(x) & ismember(lower(x),{'none','mean','noise'}))
p.parse(varargin{:});
args = p.Results;
%
img = imgdb.geisler.load(rec,'colorMode','lum');
pat = '(?<deg>[.\d]+).*\((?<m>[.\d]+).*'; % field of view in deg. and meters
fov = regexp(rec.meta.Field_Of_View,pat,'names');
fov = str2double(fov.deg);
ippd = size(img,2)/fov; % image pixels/deg.
sppd = screen.xpixels/screen.width; % screen pixels/deg.
img = imresize(img,sppd/ippd,'method','bicubic','antialiasing',true);
% clip...?
%
% the image histograms have long tails on the high end. Here we extend
% the dynamic range by clipping the tails of the distribution. By default
% we clip 2% of pixels at the low end and 1% of pixels at the high end.
%
% See Geisler and Perry, JoV, 2011.
if ~isempty(args.clip)
lim = prctile(img(:),args.clip);
img = min(max(img - lim(1),0.0)./(lim(2)-lim(1)),1.0);
end
% pad...?
[yimg,ximg] = size(img);
% size on screen (pixels)
xscr = floor(width*screen.xpixels/screen.width);
yscr = floor(height*screen.ypixels/screen.height);
if xscr > ximg || yscr > yimg
nx = max(xscr,ximg); ny = max(yscr,yimg);
mn = mean(img(:));
sd = std(img(:)); % rms contrast
switch lower(args.pad)
case 'none'
return
case 'mean'
% pad with mean luminance...
z = mn*ones([ny,nx]);
otherwise
error('Padding with %s is not supported.',args.pad);
end
z(1:yimg,1:ximg) = img;
img = circshift(z,[floor((ny-yimg)/2),floor((nx-ximg)/2)]);
end
% img = real(img.^(1/2.2)); % ghetto gamma - for testing only
end
I call the above function through
img = freeviewing.analysis.getImg(rec,56.9781,32.0502,screen);
where 'rec and 'screen' are both structs containing info about the image. The error supposedly occurs at line 44, giving the following,
Error using imresize
Too many input arguments.
Error in freeviewing.analysis.getImg (line 44)
img = imresize(img,sppd/ippd,'method','bicubic','antialiasing',true);
Can anyone let me know as to what's exactly wrong with the code? Thanks!
0 件のコメント
回答 (2 件)
Image Analyst
2021 年 5 月 18 日
The method is not specified using Name/value pairs. Get rid of 'method' so that it's
img = imresize(img, sppd/ippd, 'bicubic', 'antialiasing', true);
Sulaymon Eshkabilov
2021 年 5 月 18 日
You'd need to check:
sppd = screen.xpixels/screen.width; % screen pixels/deg.
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!