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

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

Accepted Answer

Takashi Ueno
Takashi Ueno on 21 Jan 2020
imwriteで書き出すのがよいかと。
imwriteに与えたデータがdouble型の場合、
>A が double または single データ型のグレースケールまたは RGB カラー イメージの場合、imwrite は、ダイナミック レンジを [0,1] と仮定してデータを自動的に 255 でスケールしてから、8 ビット値としてファイルに書き込みます。
という動作となるので、適宜スケーリングや型変換など行う必要があるかと思います。
  2 Comments
Takashi Ueno
Takashi Ueno on 22 Jan 2020
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型配列を与えた場合と同じもののはずです。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!