2010年3月21日日曜日

自分で描いた絵が勝手に漫画家そっくりの絵になるソフト

子供の頃漫画家の絵を真似ては、かっこいいと思ったりかわいいと思ったりして、まねして描いた経験は誰しも同じだと思います。
自分も将来漫画家になれるかもしれない。
でも大人になったら、うまく描けない現実に愕然とするものです。
今回のソフトはそれをかなえてくれるかもしれません。
自分で描いた絵をパソコンのソフトに入力し、ボタンを押したら漫画家そっくりの絵になるソフト。
今回はそんなソフトの紹介です。
といってもまだアルゴリズムの段階なのですけどね。





----------アルゴリズム-----------
一番簡単な処理からはじめます。
まずは線画の処理。
自分の描いた絵をプロの漫画家や絵描きの線に近づける処理です。


プロの絵を真似る処理
その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とする。0<=FR(r)<=1 FRは単調増加関数とする。こうういう関数を考えて曲率を扱う。

4 Ri0~Rimまでを処理する Lij=f(Rij)=int(FR(Rij)*a)とでもし、曲線ごとにできた数字列を文字列とみなして木構造にはめていく。aは実数である
5 後は、似せたい曲線にも同様にfを施して、木構造と照合する。
6 木構造から似た曲線が見つかれば、その似た曲線の集合と照合して曲線の補正処理を行う
7 見つからなければ曲線を分割、細かく切り分けて木と照合し見つかれば、きった曲線をここに補正処理して、後はこれを綺麗な線でつなげる
8 どうしても似た曲線が見つからないときは、補正したい曲線と真似たい曲線を照合して、曲率のグラフの差の分散が一番小さくなる曲線を探す。(曲線の長さの差の処理についてはプログラムの過程で処理を考える)(理想を言えば最初から処理8だけで解決できたらと思う)




その他の処理法
プロの絵=N(プロの絵を元に素人に真似させた絵)
これを十分な回数ニューラルネットワークに入れて学習させる処理でもいいかもしれないけど、これは膨大な計算量とサンプルがないとまだまだ駄目かもしれない。
局所的な処理には使えるかもしれない?




過去の議論についてはこのページの編集履歴を。
製作過程についてはWeb魚拓を参照のこと。
http://www.pixia.jp/cgi-bin/note/index_.cgiの魚拓をとっている。
Pixia掲示板に投稿した内容を再掲。

兵庫県加古川市加古川町南備後79-16 堀江伸一





お読みになったとおり、残念ながらまだアルゴリズムの考案段階です。
世の中に同じソフトがあるならご指摘ください。

0 件のコメント:

コメントを投稿