史蒂夫的图像处理与MATLAB

图像处理的概念,算法和MATLAB

二进制图像处理的查找表——康威的生命游戏

这是关于使用查找表处理二进制图像的第三篇文章。前两个帖子是:

对于二进制图像查找表,我最大的乐趣是玩康威的生命游戏,这是最著名的元胞自动机的例子。马丁·加德纳在《科学美国人》的数学游戏专栏中推广了生命游戏:

  • 数学游戏:John Conway的新纸牌游戏“life”的奇妙组合,科学美国人1970年10月
  • 数学游戏:论元胞自动机、自我繁殖、伊甸园与游戏“生命”科学美国人1971年2月

当然,有很多网站致力于这项运动。

在Conway的生命游戏中,矩形网格中的每个细胞在第n代时要么“活着”要么“死亡”,从一代到下一代,细胞根据以下规则“死亡”或“出生”(正如Gardner的第一篇文章所述):

1.残留。每个计数器[细胞]有两个或三个相邻的计数器存活到下一代。

2.人死亡。每个有4个或更多邻居的计数器都因人口过多而死亡(被移除)。每个有一个邻居或没有邻居的计数器都因隔离而死亡。

3.出生。每个恰好与三个相邻的空细胞相邻——不多也不少——是一个出生细胞。在下一步移动时,将在其上放置一个指示物。

加德纳谈到了“计数器”,因为当时,计算机模拟对《科学美国人》的大多数读者来说根本是不可用的。在他1970年的文章中,Gardner解释了如何玩游戏:“要玩人生,你必须有一个相当大的棋盘和充足的两种颜色的平计数器。(小的跳棋或扑克筹码也不错。)如果你能找到足够小的平板计数器,可以使用东方“围棋”板。(围棋是不可用的,因为它们不是平的。)用铅笔和方格纸也可以,但用计数器和黑板要容易得多,尤其是对初学者来说。”

好吧,回到现在,我们可以用电脑代替棋盘和扑克筹码。Conway的规则基于3 × 3邻域,因此可以使用查找表来实现。下面是一个将康威规则应用于邻域的函数:

类型康威
Function out = conway(nhood) live = nhood(2,2) == 1;P = sum(nhood(:)) - nhood(2,2);%的住邻居=(住& & ((2 < = P) & & (P < = 3 ))) || ...(~live && (P == 3));

使用康威makelut我们可以构造一个查找表:

Conway_lut = makelut(@conway, 3);

这是一个非常小的“眨眼”模式。这种模式每两代重复一次。

第一代:

Bw = 0 (5,5);Bw (3,2:4) = 1
Bw = 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0

第二代:

Bw = applylut(Bw, conway_lut)
Bw = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

第三代:

Bw = applylut(Bw, conway_lut)
Bw = 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0

根据维基百科的文章在康威的《生命游戏》中,发现的第一个无限制生长的模式是“高斯帕滑翔机枪”。“滑翔机”是一种由细胞组成的小结构,每隔一步就会周期性地自我重建。只要有足够的想象力,你就可以看到它在“滑翔”。这是滑翔机枪:

url =“https://blogs.mathworks.com/images/steve/2008/gosper_glider_gun.png”;Bw = imread(url);H = imshow(bw,“InitialMagnification”“健康”
H = 349.1982

这种模式会周期性地产生新的滑翔机,并将它们发射到太空中。

这段代码为Gosper滑翔机枪激活了生命游戏板。

K = 1:300 bw = applylut(bw, conway_lut);集(h,CData的bw);暂停(0.05);结束

我在本系列的最后一篇文章(我想!)将是关于我们在最近发布的图像处理工具箱中引入的查找表优化。赶快找吧。




用MATLAB®7.6发布

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。