2012-05-13 1 views
1

J'essaie d'utiliser des DEM USGS dans MATLAB mais après l'avoir lu avec geotiffread, mapshow produit une erreur. Sur la base de la documentation, j'ai essayélire et afficher USGS NED DEM

[A, R] = geotiffread('NED_10340081') 
figure 
mapshow(A, R); 

mais je reçois

Error using mapshow 
Expected input number 1, I or X or RGB, to be one of these types: 

uint8, uint16, double, logical 

Instead its type was single. 

Error in validateMapRasterData>parseImageInputs (line 109) 
validateattributes(A, {'uint8', 'uint16', 'double', 'logical'}, ... 

Error in validateMapRasterData>validateImageComponent (line 93) 
[A, R] = parseImageInputs(mapfcnname, dataArgs{:}, cmap, rules); 

Error in validateMapRasterData (line 27) 
[Z, SpatialRef] = validateImageComponent(mapfcnname, ... 

Error in maprastershow (line 127) 
[Z, SpatialRef, displayType, HGpairs] = ... 

Error in mapshow (line 231) 
h = showFcn(varargin{:}); 

Ma matrice A est de type simple ... est que le problème? et comment puis-je résoudre ce problème? Voici un lien de téléchargement pour le DEM http://snowserver.colorado.edu/pub/fromDominik/NED_10340081.zip Merci PS Je crossposted ceci à http://www.mathworks.com/matlabcentral/answers/38255-display-usgs-dem-using-geotiffread-and-mapshow

Répondre

0

J'ai finalement compris. geotiffread donne un type de matrice 'single' mais mapshow par défaut pour afficher un image qui n'accepte que le type 'double' (et quelques autres). Donc, la solution ici est soit:

A=double(A); 

ou

mapshow(A,R,'DisplayType','surface'); 
+0

J'ai remarqué que ce n'est pas ** ou ** mais ** et **. Aussi pourriez-vous expliquer pourquoi la spécification de DisplayType est nécessaire? – mlt

+0

Je ne sais pas vraiment plus que ce que j'ai écrit mais je comprends que 'mapshow' utilise par défaut' DisplayType' 'image' qui attend quelque chose d'autre qu'un type de matrice unique, d'où l'erreur msg que j'ai posté:' 1, I ou X ou RGB, pour être l'un de ces types: uint8, uint16, double, logique' Je pensais avoir mon type de matrice unique pour travailler avec l'option 'DisplayType' 'surface', mais il a été quelques semaines donc je devrais le regarder à nouveau et je suis loin de mon ordinateur principal en ce moment – Dominik

1

DisplayType est nécessaire Spécification parce que Matlab distingue des "images" à partir des données de trame continue. Matlab dispose d'une boîte à outils de traitement d'image complète ainsi que d'une boîte à outils de cartographie avec des fonctions distinctes dans chacune d'elles, souvent complémentaires mais issues de différents contextes de développement. Matlab supporte les "images" dans les types de classes logiques, uint8, uint16 et double, et les données raster (grille) en simple et double.

Aussi votre solution pour utiliser 'DisplayType', 'surface' a seulement fonctionné dans votre cas parce que vous aviez des données 'uniques'. Si, par exemple, vous avez créé une image de géotiff dans ArcGis et que vous avez ensuite essayé de la lire dans Matlab, elle entrerait comme int16 et vous obtiendriez la même erreur en utilisant mapshow ou geoshow, mais le 'DisplayType', 'surface 'ne fonctionnerait pas dans ce cas parce que DisplayType n'accepte pas int16. Votre solution pour convertir en double est plus générale.

Questions connexes