油絵フィルターと「マウスごしごし」インターフェイス
2007.06.26
先日ここで公開した油絵フィルター。参考にさせていただいた「.fla」の絵画フィルターの作者である、fladdictさん御本人からコメントをいただき、がぜんやる気を出した私。朝5時に日の出とともに目を覚ましてしまったのを幸いに、早朝プログラミングで幾つかの改良を加えた(これぞ本当の朝飯前^^)。
まずは、カレー屋の写真を処理したときに黄色い看板の直線部分が汚くなってしまう問題。ソースコードを読み直して見ると、近似色の判定の部分に一つタイポがあったため、茶色と黄色の区別がちゃんと出来ていなかったことが判明。そこを直すとすっきりと修正された。
次に挑戦したのが、犬の毛並みがうまく表現できていない点。楕円形のブラシを毛並みの方向に走らせてやれば良いのだが、画像から自動的にそれを抽出するのは容易ではないし、場所によってはブラシの方向がランダムな方が味が出るので、中途半端なアルゴリズムでは逆効果だ。
そこで思いついたのが、「人力(じんりき)レタッチ」。自動的にフィルターをかけた後に、マウスで(ボタンを押したまま)ゴシゴシとこすると、こすった方向に楕円形の「塗り」を追加するようにした。「マウスでごしごし」というユーザーインターフェイスは見たことがないが、けっこう直感的なのではないだろうか(フィードバック歓迎)。
犬の写真に「ごしごしレタッチ」を施す前と後ではこんなに違う。
で、当のFlashアプリはこれ。
油絵は重ね描きが出来ます。アナログなので描き手のフォーカスポイントがあります。全体的に効果を同じにしてしまうと機械的な全体的に視点の定まらないゆるい絵ができると思います。フォーカスの差はフォーカス位置からの距離に応じ、ブラシの太さ、ストロークの長さ、色幅、透明度(距離に応じてかすれる)、もとの写真の色を残すかどうか等の設定を付けてみたりする感じです。
任意でフォーカスポイントを指定するのは面倒ですし、物体と背景の画像認識ができると面白そうですが大変そうです。画面の輝度値(グレースケールとか)を見ることでいろいろできるかもしれません。隣り合う色との輝度差を見ながら輝度値の同じ方向に向かって筆を流したりとか、輝度値や輝度差の強いところをフォーカス位置にしてコントラスト具合(筆の種類)を決める等。
ほかにももとの画像とブラシを走らせた画像を2種類用意して、ブラシ画像に輝度値のアルファチャンネルを使ってもと画像を表示することでコントラストを実現してもいいかもしれません。
キャンバス素材もありますし、シーグラフでは色の混ざり具合までやっていました。ノンフォト系のフィルタは極めすぎると描いたほうがはやいのでは、と思いはじめるので、個人的にはフォーカスポイントの設定や色の抽出方法あたりが油絵フィルタを向上させるカギという感じです。
Posted by: screw | 2007.06.26 at 13:02