【问题标题】:Is there an algorithm to determine if an image is a fractal?是否有算法来确定图像是否为分形?
【发布时间】: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


【解决方案1】:

可能最快和最稳健的方法是计算图像的分形维数。考虑黑白图像。我们有原始的大图像,我们将从它计算所谓的 mipmap(一系列越来越小的图像)。在每一个中,我们将计算黑色像素的总数。如果我们在图像上只有一条线段(或一些曲线),当我们将分辨率加倍时,它的像素数大约会加倍,它对应于维度 1。

如果我们有一些实体(正方形、圆形、椭圆等),当我们将分辨率加倍时,它的像素数会增加四倍,所以它是维度 2。

分形具有分数维数,通常为 1 到 2,但也会出现小于 1 的值(Kantor 尘埃)。

比如说,我们在最小的图像 (2x2) 上有 1 个黑色像素,在 4x4 上有 3 个像素, 8x8 上 7 个像素,16x16 上 19 个像素,32x32 上 50 个像素。如果我们有一些曲线,我们预计 32x32 上的像素比 2x2 上多 16 倍 (32/2)。

如果我们有实体,我们预计 16^2 = 32x32 上的像素多 256 倍。但是我们有一些中间结果。我们有一个方程:

N = Norig * (Wcur / Worig) ^ FracDim,

在哪里 - N 是当前分辨率下的黑色像素数, - Norig 是原始分辨率下的黑色像素数, - Wcur 是当前图像宽度, - Worig 是原始图像宽度 - FracDim 是我们想要找到的分形维数。记录这两个部分:

Log(N) = Log(Norig) + FracDim * Log(Wcur / Worig)

我们有像对(Wcur; N)这样的“实验数据”。通过 rms 方法查找 FracDim(最合适),仅此而已。如果它与整数值相差太远,那么我们在图像上就会出现分形。

令人惊讶的是,这种方法被用来确定纸上的签名是真实的还是伪造的。如果它写得很快(通常情况下是合法的),墨水不会被纸吸收那么多,但是当有人试图伪造签名时,它的过程会更长,所以墨水会被吸收很多。大放大倍率下吸墨的图像是分形的。微调后,它就像一个魅力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 2010-10-14
    • 2013-12-02
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    相关资源
    最近更新 更多