【发布时间】:2016-06-13 04:38:46
【问题描述】:
我正在研究元胞自动机,其中一些显然会产生看起来像分形的图像,而另一些则不是。我并不完全清楚分形是什么,因为我认为可以拍摄任何照片并将其制作成动画,通过放大和绘制自我相似的东西来欺骗观众。
所以,我的问题是:
1) 我如何区分分形和非分形,例如,为什么规则 0 不会产生分形,比如说,我从一个像素开始并不断放大它的一个角,它看起来像一个一个正方形的一角,我可以无限期地做,那不是分形吗?
2) 确定 CA 生成的图片是否为分形的好算法是什么? (也许我需要查看不同比例的单元格颜色比例或类似的东西?)。
我对算法的看法: 我们可以将图片视为一个二维网格,每一行都是一个字符串。让我们创建一个后缀树并插入每一行的所有子字符串,然后查看是否有很多长度为 N 的足够长的字符串的重复。这是一个好方法吗?
谢谢。
【问题讨论】:
-
至于问题1。如果你只是放大单个像素,则不需要使用元胞自动机。此外,规则 0 无论如何都不会产生任何输出。分形必须始终是自相似的,这意味着它基本上由自身的较小副本组成(对于那个丑陋的描述,对不起,但在这里应该这样做)。黑色方块不包含自身的较小副本,它只是一个背面方块。
-
@Paul,谢谢。你觉得我的算法怎么样?是对还是错?
-
这将导致一个非常大的尝试。即使对于一个相对较小的网格,这项工作也会累积到相当大的规模。分形通常会用它们的模式填充几行(例如规则 126)。由于元胞自动机由于其生成形式而只能生成三角形形式的模式,因此最简单的解决方案是检测由 CA 生成的模式中的三角形
-
@Paul,是的,我同意,但正如我提到的,我们只会将足够长的序列插入到 trie 中,并且不会浪费任何长度小于 10 的序列的空间。另外,我的元胞自动机通常使用 500x500 网格,所以我认为它不会那么糟糕。我可以使用 patricia 尝试节省空间,如果行为是高度规则和经常性的,那里不应该有太多的字符串。
-
好吧,trie 并不是什么大问题(抱歉,忘了从我的评论中删除它)。主要问题确实是子字符串的数量。对于长度为 500 的字符串,即使消除长度为 10 的所有子字符串,仍然会留下许多太大的子字符串。处理时间太长了。您可以尝试这种方法,但我怀疑您能否从计算机中获得足够的速度以在可接受的时间内完成该工作。
标签: image algorithm image-processing geometry