8bitカラー画像を4bitに変換することはできますか?
Show older comments
.jpegの画像を4bitに変換したいのですがどうすればいいですか?
ご教授いただきたく存じます。
4 Comments
Atsushi Ueno
on 23 Nov 2022
減色が目的なのか、(メモリ/ファイル上の)データ量削減が目的なのかを明確にすべきだと思います。
- 8bitカラー(1677万色)⇒4bitカラー(4096色)に減色する (量子化であり、色深度即ちデータ量はそのまま)
- (メモリ上の) イメージデータの色深度を4bitにする (MATLABに4bit整数は無いので対策が必要)
- JPEGファイルの色深度を4bitにする (可能?)
@Hernia Babyさんの回答のリンク先がやっているのは選択肢の最初と2番目で、JPEGファイルの話ではありません。メモリ上の型はuint8型からdouble型に変わっており、最終的にFixed-Point Designerを用いて4bitに固定小数点化する事を提案されています。
MATLABのJPEGファイル書き込み機能で設定可能な色深度(BitDepth)は 8または12bitカラーで、4bitカラーの選択肢はありません。(? JPEGフォーマットが分からないがJPEGの色深度4bitは無いらしい)
これとは別に、JPEG圧縮を有効にし圧縮率を上げていくと見た目も減色されていきます。なので先に書いた「減色かデータ量削減か」「圧縮無しか有りか」といった点も明確になると、回答も明確になってくると思います。
@Rさんのやりたい事はどれでしょう?
R
on 23 Nov 2022
NO: 量子化により減色されましたが、データ量はむしろ増えています。
(imquantize関数においてvalues — 量子化値が設定されていない為メモリ上の型がuint8型からdouble型に変わっています。回答者様もその点を言及されている通り、意図的にそうしたのだと思います)
YES: データ型(bit数)も落とせばデータ量が削減されます。MATLABに4bit整数型はありません。Fixed-Point Designerを用いて4bitに固定小数点化する事を提案されています。しかし色深度を4bitにしてもJPEGファイルフォーマットに収める方法がありません。リンク先の質問範囲ではなかったのでそこまで説明されていません。
色深度とJPEG圧縮は別の話で、imwrite関数でJPEGファイルを作成するなら引数のMode — 圧縮のタイプおよびQuality — 出力ファイルの品質で設定します。圧縮により色深度が減る訳ではなく、圧縮の結果として量子化と同様に減色されます。これは極端な例で、通常のJPEG圧縮率であれば元画像と見た目は変わりません。
I = imread('peppers.png'); % uint8型。色深度は8bitのままにする
imwrite(I,'comp_peppers.jpg',"jpg","BitDepth",8,"Mode","lossy","Quality",0); % JPEG圧縮の限界に挑戦
I2 = imread('comp_peppers.jpg'); % JPEG圧縮されたJPEGファイルを開く
montage({I,I2});
R
on 25 Nov 2022
Answers (1)
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!