Error using isrgb (line 7) Function ISRGB has been removed. Error in demoASIFT1 (line 4) if isrgb(img1)
조회 수: 18 (최근 30일)
이전 댓글 표시
sir i m doing ASIFT coding which i have download from matlab exchange file. when i run this code i m getting error
"Error using isrgb (line 7) Function ISRGB has been removed.
Error in demoASIFT1 (line 4) if isrgb(img1)" please help me sir. i m doing project using ASIFT i have attached coding here. help me
% assumption, that we have img1 and img2. if isrgb(img1) img1gr = rgb2gray( img1 ); else img1gr = img1; end if isrgb(img2) img2gr = rgb2gray( img2 ); else img2gr = img2; end
[ m1, n1 ] = size( img1gr ); [ m2, n2 ] = size( img2gr );
%-------------------- Parameters -------------------% SwitchWaitbars = 'off'; % 'off'/'on' %--------------- Descriptors 4 FP ------------------% TypeOfFP = 'Aff'; % 'Aff'/'HL' TypeOfDescriptor = 'SIFT'; % there is possibility to add diferent type of descr., however I've implemented only SIFT. NOfWindows = 4; % near each FP will be taken NOfWindows^2 of windows of size 4x4 AngleBinDescript = 45; % degrees ThreshDescript = 0.2; FactorDescript = 1.5; StepSampleFunction = @(x) sqrt(1+x^2); %-------------------- 'ASIFT' ----------------------% TiltVectorRange = sqrt(2).^([ 0 1 2 3 4 ]); % also can be taken (0, 3 - 5) StepAngleFunction = @(x) 72/x; % 72/x TypeOfViewSimulation = 'both'; % 'first'/'second'/'both' % which image views need to simulate BlureTilt = 'no'; % 'yes'/'no' BlureSigmaFunction = @(x) sqrt( x^2 - 1 ); % depends on tilt value
%--------------------- Harris ----------------------% TypeOfCornerDetector = 'HarmonicMean'; % 'Harris'/'HarmonicMean' TypeOfNBHOOD = 'const'; % 'const'/'dif'. 'dif' - depends on scale NBHOOD = ones(3); % scalar or binar matrix, specifying neighberhood BorderDistance = 3*NOfWindows; ThreshType = 'const'; % 'const'/'percent' HarrisThresh = 10; % in case of 'HarmonicMean', thresh ~ 10, Harris ~ 1000 k = 0.055; % parameter for Harris function Dilate = 'no'; % 'yes'/'no' radius = 2; sigma_nmbr = 3; dispMatches = 0; % 0/1
%--------------- Main Orientation -----------------% ThreshMainOrient = 0.8; FactorMainOrient = 1.5; AngleBinMainOrient = 10; TypeOfMainOrient = 'some'; % 'one'/'some'. 'one' - for each FP take only one Main Orientation % ( take it, if this orient. is the only one bigger then ThreshMainOrient % of it's value ) % 'some' - take all orientations, that bigger then thresh, described above.
%----------------- Matching FPs -------------------% TypeOfSearch = 'determ'; %'determ' 1/2, 'kmeans','kNN', 'ANN', for not big data preferable 'determ' 2, % 'kmeans' - just for experiment. HelpScalarOrVector = 2; TypeOfMatchThresh = 'first/second&first'; % 'first' / 'first/second' / 'first/second&first' ThreshFS = 0.78; % thresh for first/second ( 0.5 - ~0.8 ) % need to worry that, if there is a big difference in viewpoints between % images, then take ~0.55 - 0.61, else can be taken ~0.75 - 0.8 ThreshF = 0.5; % thresh for first ( 0.33 - 0.55 )
%--------------------------------------------------------------------% %----------- Simulating views for ASIFT --------------% if strcmp( TypeOfViewSimulation, 'first' ) || strcmp( TypeOfViewSimulation, 'both' ) cnt1 = 1; DescriptHrLPoints1 = {}; HrLOrntPoints1 = {};
img1Orig = img1gr; for t = TiltVectorRange DeltaPhi = StepAngleFunction( t ); for phi = 0:DeltaPhi:(180-eps) phiAngle = deg2rad( phi ); % defining tilt and longitude affin simulation matrix T = zeros( 3 ); T(3,3)=1; Tilt = eye(2); Tilt(1) = t; R = [ cos(phiAngle) -sin(phiAngle); sin(phiAngle) cos(phiAngle) ]; Aff = Tilt*R; T( 1:2, 1:2 ) = Aff'; Tf = maketform('affine',T); % affine transformation for view-simulation
if strcmp(BlureTilt, 'yes') sigma = BlureSigmaFunction( t ); if sigma > 0 g = fspecial( 'gaussian', [ 1, round( 6*sigma ) + 1 ], sigma ); img1gr = imfilter( img1Orig, g, 'same' ); else img1gr = img1Orig; end else img1gr = img1Orig; end BorderDistanceMatrix = zeros( m1, n1 ); BorderDistanceMatrix( (BorderDistance + 1):(m1 - BorderDistance), (BorderDistance + 1):(n1 - BorderDistance) ) = 1; [ imgSimulated, xdata, ydata ] = imtransform( img1gr, Tf ); BorderDistanceMatrix = imtransform( BorderDistanceMatrix, Tf, 'xdata', xdata, 'ydata', ydata ); %- Finding FP and they char. scale (Harris-Laplace) -% [ HrLPointsTmp1 ] = harrislpls( imgSimulated, TypeOfNBHOOD, NBHOOD, TypeOfCornerDetector, BorderDistanceMatrix, ThreshType, HarrisThresh, k, Dilate, radius, sigma_nmbr, disp, SwitchWaitbars );
%----------- Finding Main Orientation -------------% [ HrLOrntPointsTmp1 ] = mainOrient( HrLPointsTmp1, imgSimulated, ThreshMainOrient, FactorMainOrient, AngleBinMainOrient, TypeOfMainOrient, SwitchWaitbars );
%------------------ Descripting -------------------% [ DescriptHrLPointsTmp1 ] = descriptFPoints( HrLOrntPointsTmp1, imgSimulated, TypeOfDescriptor, NOfWindows, StepSampleFunction, AngleBinDescript, ThreshDescript, FactorDescript, SwitchWaitbars );
%----- Converting FP coordinates to original ------% % back to coordinates, before shift for image coord. ( xdata(1) -> 1, ydata(1) -> 1 ) HrLOrntPointsTmp1( :, [ 2 5 ] ) = HrLOrntPointsTmp1( :, [ 2 5 ] ) - 1 + xdata(1); HrLOrntPointsTmp1( :, [ 1 4 ] ) = HrLOrntPointsTmp1( :, [ 1 4 ] ) - 1 + ydata(1); % back to original image coordinates tmp = tforminv( Tf, HrLOrntPointsTmp1( :, 5 ), HrLOrntPointsTmp1( :, 4 )); HrLOrntPointsTmp1( :, 2 ) = round(tmp(:,1)); HrLOrntPointsTmp1( :, 1 ) = round(tmp(:,2)); HrLOrntPointsTmp1( :, 1 ) = max( HrLOrntPointsTmp1( :, 1 ), 1 ); HrLOrntPointsTmp1( :, 1 ) = min( HrLOrntPointsTmp1( :, 1 ), m1 ); HrLOrntPointsTmp1( :, 2 ) = max( HrLOrntPointsTmp1( :, 2 ), 1 ); HrLOrntPointsTmp1( :, 2 ) = min( HrLOrntPointsTmp1( :, 2 ), n1 ); HrLOrntPointsTmp1( :, 5 ) = tmp(:,1); HrLOrntPointsTmp1( :, 4 ) = tmp(:,2); % adding FP to all FP, that were founded before DescriptHrLPoints1{cnt1} = DescriptHrLPointsTmp1; HrLOrntPoints1{cnt1} = HrLOrntPointsTmp1; cnt1 = cnt1 + 1; end end else
[ HrLPoints1 ] = harrislpls( img1gr, TypeOfNBHOOD, NBHOOD, TypeOfCornerDetector, BorderDistance, ThreshType, HarrisThresh, k, Dilate, radius, sigma_nmbr, disp, SwitchWaitbars );
%----------- Finding Main Orientation -------------% [ HrLOrntPoints1 ] = mainOrient( HrLPoints1, img1gr, ThreshMainOrient, FactorMainOrient, AngleBinMainOrient, TypeOfMainOrient, SwitchWaitbars );
%------------------ Descripting -------------------% [ DescriptHrLPoints1 ] = descriptFPoints( HrLOrntPoints1, img1gr, TypeOfDescriptor, NOfWindows, StepSampleFunction, AngleBinDescript, ThreshDescript, FactorDescript, SwitchWaitbars ); end
% save('test.mat');
if strcmp( TypeOfViewSimulation, 'second' ) || strcmp( TypeOfViewSimulation, 'both' ) cnt2 = 1; DescriptHrLPoints2 = {}; HrLOrntPoints2 = {};
img2Orig = img2gr; for t = TiltVectorRange DeltaPhi = StepAngleFunction( t ); for phi = 0:DeltaPhi:(180-eps) phiAngle = deg2rad( phi ); % defining tilt and longitude affin simulation matrix T = zeros( 3 ); T(3,3)=1; Tilt = eye(2); Tilt(1) = t; R = [ cos(phiAngle) -sin(phiAngle); sin(phiAngle) cos(phiAngle) ]; Aff = Tilt*R; T( 1:2, 1:2 ) = Aff'; Tf = maketform('affine',T); % affine transformation for view-simulation
if strcmp(BlureTilt, 'yes') sigma = BlureSigmaFunction( t ); if sigma > 0 g = fspecial( 'gaussian', [ 1, round( 6*sigma ) + 1 ], sigma ); img2gr = imfilter( img2Orig, g, 'same' ); else img2gr = img2Orig; end else img2gr = img2Orig; end BorderDistanceMatrix = zeros( m2, n2 ); BorderDistanceMatrix( (BorderDistance + 1):(m2 - BorderDistance), (BorderDistance + 1):(n2 - BorderDistance) ) = 1; [ imgSimulated, xdata, ydata ] = imtransform( img2gr, Tf ); BorderDistanceMatrix = imtransform( BorderDistanceMatrix, Tf, 'xdata', xdata, 'ydata', ydata ); %- Finding FP and they char. scale (Harris-Laplace) -% [ HrLPointsTmp2 ] = harrislpls( imgSimulated, TypeOfNBHOOD, NBHOOD, TypeOfCornerDetector, BorderDistanceMatrix, ThreshType, HarrisThresh, k, Dilate, radius, sigma_nmbr, disp, SwitchWaitbars );
%----------- Finding Main Orientation -------------% [ HrLOrntPointsTmp2 ] = mainOrient( HrLPointsTmp2, imgSimulated, ThreshMainOrient, FactorMainOrient, AngleBinMainOrient, TypeOfMainOrient, SwitchWaitbars );
%------------------ Descripting -------------------% [ DescriptHrLPointsTmp2 ] = descriptFPoints( HrLOrntPointsTmp2, imgSimulated, TypeOfDescriptor, NOfWindows, StepSampleFunction, AngleBinDescript, ThreshDescript, FactorDescript, SwitchWaitbars );
%----- Converting FP coordinates to original ------% % back to coordinates, before shift for image coord. ( xdata(1) -> 1, ydata(1) -> 1 ) HrLOrntPointsTmp2( :, [ 2 5 ] ) = HrLOrntPointsTmp2( :, [ 2 5 ] ) - 1 + xdata(1); HrLOrntPointsTmp2( :, [ 1 4 ] ) = HrLOrntPointsTmp2( :, [ 1 4 ] ) - 1 + ydata(1); % back to original image coordinates tmp = tforminv( Tf, HrLOrntPointsTmp2( :, 5 ), HrLOrntPointsTmp2( :, 4 )); HrLOrntPointsTmp2( :, 2 ) = round(tmp(:,1)); HrLOrntPointsTmp2( :, 1 ) = round(tmp(:,2)); HrLOrntPointsTmp2( :, 1 ) = max( HrLOrntPointsTmp2( :, 1 ), 1 ); HrLOrntPointsTmp2( :, 1 ) = min( HrLOrntPointsTmp2( :, 1 ), m2 ); HrLOrntPointsTmp2( :, 2 ) = max( HrLOrntPointsTmp2( :, 2 ), 1 ); HrLOrntPointsTmp2( :, 2 ) = min( HrLOrntPointsTmp2( :, 2 ), n2 ); HrLOrntPointsTmp2( :, 5 ) = tmp(:,1); HrLOrntPointsTmp2( :, 4 ) = tmp(:,2); % adding FP to all FP, that were founded before DescriptHrLPoints2{cnt2} = DescriptHrLPointsTmp2; HrLOrntPoints2{cnt2} = HrLOrntPointsTmp2; cnt2 = cnt2 + 1; end end else
[ HrLPoints2 ] = harrislpls( img2gr, TypeOfNBHOOD, NBHOOD, TypeOfCornerDetector, BorderDistance, ThreshType, HarrisThresh, k, Dilate, radius, sigma_nmbr, disp, SwitchWaitbars );
%----------- Finding Main Orientation -------------% [ HrLOrntPoints2 ] = mainOrient( HrLPoints2, img2gr, ThreshMainOrient, FactorMainOrient, AngleBinMainOrient, TypeOfMainOrient, SwitchWaitbars );
%------------------ Descripting -------------------% [ DescriptHrLPoints2 ] = descriptFPoints( HrLOrntPoints2, img2gr, TypeOfDescriptor, NOfWindows, StepSampleFunction, AngleBinDescript, ThreshDescript, FactorDescript, SwitchWaitbars ); end
% save('test.mat');
switch TypeOfViewSimulation case 'first' Match1 = []; Match2 = []; for i = 1:(cnt1-1) switch TypeOfMatchThresh case 'first' Thresh = ThreshF; [ MatchedPairs ] = matchFPoints( DescriptHrLPoints1{i}, DescriptHrLPoints2, TypeOfSearch, HelpScalarOrVector, TypeOfMatchThresh, Thresh, SwitchWaitbars ); ind = find( MatchedPairs ); Match1Tmp = HrLOrntPoints1{i}( ind, [ 1 2 3 end ] ); ind = MatchedPairs( ind ); Match2Tmp = HrLOrntPoints2( ind, [ 1 2 3 end ] ); case 'first/second' Thresh = ThreshFS; [ MatchedPairs ] = matchFPoints( DescriptHrLPoints1{i}, DescriptHrLPoints2, TypeOfSearch, HelpScalarOrVector, TypeOfMatchThresh, Thresh, SwitchWaitbars ); ind = find( MatchedPairs ); Match1Tmp = HrLOrntPoints1{i}( ind, [ 1 2 3 end ] ); ind = MatchedPairs( ind ); Match2Tmp = HrLOrntPoints2( ind, [ 1 2 3 end ] ); case 'first/second&first' Thresh = ThreshFS; [ MatchedPairs ] = matchFPoints( DescriptHrLPoints1{i}, DescriptHrLPoints2, TypeOfSearch, HelpScalarOrVector, 'first/second', Thresh, SwitchWaitbars ); ind1 = find( MatchedPairs ); ind2 = MatchedPairs( ind1 ); % take only those pairs, that are at distance each from other less then ThreshF ind = find( sqrt(sum( ((DescriptHrLPoints1{i}( ind1, : ) - DescriptHrLPoints2( ind2, : )).^2), 2 )) <= ThreshF ); ind1 = ind1( ind ); ind2 = ind2( ind ); Match1Tmp = HrLOrntPoints1{i}( ind1, [ 1 2 3 end ] ); Match2Tmp = HrLOrntPoints2( ind2, [ 1 2 3 end ] ); end Match1 = [ Match1; Match1Tmp ]; Match2 = [ Match2; Match2Tmp ]; end case 'second' Match1 = []; Match2 = []; for i = 1:(cnt2-1) switch TypeOfMatchThresh case 'first' Thresh = ThreshF; [ MatchedPairs ] = matchFPoints( DescriptHrLPoints1, DescriptHrLPoints2{i}, TypeOfSearch, HelpScalarOrVector, TypeOfMatchThresh, Thresh, SwitchWaitbars ); ind = find( MatchedPairs ); Match1Tmp = HrLOrntPoints1( ind, [ 1 2 3 end ] ); ind = MatchedPairs( ind ); Match2Tmp = HrLOrntPoints2{i}( ind, [ 1 2 3 end ] ); case 'first/second' Thresh = ThreshFS; [ MatchedPairs ] = matchFPoints( DescriptHrLPoints1, DescriptHrLPoints2{i}, TypeOfSearch, HelpScalarOrVector, TypeOfMatchThresh, Thresh, SwitchWaitbars ); ind = find( MatchedPairs ); Match1Tmp = HrLOrntPoints1( ind, [ 1 2 3 end ] ); ind = MatchedPairs( ind ); Match2Tmp = HrLOrntPoints2{i}( ind, [ 1 2 3 end ] ); case 'first/second&first' Thresh = ThreshFS; [ MatchedPairs ] = matchFPoints( DescriptHrLPoints1, DescriptHrLPoints2{i}, TypeOfSearch, HelpScalarOrVector, 'first/second', Thresh, SwitchWaitbars ); ind1 = find( MatchedPairs ); ind2 = MatchedPairs( ind1 ); % take only those pairs, that are at distance each from other less then ThreshF ind = find( sqrt(sum( ((DescriptHrLPoints1( ind1, : ) - DescriptHrLPoints2{i}( ind2, : )).^2), 2 )) <= ThreshF ); ind1 = ind1( ind ); ind2 = ind2( ind ); Match1Tmp = HrLOrntPoints1( ind1, [ 1 2 3 end ] ); Match2Tmp = HrLOrntPoints2{i}( ind2, [ 1 2 3 end ] ); end Match1 = [ Match1; Match1Tmp ]; Match2 = [ Match2; Match2Tmp ]; end case 'both' Match1 = []; Match2 = []; for i = 1:(cnt1 - 1) for j = 1:(cnt2 -1) switch TypeOfMatchThresh case 'first' Thresh = ThreshF; [ MatchedPairs ] = matchFPoints( DescriptHrLPoints1{i}, DescriptHrLPoints2{j}, TypeOfSearch, HelpScalarOrVector, TypeOfMatchThresh, Thresh, SwitchWaitbars ); ind = find( MatchedPairs ); Match1Tmp = HrLOrntPoints1{i}( ind, [ 1 2 3 end ] ); ind = MatchedPairs( ind ); Match2Tmp = HrLOrntPoints2{j}( ind, [ 1 2 3 end ] ); case 'first/second' Thresh = ThreshFS; [ MatchedPairs ] = matchFPoints( DescriptHrLPoints1{i}, DescriptHrLPoints2{j}, TypeOfSearch, HelpScalarOrVector, TypeOfMatchThresh, Thresh, SwitchWaitbars ); ind = find( MatchedPairs ); Match1Tmp = HrLOrntPoints1{i}( ind, [ 1 2 3 end ] ); ind = MatchedPairs( ind ); Match2Tmp = HrLOrntPoints2{j}( ind, [ 1 2 3 end ] ); case 'first/second&first' Thresh = ThreshFS; [ MatchedPairs ] = matchFPoints( DescriptHrLPoints1{i}, DescriptHrLPoints2{j}, TypeOfSearch, HelpScalarOrVector, 'first/second', Thresh, SwitchWaitbars ); ind1 = find( MatchedPairs ); ind2 = MatchedPairs( ind1 ); % take only those pairs, that are at distance each from other less then ThreshF ind = find( sqrt(sum( ((DescriptHrLPoints1{i}( ind1, : ) - DescriptHrLPoints2{j}( ind2, : )).^2), 2 )) <= ThreshF ); ind1 = ind1( ind ); ind2 = ind2( ind ); Match1Tmp = HrLOrntPoints1{i}( ind1, [ 1 2 3 end ] ); Match2Tmp = HrLOrntPoints2{j}( ind2, [ 1 2 3 end ] ); end Match1 = [ Match1; Match1Tmp ]; Match2 = [ Match2; Match2Tmp ]; % PlotMatches( img1, Match1Tmp, img2, Match2Tmp, 'sigma', TypeOfFP ); end end end
%--------------------- Ploting --------------------% PlotMatches( img1, Match1, img2, Match2, 'sigma', TypeOfFP ); end
댓글 수: 0
채택된 답변
Image Analyst
2017년 4월 23일
The function isrgb() has been removed starting with R2011b. Replace this line
if isrgb(img1)
with this line
if ndims(img1) == 3
or
[rows, columns, numberOfColorChannels] = size(img1);
if numberOfColorChannels == 3
추가 답변 (1개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!