サイズが1920×1152、double型の行列を、余白なしの8bitグレースケールイメージとして、BMP形式で保存したい。
5 views (last 30 days)
Show older comments
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形式として保存できない。
・無駄な余白がある。
上手くいく方法が分かる方いましたら、教えていただきたいです。
よろしくお願い致します。
0 Comments
Accepted Answer
Takashi Ueno
on 21 Jan 2020
imwriteで書き出すのがよいかと。
imwriteに与えたデータがdouble型の場合、
>A が double または single データ型のグレースケールまたは RGB カラー イメージの場合、imwrite は、ダイナミック レンジを [0,1] と仮定してデータを自動的に 255 でスケールしてから、8 ビット値としてファイルに書き込みます。
という動作となるので、適宜スケーリングや型変換など行う必要があるかと思います。
2 Comments
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型配列を与えた場合と同じもののはずです。
More Answers (0)
See Also
Categories
Find more on Convert Image Type 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!