フーリエ変換を利用した、モアレ除去プログラム実験 最新情報を公開しよう! ワシが高校生の時に作った初めてのプログラムは、「?」を描き出すという ものであったことは、「できるんだ8」を読んだ方はご存知であろう。 さらに、1991年頃から、写真画像をスキャンして 色々加工研究している事も一部には知られていた。
このように、最初から画像指向であったワシではあるが、いかんせん入手できる写真画像は、殆ど市販雑誌のグラビアである。 このグラビアはルーペで拡大すると解るように、「網点印刷プロセス」という技術により印刷されている。 このグラビアの 網点とスキャナの解像度の関係で、読込んだ画像に不快な「モアレ」が発生することは、一度でもグラビアをスキャナで 読込んだ方は経験していることと思う。
「このコはぜひ修正して、ぜひ水着を剥いでぜひ遺伝子操作して・・・」
と、オーディナリィなマッドサイエンティストならば だれでも思いつく熱きパッションも、スキャン画像に野暮なモアレがあると途端に縮退してしまうものであった。
モアレがジラジラ入ったスキャナ結果例
スキャン時のモアレ(Plaiding)発生のしくみ
要するに、
「印刷網点とスキャナのうなり(ビート)現象」 である。 身近な例では、
「スクリーントーン重ねの時に発生する模様」 の事だ。
グラビア印刷は、CMYKの4色のインクドットで印刷されており、一定の周期を持っている。これをスキャナで読込むと、 一般的にはスキャナ解像度がグラビアのドット周期と厳密には一致していないので、たとえば赤が強くなるピクセルと、青が強くなる ピクセルが交互に発生してしまう。この差は小さいものだが、一定の周期を持っていて、人間の目には縞模様となって映ってしまうのだ。
思えば、トレーシングペーパーを通してスキャンしたり、ガラスをはさんでスキャナ焦点をずらせたりと、なんとかモアレが 目立たないように工夫したが、そのような原始的な試みは、総て真夏の雪のようにはかなく消えていった。 それではと、モアレのある画像を平均化するツール等を検討してみたが、画像をぼかさないようにモアレだけを選択的に 消去するソフトウェアはついに発見できなかった。
「あぁぁ!この世に神・・いや、この場合は科学真理か・・・はないものか!」
しかし! ワシの核融合も起さんばかりのプラズマな情熱と、ヘリウムも液化するほどのクールな知性は、そのモアレを みごとに消去する手段を開発した。 それが、今回紹介する「2次元フーリエ変換プログラム」である!
このプログラムは、モアレが周期性をもつ点に着目し、画像を2次元フーリエ変換することでモアレの画像エネルギー成分を 収束させ、その部分にマスクをかける事で、一気にモアレを消去するという原理に基づいている。 なぜフーリエ変換でそのようなことが可能なのかは、ワシが著した論文を見ていただこう。
tmsr017c.pdf
ま、はやい話、モアレを修正しやすいように画像を変換するソフトウェアを作ったという訳だ。
実際のモアレ修正作業のようす ここで、ワシが作成したプログラム: Imageopw を紹介しよう→ ★これ★ はPC98/DOS 版のものを BCC/EasyWin へ移植したものであり、不親切このうえないツールで、コマンドスクリプトで起動する バッチ動作のみ行なえる。 ヘルプは、オプションなしで実行すると、Window内部に表示されるというものじゃ。 そのうえ、メモリ 32MB以上の実装を推奨するし。
では、次に実際の作業を見てみよう。 気を付けなければいけないのは、このプログラムは、 「モアレ自動除去はできない」というコトじゃ。 なに、サギかって? いやいや、 「このプログラムを使ってモアレを消去することが可能」なだけじゃよ、諸君!
ともあれ、その消去手順を見ていただこう。 まず、元の画像データを Windows標準の .BMP フォーマット(24bit color)にて セーブする。 ここでは、kimika00.BMPとしておこうか。
次に、同じディレクトリに、以下のようなコマンドスクリプトファイルを作成する。 ワシのプログラムは、この スクリプトの内容に従ってバッチ的に処理を行うのじゃ。 推奨メモリ 32Mbyte以上、数値演算コプロセッサは必須である。
実行時間は、1024×1024 pixelのサイズで、1画像成分あたり Pentium133クラスで約6分という所じゃ。
あ、それと、ディスクスペースはムチャ要求する。 1024×1024の一連の処理で、50Mbyte程度はワークに取られるので注意が 肝腎じゃ。ファイル名 : fft.cmdkimika00.bmp の部分を変更すれば、他の .BMP ファイルにも対応できる。
FFT -H kimika00.bmp hue.bmp
FFT -S kimika00.bmp sat.bmp
FFT -V kimika00.bmp val.bmp
このスクリプトファイルを Imageopw コマンドラインオプションとするか、アイコンへドラッグ&ドロップすることで コマンドスクリプトを実行できる。
すると、同じディレクトリに、以下のようなファイルが作成される。
Hue.bmp Hue.fft拡張子が .bmp のものは、フィルタ用の画像ファイルであり、.fft のものはフーリエ変換結果のデータである。 フィルタ画像は、表示するためとダイナミックレンジをかせぐために、実数化/対数圧縮をかけてある。
Sat.bmp Sat.fft
Val.bmp Val.fft
このフィルタ画像に、修正すべきモアレ成分があらわれているのである。
kimika.BMP 処理後のフィルタ画像の例を表示しよう。
賢明なる諸君はもうお気付きであろう。 このフィルタの上にある、十字のような、星のような模様が、問題のモアレ成分である。 この成分を除去し、フーリエ演算結果に掛合わせて逆フーリエ変換を行なえば、モアレが消去できるという訳じゃ。
Hue.bmp Sat.bmp Val.bmp
ただし、中心のひときわ大きな十字は、これこそ必用なもとの画像データそのものであるので、これを除去することはしない
では、除去したフィルタを以下に示そう。 え? どうやって消去したかって? それは勿論
のである! しかし心配はいらん! 中心部を変化させないよう、だいたい消えるように画像の他の部分をコピーすれば よいのじゃ。 このようにして、マニュアルで書換えたマスクはどうなるかというと、
この辺に、マッドサイエンティストならではのご都合主義的な匠のワザが光るのである。
Hue.bmp(修正後) Sat.bmp(修正後) Val.bmp(修正後)
ここまでくれば、あとは以下のコマンドスクリプトにて、フィルタ処理+フーリエ逆変換を行う.
モアレ除去処理後の画像ファイルを、kimika01.bmpとすると、ファイル名 : rft.cmdを先程と同様に Imageopw に食わせればよい。
RFT -H hue.bmp kimika01.h
RFT -S sat.bmp kimika01.s
RFT -V val.bmp kimika01.v
MERGE -H kimika01.h kimika01.bmp
いろいろなファイルができるが、必用なものは kimika01.bmp のみである。 さぁ、その結果はというと、
という訳である! どうじゃ、若干の残りはあるものの、みごとにモアレが除去されているではないか!
今回は説明のため、かなりモアレを強調した素材を選んだが、実際のものはもう少し程度が良いものである。
という訳で、まとめ 見てのとおり、ワシの開発したプログラムにて、モアレを取除く道が切開かれた。 この道の向こうには、どんな 世界が待っているのじゃろうか。 それはもう、アレをああしてコレをこうして、・・・・・・← 研究室へ戻る
等と、思わず妄想たくましくしてしまう世界なのじゃろう。
ここで最後に言っておくが、一応法律上は肖像権とか著作権とかあるので、あくまでこの実験はモアレを除去する事が 主眼であることをここに明らかにしておきたい。したがって、本ページの画像ファイルのダウンロードは不許可としておこう。
Dr.キッチュしるす