Error in mainOrient (line 56) LinearIndOfFPScale_i = sub2ind( [ Nrow, Nclmn ], row, clmn ); Error in demoASIFT (line 108)
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
vani shree
am 24 Apr. 2017
Beantwortet: Sudarshan Kolar
am 26 Apr. 2017
sir i have downloaded ASIFT code from matlab file exchanger. the problem is it showing error sir, please help me to run that code. here i have mentioned errors"Error in mainOrient (line 56) LinearIndOfFPScale_i = sub2ind( [ Nrow, Nclmn ], row, clmn );
Error in demoASIFT (line 108) [ HrLOrntPoints ] = mainOrient( HrLPointsTmp1, imgSimulated, ThreshMainOrient, FactorMainOrient, "
if true
% sub2ind
function ndx = sub2ind(siz,v1,v2,varargin)
siz = double(siz);
lensiz = length(siz);
if lensiz < 2
error(message('MATLAB:sub2ind:InvalidSize'));
end
numOfIndInput = nargin-1; if lensiz < numOfIndInput %Adjust for trailing singleton dimensions siz = [siz, ones(1,numOfIndInput-lensiz)]; elseif lensiz > numOfIndInput %Adjust for linear indexing on last element siz = [siz(1:numOfIndInput-1), prod(siz(numOfIndInput:end))]; end
if any(min(v1(:)) < 1) any(max(v1(:)) > siz(1)) %Verify subscripts are within range error(message('MATLAB:sub2ind:IndexOutOfRange')); end
ndx = double(v1); s = size(v1); if numOfIndInput >= 2 if ~isequal(s,size(v2)) %Verify sizes of subscripts error(message('MATLAB:sub2ind:SubscriptVectorSize')); end if any(min(v2(:)) < 1) any(max(v2(:)) > siz(2)) %Verify subscripts are within range error(message('MATLAB:sub2ind:IndexOutOfRange')); end %Compute linear indices ndx = ndx + (double(v2) - 1).*siz(1); end
if numOfIndInput > 2 %Compute linear indices k = cumprod(siz); for i = 3:numOfIndInput v = varargin{i-2}; %%Input checking if ~isequal(s,size(v)) %Verify sizes of subscripts error(message('MATLAB:sub2ind:SubscriptVectorSize')); end if (any(min(v(:)) < 1)) (any(max(v(:)) > siz(i))) %Verify subscripts are within range error(message('MATLAB:sub2ind:IndexOutOfRange')); end ndx = ndx + (double(v)-1)*k(i-1); end end %% mainorentation.m function [ HrLOrntPoints ] = mainOrient( HrLPoints, img, Thresh, Factor, AngleBin, TypeOfMainOrient, SwitchWaitbars ) img = double(img); %----------- Defining edges for histogram -------------% Edges4Hist = 0:AngleBin:360; if Edges4Hist( end ) ~= 360 Edges4Hist( end + 1 ) = 360; end % defining number of bins NOfBins = ceil( 360/AngleBin );
% finding range of scales Scales = unique( HrLPoints( :, 3 ) ); NOfScales = length( Scales );
%------------------- Padding image --------------------% % scalar 3, is good becuase I'm taking patch of size 3*scale to each direction from FP Paddvalue = max( Scales ); Paddvalue = ceil( 3*Paddvalue ); img = padarray( img, [ Paddvalue Paddvalue ], 'symmetric' );
%------------------- Shifting coordinates --------------------% HrLPoints( :, [ 1 2 4 5 ] ) = HrLPoints( :, [ 1 2 4 5 ] ) + Paddvalue;
[ Nrow, Nclmn ] = size(img);
% N = size(HrLPoints,1); HrLOrntPoints = zeros(0,6);
if strcmp( SwitchWaitbars, 'on' ) h = waitbar(0,'Calculating main orientations:'); end for i = 1:NOfScales
scale = Scales(i);
% defining linear indexes of elements in patch of size according to
% given sigma/Scales(i), near coord ( 0, 0 ).
win0ind = win2ind( Nrow, Nclmn, ceil( 3*scale ) );
% number of elements in each patch
sz = length( win0ind );
IndOfFP = find( HrLPoints( :, 3 ) == scale );
if ~isempty( IndOfFP )
row = round(HrLPoints( :, 4 )); clmn = round(HrLPoints( :, 5 ));
row = row( IndOfFP ); clmn = clmn( IndOfFP );
LinearIndOfFPScale_i = sub2ind( [ Nrow, Nclmn ], row, clmn );
NofFPScale_i = length( LinearIndOfFPScale_i );
% indexes shift for histc.m, in order that each patch/region of FP
% will be count separately
IndexShiftBins4Accum = NOfBins*(0:1:(NofFPScale_i-1));
IndexShiftBins4Accum = repmat( IndexShiftBins4Accum, sz, 1 );
IndexShiftBins4Accum = IndexShiftBins4Accum(:);
%------------------ Derivative mask -------------------% x = -ceil(3*scale):ceil(3*scale); [ X, Y ] = meshgrid(x,x); dGdx = -X .* exp(-( X.*X + Y.*Y )/(2*scale*scale)) ./ ((scale^4)*(2*pi));
%-------------------- Derivatives ---------------------% % 'normalized' % Ix = scale*(imfilter(img, dGdx, 'same')); % Iy = scale*(imfilter(img, dGdx', 'same')); % not normalized - no point in normalization, won't influence the % accumulation support of directions. Ix = imfilter(img, dGdx, 'same'); Iy = imfilter(img, dGdx', 'same');
%----------------- Norm of gradients ------------------% gradient_norm = sqrt(Ix.^2 + Iy.^2);
%------------- Avaraging norm gradients --------------%
g = fspecial('gaussian',max(1,fix(6*scale*Factor +1)), scale*Factor);
gradient_norm = imfilter(gradient_norm, g, 'same');
%----------------- Angles of gradients ----------------% gradient_angles = rad2deg( atan2( Iy, Ix ) + pi );
%---------------- Combining all indexes ---------------% % for FP IndOfFP(i), indexes of elements in patch near it are accomulated in % column AllIndexes() AllIndexes = repmat( win0ind(:), 1, NofFPScale_i ) + repmat( (LinearIndOfFPScale_i(:))', sz, 1 );
%------------------ Combining all data ----------------% AllNorms = gradient_norm( AllIndexes ); AllAngles = gradient_angles( AllIndexes );
%-------------- Assigning angles 2 bins ---------------% [ n, AngleBins ] = histc( AllAngles(:), Edges4Hist );
%---------------- Shifting angle bins -----------------% AngleBinsShifted = AngleBins + IndexShiftBins4Accum;
%-------- Accumulating norms 2 according bins ---------% AssignedNorms = accumarray( AngleBinsShifted, AllNorms(:), [ NOfBins*NofFPScale_i, 1 ] ); % reshaping it back, so each column corresponds to different FP AssignedNorms = reshape( AssignedNorms, NOfBins, NofFPScale_i );
%------------------ Finding maximums ------------------% [ mx IndOfBinOfMainOrient ] = max( AssignedNorms );
%--------------- Thresholding maximums ----------------% MxMtr = repmat( mx*Thresh, NOfBins, 1 ); % taking maximum value ony if it the only one that bigger then Thrsh*( it's value ) switch TypeOfMainOrient case 'some' [ IndOfAngleBin IndexFP ] = find( MxMtr <= AssignedNorms );
case 'one'
IndexFP = find( sum(MxMtr <= AssignedNorms) == 1 );
IndOfAngleBin = IndOfBinOfMainOrient( IndexFP );
end
% indexes in HrLPoints of FP with MO
IndOfFP = IndOfFP( IndexFP );
%---------------- Assigning values /'max' -------------% MainOrientations = AngleBin*IndOfAngleBin; len = length(MainOrientations); if len HrLOrntPoints( (end + 1):(end + len), : ) = [ HrLPoints(IndOfFP, :), MainOrientations(:) ]; end end if strcmp( SwitchWaitbars, 'on' ) waitbar(i/NOfScales) end end if strcmp( SwitchWaitbars, 'on' ) close(h); end
HrLOrntPoints( :, [ 1 2 4 5 ] ) = HrLOrntPoints( :, [ 1 2 4 5 ] ) - Paddvalue; end sir please help me sir
0 Kommentare
Akzeptierte Antwort
Sudarshan Kolar
am 26 Apr. 2017
Hello Vani,
Seems like Walter has answered your question here:
https://www.mathworks.com/matlabcentral/answers/336928-demoasift-error-using-disp-too-many-output-arguments-error-in-demoasift-line-105?s_tid=answers_rc1-1_p1_MLT
If this does not help, I would recommend contacting the author of the file exchange submission.
Sudarshan
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Environment and Settings finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!