Error using imshow function

13 vues (au cours des 30 derniers jours)
Shane
Shane le 2 Fév 2015
Commenté : David Young le 2 Fév 2015
the error I get is
Error using imageDisplayValidateParams Expected input number 2, [LOW HIGH], to be non-NaN.
Error in checkDisplayRange (line 10) validateattributes(display_range, {'numeric'},...
Error in imageDisplayValidateParams (line 53) common_args.DisplayRange = checkDisplayRange(common_args.DisplayRange,mfilename);
Error in imageDisplayParseInputs (line 78) common_args = imageDisplayValidateParams(common_args);
Error in imshow (line 219) [common_args,specific_args] = ...
Error in aceDet (line 14) figure; imshow(SWIR_ACEimgNorm,[])
Error in mat2op (line 150) [VIS_ACEimgNorm,VIS_ACEresults,VIS_ACEimg,SWIR_ACEresults,SWIR_ACEimg, SWIR_ACEimgNorm] = aceDet(VIS_M, VIStarget,SWIR_M, SWIRtarget,m,n);
The code is
function [VIS_ACEimgNorm,VIS_ACEresults,VIS_ACEimg,SWIR_ACEresults,SWIR_ACEimg, SWIR_ACEimgNorm] = aceDet(VIS_M, VIStarget,SWIR_M, SWIRtarget,m,n)
% Apply ACE
VIS_ACEresults = hyperAce(VIS_M, VIStarget);
VIS_ACEimg = hyperConvert3d(VIS_ACEresults, m, n, 1);
VIS_ACEimgNorm = hyperNormalize(VIS_ACEimg);
SWIR_ACEresults = hyperAce(SWIR_M, SWIRtarget);
SWIR_ACEimg = hyperConvert3d(SWIR_ACEresults, m, n, 1);
SWIR_ACEimgNorm = hyperNormalize(SWIR_ACEimg);
figure; imshow(VIS_ACEimgNorm,[])
title('VIS ACE');
figure; imshow(SWIR_ACEimgNorm,[])
title('SWIR ACE');
The VIS_ACEimgNorm will show but the SWIR_ACEimgNorm come up with the error. The variables for VIS_M, VIStarget,SWIR_M, SWIRtarget,m,n are:
  • VIS_M 117x10000 double
  • VIStarget 117x1 double
  • SWIR_M 237x10000 double
  • SWIRtarget 237x10000 double
  • m 100
  • n 100
Please let me know is you need more information and thank you for any help.
  1 commentaire
Shane
Shane le 2 Fév 2015
I think I found it in the hyperAce function the values for SWIR_M and SWIRtarget are pulled in but then become NaN in the SWIR_ACEresults which will be a 1x10000 double the code is:
function [results] = hyperAce(M, S)
[p, N] = size(M);
% Remove mean from data
u = mean(M.').';
M = M - repmat(u, 1, N);
S = S - repmat(u, 1, size(S,2));
R_hat = hyperCov(M);
G = inv(R_hat);
results = zeros(1, N);
% From Broadwater's paper
%tmp = G*S*inv(S.'*G*S)*S.'*G;
tmp = (S.'*G*S);
for k=1:N
x = M(:,k);
% From Broadwater's paper
%results(k) = (x.'*tmp*x) / (x.'*G*x);
results(k) = (S.'*G*x)^2 / (tmp*(x.'*G*x));
end

Connectez-vous pour commenter.

Réponse acceptée

David Young
David Young le 2 Fév 2015
Modifié(e) : David Young le 2 Fév 2015
Almost certainly, every element of SWIR_ACEimgNorm is NaN (Not a Number). It's not possible to say how this has come about, but you can start debugging, first by putting this line in the code before the call to imshow, to check my hypothesis:
disp(all(isnan(SWIR_ACEimgNorm(:))))
If that prints 1, then you could start working backwards through the code to see at what point NaNs start to appear in the arrays. Or, you could start by checking the arguments to the function and then working forwards. In either case, you can do this either in the debugger or by inserting additional statements into the code, whichever you are more comfortable with.
  2 commentaires
Shane
Shane le 2 Fév 2015
After using
disp(all(isnan(SWIR_ACEimgNorm(:))))
I traced it to where I read in the spectral signature and a misplaced number. When I read in the first half (i.e. VNIR) and assigned it to a variable
pixVnir(:,i)=pix(1:118);
the signature and all data were fine; however when I originaly read the SWIR in i put
pixswir(:,i)=pix2(357:end);
which only read the last column instead of the whole wavelength. This compounded problem giving the SWIR region a flat or inf number which in the end returned a NaN. So I made the correction such that
pixswir(:,i)=pix2(119:end);
Thank you all for your Replies
David Young
David Young le 2 Fév 2015
Glad you got it fixed quickly!

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by