色全部使って絵を描くシリーズ。統計力学モデルにして色々遊び中。隣接ピクセル間の色の距離を全体で最小にする。距離の定義をいろいろいじると違う絵に。前は普通に二乗距離でやって滑らかな絵になった。画像処理分野では一乗距離(差の絶対値)を使って色々手品のようなことが出来るらしいのでそれも試してみたけどあまり変化なかった。
今回は二つの数を二進数で表した時に異なるビットの一番上のやつを距離としてみた。まずRGBそれぞれで一番上のビットで二つに分かれて固まる。合計8つのクラスタになる。そのクラスタ内部でさらにRGBそれぞれ次のビットで分かれてさらに8つのクラスタに分かれる。これが繰り返される。RGBそれぞれ独立とするとIsing Modelっぽいクラスタに。RGBそれぞれの距離の最大値をエネルギーと定義すると8状態Pottsモデルとなる。こいつは一次相転位するんでクラスタは自分の感覚で見ると美しくない。(c.f.http://www-reynal.ensea.fr/research.html#multicanonical) 上の図はその最大値と同じのがRGBで何個あるかを掛けたのをエネルギーとしたもの。基本的にIsingだけど例えば青の下位クラスタの境界が赤の上位クラスタの境界をまたがない。
しかし24bit、4096x4096はきついね。まだ出来ない。基本的に色全部使う条件を満たすために二箇所の色を交換することを繰り返すけど、空間で隣接するのを交換していたんではいつまでたっても緩和しない。
それを避けるには色の空間で隣接するものを交換するとかなり緩和が速くなる。しかし二つは空間的に離れた場所にある場合が多いので24bitともなると48Mbのメモリをランダムにアクセスすることになってキャッシュが全く効かず、メモリアクセスの時間が計算の10倍ほどかかってしまう。
まあ実はこのモデルには自明な最適解があるんだけどね。
0132 |
4576 |
という感じで8分割するのを繰り返す。クラスターアルゴリズムとかも使えるかも c.f. http://www.netlib.org/utk/lsi/pcwLSI/text/node292.html
追記:がんばって冷やし中
4096x4096も計算してます。L2距離版、途中経過。なんでこういうパターンになんだかよく分からない。
こっちはBit距離版拡大。典型的なIsingクラスタ
完成 http://allrgb.com/mosaic
もひとつ:http://allrgb.com/mona-lisa-overdrive