wavelet による画像サイズ変更

説明

wavelet アルゴリズムの学習用に BMP 画像のサイズを半分や2倍に変換するプログラムです。

wavelet とは?

wavelet は、画像圧縮手法 JPEG2000 にも採用されたアルゴリズムです。 その作用を簡単に言うと、1次元の波を低域成分と高域成分に分割します。 low pass filter と high pass filter の組と考えてもかまいません。

逆変換では、高域成分と低域成分の組から、もとの信号を復元します。

画像のような2次元のデータに wavelet 変換をかけるときは、画像を1行とか1列とかのデータの集合ととらえ、各行または列に対して変換をかけます。 画像を縦横1/2 にするには縦方向の変換と横方向の変換を順番にかけます。

wavelet によるサイズ変換

ここで行っているサイズ変換は、1/2 倍と 2倍のサイズへ画像を変換するものです。

1/2 倍する場合は、元画像を wavelet 変換して低域成分をとりだします。 ただ低域成分を取り出しただけでは画像サイズは元のままなので、データを1個おきに取り出す間引を行います。 高域成分はここでは必要ないので、捨てています。

実際には低域成分を取り出して間引く作業を効率化した手順がJPEG2000 向けに提案されているので、それを流用しました。 変換パラメーターは JPEG2000 lossy compress (非可逆圧縮)のものを利用しました。

2倍する場合も JPEG2000 lossy compress の手順を利用しています。 JPEG2000で圧縮された画像を復元する場合と違って、ここでは合成すべき高域成分は存在しません。 そのために、高域成分を全て 0 として変換しています。 その結果、得られる画像はぼやけた画像になります。 もともと情報が足りないのを無理矢理拡大しているので、 他のアルゴリズムを使った時と同じく細かいところが見えてきたりはしません。

コマンドの使い方

コマンドは、画像を 1/2倍にするものと2倍にするものの二つになります。

% wavelet_half  元のBMPファイル名 出力先のBMPファイル名
% wavelet_double  元のBMPファイル名 出力先のBMPファイル名

ライセンス

この程度のプログラムは、誰が書いても同じようなものになると思われます。 そのため、使用、再配布、商業利用などに制限をつけません。

GPL にもしません。

参考文献

プログラム

対応OSファイルサイズバージョン日付
-ソース wavelet1.tgz4,532 Byte0.22004年7月11日
-ソース wavelet1.lzh3,399 Byte0.22004年7月11日

二つのファイルは、圧縮方式が違うだけで中身は一緒です。

バージョン 0.1 には、半分にするときの計算式に誤りがありました。


back button もどる