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

7 ビュー (過去 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 Exchangeイメージ についてさらに検索

Community Treasure Hunt

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

Start Hunting!