MATLAB 7.3 (R2006b) ではグレースケール画像は IMWRITE 関数を用いて正しく保存されないのはなぜですか?
1 回表示 (過去 30 日間)
古いコメントを表示
以下のグレースケール画像を作成しました。
A=repmat(-100:100,100,1);
figure(1)
imshow(A,[])
しかし、以下同様に IMWRITE 関数を用いてファイルに保存すると白黒となってしまいます。
imwrite(A,'myimage.png','BitDepth',16)
figure(2)
imshow('myimage.png')
グレースケール画像を正しく保存する方法を教えてください。
採用された回答
MathWorks Support Team
2013 年 4 月 15 日
これは関数 IMWRITE のデータの変換規則により発生します。
関数 IMWRITE の第 1 引数で指定する保存したい画像データの型が DOUBLE の場合、
範囲 0 ~ 1 のカラーマップが使用され、0 より小さい要素全ては 0 で、1 より大きい要素全ては 1 で置換されます。行列 A の要素の値は 0、1、負の数、または 1 より大きい正の数のみからなっているため、IMWRITE により 0 又は 1 のいづれかにマッピングされます。その結果、白黒の画像が出力されます。
正しく保存するため、以下同様に行列を範囲 0 ~ 1 の DOUBLE 型としてスケーリングしたデータに対して IMWRITE を行ってください。
A=A-min(A(:)); % shift data such that the smallest element of A is 0
A=A/max(A(:)); % normalize the shifted data to 1
imwrite(A,'myimage.png', 'BitDepth', 16);
figure(3)
imshow('myimage.png')
関数 IMWRITE の詳細は MATLAB コマンドプロンプトより
doc imwrite
を実行して表示されるドキュメントにてご参照頂けます。
0 件のコメント
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!