Painterly Rendering

画像を油彩のラフスケッチ風に変換するプログラムを作ってみました。画像の分析ツールを作る一環で、情報を落としてラフスケッチのようなシンプルなシェープやカラーだけを確認できたらいいなと思いました。

 

シンプルにするならポスタリゼーションだろう、と以前つくったカラーパレットを取り出す処理を利用して画像を減色してみることにしました。カラーパレットを指定した数(例えば32色)で取得して、全ピクセルを色空間で一番近いパレットカラーに置き換えていきます。

 

そして予想通り、なんだか味気ない結果になりました。う~ん、こういうことではない・・・。

でもボ~っと眺めていたらあることに気が付きました。自分が絵を描くときはこのポスタリゼーションの等高線(色の境界線)に沿って筆を流しているような気がする。絵を描く時と同じような手順を使ったら絵のようになるかもしれない。

自分の描き方なら手順も分かっているので、画像処理でも同じような仕組みにすれば近い結果が得られるのではないかと考えました。

 

手順

ポスタリゼーションで分けた色の境界部分だけを抽出しました。この輪郭線に筆を走らせればいい感じになりそうです。

 

次に筆を流す方向ですが、これは輪郭線の方向に流せばいいと思いました。若干強引ですが、画像をモノクロにして勾配から法線マップを生成します。そして細かい情報は要らないのでボカして大雑把にします。

 

法線マップのXとY成分を90度回転させたベクトルマップに変換します。ゲーム開発だとフローマップといわれるものですね。

 

ベクトルを確認するために矢印を置いてみました。シルエットに沿って矢印が流れているのが確認できます。

ブラシの大きさはポスタリゼーションの輪郭画像を周辺サンプリングして、輪郭線が少ないところは大きく、輪郭線が密集しているところは小さくしています。

ブラシの色は減色したポスタリゼーションの画像を下地にして同じ座標から取得しています。そして色の順番は暗から明へ重ねて描画していきます。これは油彩で描く場合と同じです。

 

ブラシはこのような画像を用意しました。これを配置していきます。

 

結果です。ラフスケッチっぽくなっていると思います。

その他の変換例です。

 

 

「ラフスケッチ風」なら今回ぐらいでいいかなと思うのですが、「油彩画風」にするとなると足りないものが多いし、全工程で修正をいれたくなりますね。何かいいアイデアが浮かんだらまた取り組んでみようと思います。

 

開発環境:VIsual Studio Community 2017, WPF

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中