[自分用論文メモ] Sketch Generation with Drawing Process Guided by Vector Flow
Sketch Generation with Drawing Process Guided by Vector Flow and Grayscale
論文リンク:https://arxiv.org/abs/2012.09004
実装:https://github.com/TZYSJTU/Sketch-Generation-with-Drawing-Process-Guided-by-Vector-Flow-and-Grayscale
何か間違ってたら教えて下さい。
どんなもの?
高品質な写真→鉛筆風の変換手法。
従来と違い描画のプロセスも示すことができる。
以下に生成プロセスとその結果が確認できる。
先行研究と比べてどこがすごい?
従来のニューラルネットを使った手法等は構造のゆがみやアーティファクトを発生させてしまい鉛筆風描画タスクに対してあまり有効でなかった。またテクスチャレンダリングに基づいた手法では最終結果しか得ることができないので描画プロセスを示すことができない。
本報告では鉛筆のストロークを模倣するようなメカニズムを設計し、高品質かつ描画プロセスを示すことができ、既存の鉛筆画アルゴリズムと比べてテクスチャの品質、スタイル、ユーザーの評価の点で優れていることが分かった。
技術や手法のキモはどこ?
最初にざっくりと説明すると、以下のように3つのブランチに分かれていて、
- ストローク方向の決定
- ストロークの陰影の決定
- 細部の強調
のように分かれている。以下に全体の流れを示す。
もう少し掘り下げて本論文を読んでいきます。
Stroke Simulation
線は鉛筆デッサンの基本要素です。
鉛筆画のストロークは線なので「線」と「ストローク」を同じ概念として捉えます。
実際に画家が鉛筆でスケッチする時、拡大してよく見てみると何本かの平行な曲線でできていることが分かります。以下の画像は実際の画家が描いた鉛筆スケッチです。
この平行曲線は残り部分でも見られ、その平行曲線のグループ内の線は高い類似性を持ちます。つまり隣り合う2本の線の距離、それぞれの線の濃淡、長さ、幅がとても近しいのです。
これらの平行線に対して統計的な分析を行います。
以下の図の(a)には実際の鉛筆スケッチから平行線を1セットだけ含むパッチを切り出して、水平になるようにパッチを回転させたものです。厳密には線画わずかに湾曲しており平行ではないので水平方向の統計が難しいのですが、(a)の
図(a)の
同じ統計を、すべての列のピクセルに対して行います。
あるストロークに対応する
したがって各
この平均と分散は、線の中心からの距離
mean(d)=G+(255-G)×\frac{2d}{W-1} -
variance(d)=(255-G)×cos\frac{πd}{W-1}
ここで、図3(a)の線を水平方向にまっすぐにできたとして、線の長さを
ある特定の行にある画素については、そのグレー値は独立同一ガウス分布であると考えるので、線のグレー値の分布を記録するために、
Stroke Generation
直線を描画し、それを垂直方向に曲げることで自然なストロークを得ることができます。
直線を描くためには、中心となる画素のグレー値の平均値
まず、
以下の図4(a)に示すように、幅
以下回りくどい説明が続きますが、図4のように直線を引いて2段階でゆがめることでストロークっぽくするよみたいなことを言いたいだけですので飛ばしても大丈夫です。
図4(d)のように、実際に鉛筆で描かれたストロークを観察すると、ストロークの両先端の部分が中央部よりも細く、軽くなっていることがわかります。これは、鉛筆の先端が紙面に触れたばかりのときや、離れようとしているときには、鉛筆の先端が紙面に与える圧力が、線の中央部を描くときよりも小さくなるためです。
絵描き的に言うと入り抜きのことです。
(参考:https://howto.clip-studio.com/library/page/view/illuststudio_zukai_pen_029)
線が完全な直線ではなく、わずかに曲がっているのは、画家が手首を振って線を描くため、紙の上での鉛筆の先端の動きは、基本的に半径の大きな円運動になるからです。
これを模倣するために、先に生成した直線を2回曲げます。
図3(d)に示すように、
線上のピクセルは、
青い円の半径を
Guided Stroke Drawing
ここでは、キャンバスに線を描くスケッチの方法を紹介する。
ストロークを決めるには、線の幅
その他のパラメータについては、入力画像の局所的な特性を利用して決定します。
Grayscale Guidance(どうやって線を引くか)
タスクの難しさを下げるために、一定の方向にストロークを引く方法のみを示すことにする。
以下の図6(a)は、水平方向にのみストロークを描いた結果である。
以下では、その描き方を紹介する。
まず入力されたグレースケール画像のヒストグラム分布を調整して、色相を良くするために適用的ヒストグラム平坦化CLAHE(Contrast Limited Adaptive histogram Equalization)を用いて入力のコントラストを上げます。
次に画像をいくつかのグレーレベルに一様に量子化します。
そのグレーレベルの値を
次にQを使って、水平方向にスキャンすることで、ストロークのパラメータを検索・決定します。
Qの1行目の画素を例にとります。
画素の階調値がG1以下となる1行目のすべての区間を検索します。
これらの区間の始点と長さを、描くべきストロークの始点と長さとし、ストロークの中心となる画素のグレー値の平均値GをG1とすると、水平方向に複数のストロークを描くことができます(ストロークの幅Wはあらかじめ指定されているとします)。
ここで新たな確率変数
中心となる画素の階調値が平均
次に、
このプロセスでは、異なるストロークのカバレッジ領域が重なります。
重なった領域のピクセルのグレー値は、最小の値(最も暗い色)に決定されます。
これで、図6(a)のような結果が得られます。
ここでは水平方向にストロークを描く方法しか紹介していませんが、異なる方向でも同じです。
水平方向にストロークを描く前に、入力画像を時計回りに回転させればよいのです。
描画が終わったら、反時計回りに回転させる。このようにして、あらゆる方向にストロークを描くことができます。
Direction Guidance(どの方向に線を引くか)
上では一定の方向に対してストロークを引く方法を紹介しました。
実際の鉛筆画を見てみると、ストロークの方向は大体エッジの接線に沿っていることが容易に分かると思います。(まあ僕は分からなかったんですけどね)
なので物体のエッジを利用して近くの領域のストロークの方向を誘導できることになります。
ここで勾配とエッジは密接に関係しており画像の勾配情報を用いることでこのストローク方向の推定ができます。
本報告ではedge tangent flow (ETF)というアルゴリズムを用いて書くピクセルのストローク方向を推定しています。
詳しくは元の論文を読むか、著者の166行程度のPython実装(https://github.com/TZYSJTU/Sketch-Generation-with-Drawing-Process-Guided-by-Vector-Flow-and-Grayscale/blob/main/ETF/edge_tangent_flow.py )を見てみることをおすすめします。図6(b)が少し見づらいと思うので拡大図を以下に持ってきました。
小さな赤い矢印はETFで計算されたベクトル方向を示しています。
方向
同じ方向をもつ画素を1つの領域として分割します。
下図のArea divisionで示すように、
各領域に異なる方向のストロークを描画した後、
Area Merging and Detail Enhancement(領域の合成と強調)
先の
よく見ると異なる領域の境界に違和感があることが分かります。境界線も見えてしまっています。なので図6(d)に示すように全てのストロークの両先端に対し、
これでうまく融合できたように見えますが、図6(d)をよく見ると女性の歯と目は非常に不鮮明になっています(ストロークが長いため)。なので細部を強調してやる必要があります。ここでは図6(e)に示すように、「Combining Sketch and Tone for Pencil Drawing Production」の線形畳み込み法を採用し、エッジマップを得ることができます。
以下にその線形畳み込み法の概略図を示します。
最後にエッジマップ
Process Reconstruction(ストローク描画の順番決定)
画家がスケッチを描く時通常、最初にアウトライン(長くて暗い線、つまりはっきりとした輪郭)を描き、次にディテール(これらの線は短くてあまり暗くないことが多い)を描きます。
これを真似してSという指標を用い、それぞれの線がアウトラインとディテールのどちらになりやすいかを判定します。
ここで
どうやって有効だと検証した?
他の手法より優れている(図7)にも関わらず、描画の順番を提示できるのはほんとに凄いと思います。
議論はある?
ディープな手法は多く提案されているが、ここまで絵を研究し統計をとり、画像処理だけで自動化している論文はそうないと思う。めちゃくちゃ感動した。
次に読むべき論文は?
Stylized Neural Painting
その他
著者が実装を公開しているので誰でも鉛筆風の変換を試すことができます。
神か?w
Discussion