Gqmpegできれいな日本語を! | Sorry NO English |
1. 高解像度(例120×120)2階調(B&W)から低解像度(12×12)多階調(例256階調) への変換を漢字一文字ずつ全部に行なう。
これは、サンプリング空間周波数の0.5倍以上の帯域を持つ信号をLPF(Low Pass Filter)で落してから上の例だと1/10デシメーションをすればできそう な気がします。
まずフリーなデジタルフィルタの設計ツールを使って、LPFを設計してみ ました。例えば入力信号が100KHzで入力された場合10倍のオーバサンプリン グなら10KHzにデシメーションされ、それがサンプリング周波数なので、その 0.5、つまり5KHz以上の信号を落せば良い事になります(この周波数の絶対値 には意味はありません)。
ここではフィルタの次数をなるべく少なくすることを考慮に入れて、以下 の仕様で設計してみました。
|
処理量の計算
処理量を計算しておきます。まず、biquad IIR 2 次が6[MAC]、4段なので 1pixelあたり、6×4×3=72[MAC]、120dot×120dotの場合だと、2次元なので、 72×120×120×2=2.07[MMAC]。かなりの演算量です。Celeron 333MHzがどの くらいの演算性能を持つか知りませんが、浮動小数点の場合、仮に10[MMACs] とすれば、1秒間に5文字程度、漢字3000文字を作成するのには10分なので、 特に問題なさそうです。
そうそう、on the flyで作成する場合も気にしなくてはいけません。その 場合、200msecはかなり遅いですね。10倍もオーバサンプリングをしなくても いいかも。これは量子化誤差の低減との兼ね合いになると思います。60dot× 60dotだと処理量が1/4になるのでこのあたりがいいところかもしれません。
あるいは、浮動小数点演算ではなく、固定小数点演算にする方法がありま す。画像は最終的な精度があまり必要ないのでこれでも良いのですが、途中 でオーバフローしないように注意する必要があります。
いろいろとフィルタの次数を変えてやってみましたが、ISI(Inter Symbol Interference)を完全に除去することが難しい事が判明しました。フィルタを 急峻にすると、空間的に振動が出て止まらなくなります。
結局このアルゴリズムはあきらめて、元字をオーバサンプリングし、その 中の0と1の割合で濃度を作る方法にしました。ちなみに、Gimpのanti alias のコードもそうなっています(Gimpは3倍のオーバサンプリング)。
mail to:asakurai@m1.interq.or.jp |