サイズが1920×1​152、double​型の行列を、余白なし​の8bitグレースケ​ールイメージとして、​BMP形式で保存した​い。

5 ビュー (過去 30 日間)
yunosuke ide
yunosuke ide 2020 年 1 月 21 日
コメント済み: Takashi Ueno 2020 年 1 月 22 日
サイズが1920×1152、double型の行列を、余白なしの8bitグレースケールイメージとして、BMP形式で保存したいです。
そのまま8bitのイメージを保存したいので、元のデータを0~1にスケーリングなどはできません。
figure、imagescを使って表示した画像を、
saveasやprintなどを用いて保存する方法を取っているのですが、
以下の原因で上手くいきません。
・保存した際に、イメージのサイズが変更されている。
・24bitのイメージとして保存されている。
・BMP形式として保存できない。
・無駄な余白がある。
上手くいく方法が分かる方いましたら、教えていただきたいです。
よろしくお願い致します。

採用された回答

Takashi Ueno
Takashi Ueno 2020 年 1 月 21 日
imwriteで書き出すのがよいかと。
imwriteに与えたデータがdouble型の場合、
>A が double または single データ型のグレースケールまたは RGB カラー イメージの場合、imwrite は、ダイナミック レンジを [0,1] と仮定してデータを自動的に 255 でスケールしてから、8 ビット値としてファイルに書き込みます。
という動作となるので、適宜スケーリングや型変換など行う必要があるかと思います。
  2 件のコメント
yunosuke ide
yunosuke ide 2020 年 1 月 21 日
Takashi Uenoさん、回答ありがとうございます。
imwriteで書き出す方法を検討したのですが、
この方法だと0~1のデータしか書き出すことができず、
真っ白な画像が保存されてしまいます。
元のデータを0~1にスケーリングして書き出すと0,1の白黒画像を得ることができました。
しかし、8ビットカラーで256色を使用したいので、
元のデータをスケーリングせずにそのまま保存したいのですが、
他に良い方法はございませんでしょうか?
よろしくお願い致します。
Takashi Ueno
Takashi Ueno 2020 年 1 月 22 日
imwriteに0~1にスケーリングされたdouble型のデータを与えると、255でスケーリングされて8bit画像(つまり256諧調のグレースケール画像)として書き出されるはずです。
例えば、
I=repmat([0:255],256,1);
imwrite(I/255,'double.bmp')
のように、0から255の値域を持つdouble型配列を255で除算し、0から1にスケーリングして書き出すと、
白黒だけではなくグレーの値を持った画像が書き出されるはずですが、そうはなっていないでしょうか?
もちろん、0から255の値域を持つdouble型配列を、
I=repmat([0:255],256,1);
imwrite(uint8(I),'uint8.bmp')
のようにuint8型に変換してもよいですが、これで書き出される画像は0~1にスケーリングしたdouble型配列を与えた場合と同じもののはずです。

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeConvert Image Type についてさらに検索

Community Treasure Hunt

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

Start Hunting!