2017-01-10 6 views
0

次のコードスニペットの結果は、doubleimageとなります。imshowを使用した場合のuint8とdouble画像の相違

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

一方、この他のコードスニペットはuint8imageをもたらします。

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

これら二つの数字を表示しながら、imshowを使用して、これらの2枚の画像の表示結果が異なっているが、この違いの背後にある理由は何ですか?タイプdouble

+0

'uint'を表示するにmat2grayを使用してdoubleバージョンを正規化することができます! * unsigned * integer( 'unit'ではなく) –

答えて

4

画像はあなたのdoubleデータは、あなたが単にdoubleとしてそれをキャストするので0と255の間の値を(含まれているので0〜255の値を持つと想定され、0と1とuint8画像間の値を持つと想定されており、ほとんどの値が1より大きいためほとんど白で表示されます)。

imshowの2番目の入力を使用して、この仮定を無視して、ディスプレイを自動的にデータのダイナミックレンジ

imshow(h, []) 

それとも、前の画像

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

imshowの魔法のような振る舞いは、非対話的な設定では決してうまくありません。あなたは入力タイプと範囲についての前提をチェックする関数でラップすることで、驚きと苦痛を救うことができます。 – welch

関連する問題