簡単な画像処理でライフゲームの初期データを作る方法


Mathematicaにはセルオートマトンのための汎用関数が用意されているので、簡単にセルオートマトンの一種であるライフゲームで遊べます。

しかし、初期状態を用意するのが面倒なので、ウェブの画像から初期状態を作ってみましょう。やり方は、QRコードの数値化と同じです。画像処理なんかしなくても、LifeWikiを探せば有名なものはだいたい見つかるでしょうが、こういうことは、別の機会に役立つかもしれません(Wolfram CDF Playerがインストールされていれば実際に動かすことができます。RSS Readerでは何も見えないかもしれません)。(UMMでも動きます。)

(* 画像を読み込む *)
gun = Import[
   "http://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Game_of_\
life_glider_gun.svg/610px-Game_of_life_glider_gun.svg.png"];

(* 白黒にし、数値化する。 *)
data = ImageData@Binarize@gun /. {0 -> 1, 1 -> 0};

(* 同じ値がいくつ続くかを調べる *)
unit = Take[Union[Flatten[Length /@ Split@# & /@ data]], 2];

(* サンプリングし直す *)
init = data[[Min@unit + 1 ;; Length@data ;; Total@unit, 
    Min@unit + 1 ;; Length@data[[1]] ;; Total@unit]];

(* アニメーションにする *)
ListAnimate[ArrayPlot /@
  CellularAutomaton[{224, {2, {{2, 2, 2}, {2, 1, 2}, {2, 2, 2}}},
    {1, 1}}, {init, 0}, 150]]


この方法にも限度はあるので、人類が作り上げてきたものを堪能したいという人は、Gollyのような専用ソフトウェアがおすすめです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です