2017-01-10 2 views
0

L'extrait de code suivant produit un doubleimage.La différence entre les images uint8 et les images doubles lors de l'utilisation de imshow

f = imread('C:\Users\Administrator\Desktop\2.tif'); 
h = double(f); 
figure; 
imshow(h); 

alors, cet autre extrait de code résulte une uint8image.

f = imread('C:\Users\Administrator\Desktop\2.tif'); 
figure; 
imshow(f); 

Alors que l'affichage de ces deux chiffres, les résultats affichés de ces deux images à l'aide imshow sont différentes, mais quelle est la raison derrière cette différence?

+0

'uint'! * unsigned * integer (pas 'unit') –

Répondre

4

images de type double sont supposés avoir des valeurs comprises entre 0 et 1 et uint8 images sont supposées avoir des valeurs comprises entre 0 et 255. Etant donné que vos données double contient des valeurs comprises entre 0 et 255 (puisque vous simplement jeté comme un double et n'effectue aucune mise à l'échelle), il apparaîtra comme étant essentiellement blanc, car la plupart des valeurs sont supérieures à 1.

Vous pouvez utiliser la deuxième entrée à imshow pour indiquer que vous souhaitez ignorer cette hypothèse et mettre automatiquement l'affichage à l'échelle. la plage dynamique des données

imshow(h, []) 

Ou vous pouvez normaliser la version double en utilisant mat2gray avant d'afficher l'image

h = mat2gray(h); 
imshow(h) 
+1

Le comportement magique d'imshow n'est presque jamais une bonne chose dans un environnement non-interactif. vous pouvez vous épargner la surprise et la douleur en l'enveloppant dans une fonction qui vérifie les hypothèses sur le type et la plage d'entrée. – welch