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

7 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
yunosuke ide
yunosuke ide on 21 Jan 2020
Takashi Uenoさん、回答ありがとうございます。
imwriteで書き出す方法を検討したのですが、
この方法だと0~1のデータしか書き出すことができず、
真っ白な画像が保存されてしまいます。
元のデータを0~1にスケーリングして書き出すと0,1の白黒画像を得ることができました。
しかし、8ビットカラーで256色を使用したいので、
元のデータをスケーリングせずにそのまま保存したいのですが、
他に良い方法はございませんでしょうか?
よろしくお願い致します。
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)

Categories

Find more on イメージ in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!