2008年06月10日

「写真で絵画」ソフトウェアでの色割り当て

本BLOGでは開発者の視点で会社で発表しているソフトウェアについて書いていこうと思います。
内容に技術的な誤りを見つけた場合は、後日可能な限り修正したいと思います。
初回は「写真で絵画」というアプリケーションの色割り当てのメモです。
まとまった文章にするのは初めてです。



会社で「写真で絵画」というソフトウェア(α版)を発表し、正式リリースに向けて試用していただける方を募集しています。
ニュースリリースはこちら

ソフトを使う前に、絵画の画像と沢山の写真を準備します。

準備ができたら、ソフトを起動し、まずは写真を読み込み解析させます(結構時間がかかります)。
次に、絵画生成ボタンをクリックします。
すると、絵画の1ピクセル毎に、対応する写真がジグゾーパズルのピースのように当てはめられ、大きな絵画ができあがります。

できあがった絵画を近くで見ると1枚1枚が写真、離れて見ると絵画に見える、という不思議な演出ができます。


見て驚いて、こんなんあるんかぁ!で終わりかもしれませんが、
使える状況はいろいろあるんだろうな(あって欲しい・・・)、と思います。

ここは、開発者メモなので、ソフトの秘密について一部を書きましょう。

やっていることは、写真1枚毎に平均色を調べてリストを作り、指定された絵画のサムネイルの各ピクセルの色に近いものを当てはめることです。

機能を分けて、それぞれプログラムを作って上手に組み合わせるとソフトができるという感じですが、こんな工夫をやってます。

画像のピクセル比は1:1のため、写真が正方形ならいいのですが、実際には横長だったり、縦長だったりします。
現在のバージョンは、写真を正方形のサムネイル画像(60x60)に変形させて利用しています。
横長の写真だと、横方向に圧縮されるので、人物がやせ気味に写った写真になります。
縦長の写真だと、縦方向に圧縮されるので、人物が太り気味に写った写真になります。

写真の平均色を求めるのに、当初は原画像のすべてのピクセルをチェックしていましたが、時間がかかるため最終的に10ピクセル毎に画素を抽出するようにしました。
どれだけ粗くできるかは、原画の色の変化やサイズに依存します。
自然画像であれば、色の変化はそれほど急峻ではないので、私が実験した感じでは、原画が1000x1000程度のサイズであれば1/10に間引いて100x100になっても十分使えます。
律儀にすべてのピクセルを調べてもよいですが、待つばかりでは進まないので、間引いて、時間に折り合いをつけます。
10年後にはCPU性能も向上するでしょうから、すべてのピクセルを調べられるかもしれません。
(この方法も残していますが、今は、生成する絵画に適用するサムネイルの平均色を調べる方式を採用しています。サムネイルを使う場合は、ピクセル数が少ないので全ピクセルをチェックしています)

写真毎の平均色を調べた後、絵画のピクセルに最近似色の写真を割り当てて大きな画像を生成しますが、少しまずいことが発生しました。
絵画に使われる色はピクセルの数だけあるわけではなく、ピクセル数より少ない、つまり同じ色がいろんな場所にあるという状況です。ちなみにサンプルに使ったモナリザの絵画は100x147,9268色です。ピクセル数に対して60%と色数が多い感じがしますが、布地の部分に同じ色が多く占めており、その部分の面積は広くなっています。
絵画の色に写真の最近似色を割り当てると、最近似色の写真が1色に1枚しかないので、絵画全体では同じ色の部分には同じ画像ばかりが割り当てらてしまいます。黒や白の部分が多い絵画では、その領域に同じ写真が敷き詰められているのがはっきりわかります。

写真の平均色を調べて、ある平均色に対して沢山の写真があれば、順番にあるいはランダムに写真を割り当てられるので、こんなことは起こらないのですが、実際には写真の数だけ異なる平均色があるという状況でした。どういった写真を集めるかにより傾向は異なるかもしれませんが、手元の旅のスナップ写真数千枚を調べて限りは、全体の99%以上が異なる色で、同じ色は1%未満でした。

これでは多くの写真を使うことができません。私の希望はできるだけ異なる写真を入れることなので、何とかしたい。
そこで、近似色の選択に許容範囲を設けて、最近似色に近い、他の色の写真も割り当てできるようにしてみました。
この方法だと多くの写真を入れることができるはずです。

やってみた結果は以下の図のとおりです。各許容度の上側に生成した絵画を表示しています。許容範囲0%は近似色と同じ写真のみ割り当てています。
許容範囲を広げすぎると、利用できる写真は増えますが、絵画がノイズに埋もれ絵画っぽさがなくなってしまいます。
(近似色に対して似ている色の写真をグループとして考え、グループの中からランダムに写真を選択しているので、ノイズっぽく見えるのではないかと思います。写真の枚数は少し減るかもしれませんが、似ている色の写真が多く選択されるように確率変数を導入して選択すれば多少は改善するかもしれません。)
今の方法では、ある近似色に対して5~10%くらいにとどめた方がよいように感じます。
0%5%10%
許容度 0%許容度 5%許容度 10%
20%50%
許容度 20%許容度 50%

絵画によって結果は異なると思います。実際にはやってみないとわかりません。
今回の画像生成に用意した写真は全部で1728枚、割り当てられた写真の枚数は以下のとおり。
0% 583枚
5% 1344枚
10% 1541枚
20% 1663枚
50% 1708枚

では、絵画っぽさを残したまま、多くの異なる写真を入れる方法はないでしょうか?
これまで、色の許容範囲を広げて写真を増やすアプローチを考えましたが、色の方ではなく、写真の色を変化させるアプローチもありです。
写真の色調を補正させれば、色が増えるので、さらに多くの写真を入れることができそうです。
この方法は、対象とする絵画の色の種類に応じて、写真の補正が必要であるため、時間もかかりそうですし、どのように補正を行うか手法を考える必要もありなかなか手間がかかりそうです。
写真の色補正は、今のところやりすぎかなと思っていますが、写真が少ない、どうしても多くの写真を入れたい、といった場合にはこの方法もありかなと思います。

[その他の方法]
これまでに、写真の色範囲と、写真の色補正について考えましたが、絵画の原画側の色を調整する方法もあります。写真の近似色を多く使うように色調整する方法や、写真の近似色になるように減色する方法うなどで、より多くの写真を用いて表現することができます。

色割り当てについては、先人の努力のおかげで、これまでに様々な方法が考案されています。きっとよい方法がいくつもあると思います。

初期のバージョンでは、絵画側の色、写真には手をつけず、近似色の範囲を広げて割り当てる方法にとどめています。ご要望があれば、発展させていくことは可能ですが、区切りを付けるため、これにて完了とします。

今後は、α版のフィードバックをもとにユーザインタフェースの改善をはかっていきたいと思います。


Posted by 植物お手伝い係 at 19:28│Comments(0)
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。
削除
「写真で絵画」ソフトウェアでの色割り当て
    コメント(0)