セルオートマトン:ライフゲーム

セルオートマトンは、セル、セル状態、および状態更新ルールで構成されるオートマトンです。最も有名なセルオートマトンは、1970年に英国の数学者ジョンによって提案された生命のゲームです。そのルールは次のとおりです。

  • 周囲のセルが0または1の場合、その状態は無効になります。
  • 生き残った細胞が2つある場合は、そのままにしておきます。
  • 周囲に3つの生き残った細胞があるとき、その状態は生きています。
  • 生き残った細胞が4つあると、その状態は死んでしまいます。

簡単な例:

下の図に示すセルでは、各セルの色が異なる状態を示しています(黄色は生きており、他のセルは死んでいます)。
ここに画像の説明を挿入
反復後、次のようになります(これは標準化されたQRコードであり、トレースしてそれが何であるかを確認できます)。
ここに画像の説明を挿入

上記の手順は次のとおりです。

import cv2
img = cv2.imread("/home/toby/Pictures/gol.png",cv2.IMREAD_GRAYSCALE)
ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
rimg = cv2.resize(thresh1, (27,27))

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

nimg = np.array(rimg/255)

def round_sum(i,j):
    start_i = max(0, i-1)
    end_i = min(27, i+2)
    start_j = max(0, j-1)
    end_j = min(27, j+2)
    s = np.sum(nimg[start_i:end_i,start_j:end_j]) - nimg[i,j]
    return s

plt.imshow(nimg)
plt.show()
temp_nimg = np.zeros((27,27))
for i in range(27):
    for j in range(27):
        s = round_sum(i,j)
        if s >= 4:
            temp_nimg[i,j] = 0
        if s == 3:
            temp_nimg[i,j] = 1
        if s == 2:
            temp_nimg[i,j] = nimg[i,j]
        if s < 2:
            temp_nimg[i,j] = 0
plt.imshow(temp_nimg)
plt.show()

おすすめ

転載: blog.csdn.net/u013468614/article/details/104118486