漫画イラスト変換ソフト
講師・議論者募集中
編集このソフトを作るには統計解析やAIその他にクオリア(哲学で言うところの物質の諸要素の質感)を作りこめる人間。 3DCGなどでオブジェの質感やラインなどの作成や処理を自動化した経験のある方など、参加者は幅が広いほど良いです。 まずはノートのページを作って何が必要か、誰を呼ぶことができるのか議論をはじめることからはじめ見ましょう。 (発案者 堀江伸一からのメッセージ)
作成するソフトの概論
編集子供の頃漫画家の絵をまねして描いた経験は誰しも同じだと思います。 自分も将来漫画家になれるかもしれない。 そうして楽しく漫画絵を描いた人も多いでしょう。 でも大人になったら絵を、うまく描けない現実に愕然とするものです。 今回紹介するソフトはそんな子供の頃の小さな夢をかなえてくれるかもしれません。 自分で描いた絵をパソコンのソフトに入力し、ボタンを押したら漫画家そっくりの絵になるソフト。 今回はそんなソフトの紹介です。
といってもまだアルゴリズムの段階なのですけどね。
(最初の着想は2010/3/14日ごろ、ネットへの投稿は2010/3/20にPixia掲示板に投稿)
まずは線画の処理から始めて見よう
編集絵をプログラムで処理するなら一番簡単に処理できそうなものは何でしょうか? 色々ありますが妥当なところは線画です。 まずは線画の処理のアルゴリズムから記述することにしましょう。
- プロの絵を真似る処理
その1曲線の修正 まずは簡単なところからはじめます。 線画をプロの絵に近づけるアルゴリズムからはじめてみましょう。
プロが描いた絵からベジェ曲線などの曲線を取り出す。 この曲線の集合をLinesとし要素をL1,,,Lnまでとする。 Linesの曲率をグラフにしこれを統計的に分類、この曲線より作り出された曲線を修正する関数をFとする。 Fが曲線をプロの曲線に近づける関数とする。
処理したい絵をBとする。 B内の曲線の集合をMYLines、要素をML1,ML2,,,MLnとする。
曲線MLiをLinesに近づける処理を NewMLi=F(Lines,MYLines,MLi) とする。 Fは主にMLiの線を、Linesのなかで一番近いラインLjになおしれてくれるなどの処理をする。
- 具体的な実装
適当に描いた絵を漫画家の絵に近づけてくれる処理その1。 簡単なところからこつこつとLine編
線画の処理。 自分の描いた絵をプロの漫画家や絵描きの線に近づける処理。
1 線で描かれた漫画家の絵を取り込み、画像を解析してラスター曲線に直す。 1-1 曲線を縮小しすべて同じ長さになるように変化させる。(この部分の処理には利点も欠点もあるかもしれない) 2 曲線を一定個数で等幅に区切る。区切った点ごとでの曲率の値をとる、これをRijとする。(i本目の曲線のJ個目の点での曲率という意味) 3 曲率を扱いやすい値に抑えるため適当な曲率の値をrとすると,-1<=FR(r)<=1 FRは単調増加関数という関数を考える。
一つの曲線の処理(uを適当な定数とする) 4 Ru0~Rumまでを処理する Luj=f(Ruj)=int(FR(Ruj)*a)とする。曲線からできた数字列を文字列とみなして木構造にはめていき全ての曲線を木構造にはめていく。aは実数である 5 後は、似せたい曲線にも同様にfを施して、木構造と照合する。 6 木構造から似た曲線が見つかれば、その似た曲線の集合と照合して曲線の補正処理を行う 7 見つからなければ曲線を分割、細かく切り分けて木と照合しよく似た曲線が見つかれば、きった曲線を個別に補正処理して、後はこれを綺麗な線でつなげる 8 どうしても似た曲線が見つからないときは、補正したい曲線と真似たい曲線を照合して、曲率のグラフの差の分散が一番小さくなる曲線を探す。 (曲線の長さの差の処理についてはプログラムの過程で処理を考える)
この処理に関する疑問 理想を言えば最初から処理8だけ、差の分散だけで解決できたらと思う。 曲線の長さの処理については、分散+g(曲線の長さの差の^2) gは適当な関数で分散に小さな影響を与える関数とする。 これを使えば良いかも? 細かい処理 曲線の補正処理については、2つの曲線A,B(Aを漫画家の線、Bを補正して漫画家に近づけたいほう)、2本の曲率の変化をグラフに描いてみれば、曲線をBをAに近づける操作をイメージ化することはとても簡単である。 このイメージにしたがって曲率を補正する関数を作ればよい。
分散による曲線の選定アルゴリズム
編集より高度なアルゴリズム
編集線の幅の変化、色合いの変化、線の密度や絵全体の中での線の流れ、曲線と交点の関係を考慮に入れた補正処理について記述。
まずはサイズの処理 線画を描くに当たって絵全体のバランスや線のサイズや位置関係というものが重要となるが、これを自動補正するためのアルゴリズムについて記述する。
図準備中 自分の描いた絵の交点の位置と、まねしたい漫画家の交点の位置関係。 この図で問題になる要素は下図のとおりとなる。 表準備中 この図のうち、特に考慮すべきなのは点の位置となる。
絵を修正するというと、非常に高度な処理を連想してしまう。 何せイラストというものは描かれるものの意味論的な要素を考慮する必要がある。 同じ丸でもタイヤとひまわりの輪では描き方が違う。 究極的なイラストソフトでは絵の意味論なものを理解した処理が必要となる、これはいまだSFの世界である。 可能ならこの処理を実装したいが困難となる。(この問題についてまともな処理を提案できるかたまっています)
ここでは意味論的なものに立ち入らず、それらしく見える処理をもって限度とする。
交点の位置と曲線の形を修正する処理といいかえると幾分現実的となる。
この処理で考慮すべき要素は以下のとおりとなる。
- 修正する範囲の交点の数、交点からでる線の数の一覧とそのつながり方。
- ひとつの交点からでる線の種類(直線か曲線かなどの分類わけ)と本数。
- 交点から出る線のなす角一覧。
- 線の密度や周りの線を考慮した線の流れなど
これら諸要素をもって、ソフトが交点の位置を修正するといえば現実的となる。 考慮すべき要素が増えると組み合わせ数が増えてしまい組み合わせによる空間がスカスカになる。 ここでは、まねしたい漫画家のイラストのなかから自動でルールを抽出する処理を解説する。
以下作りかけ
仮説
最もよい修正能力は人間の目と感性である可能性が高い。
人間と対話(入出力を繰り返しながら)こまめに絵を修正するソフトが最もよいかもしれない。
絵から線のルールを抽出する方法。
編集ここまではまねるべき曲線を高速に選定する方法を紹介した。 ここからは、原理的な方法を紹介する。
補正したい曲線をBとする、まねたい漫画家の曲線の集合をAiとする。 Aiの長さが全て1になるように拡大縮小したものをsAiとする。 もちろんBの長さも1とする。
xを実数の変数として、 Bの曲率=f(x) 0=<x=<1 sAiの曲率=gi(x) と表現する。
このときAiのどの曲線に近づけるかの選定は ∫((∫f(k)dk-∫gi(k)dk)^2)dx (但し積分の範囲 k=0~x が代入される)が最小になるsAiを探せばよい。
より簡単な方法としては 曲線Bのパラメータ表示=(u1(t),u2(t)) 曲線sAiのパラメータ表示=(u3i(t),u4i(t)) としtを代入しながら距離の差の2乗和を測る。 これが一番簡単な方法だろう。
その他の処理法
編集プロの絵=N(プロの絵を元に素人に真似させた絵) NをニューラルネットとしNは素人の絵からプロの絵に近づける補正をする処理を表す。 この処理を十分な回数ニューラルネットワークに入れて学習させる処理でもいいかもしれないけど、これは膨大な計算量とサンプルがないとまだまだ駄目かもしれない。 局所的な処理には使えるかもしれない?
著作権情報
編集過去の議論についてはこのページの編集履歴を。 製作過程についてはWeb魚拓を参照のこと。 http://www.pixia.jp/cgi-bin/note/index_.cgiの魚拓をとっている。 Pixia掲示板に投稿した内容を再掲。 編集者 兵庫県加古川市加古川町南備後79-16 堀江伸一
製作経過
編集このアイディアをPixiaで発表したものの単なる頭のおかしい人間として誰からも相手にされませんでした。 ですが、将来性はあると思います。 ここに掲載しているものはRPGで言えばLv5勇者程度の議論です。 優秀な方がこの講義を良質なものにしていただくことを願っています。
よく似たソフト、関係のあるアルゴリズム、先行する処理技術の一覧
編集未定