关于如何实现从分形图像中提取时间序列数据的算法的三个想法

Three ideas on how to implement an algorithm for time-series extraction data from a fractal image

由于一个项目,我想比较一些由L系统分形生成器生成的图像。我决定使用的方法是 DTW(动态时间扭曲)。正如你们中的一些人可能知道的那样,DTW 工作需要两个时间序列进行比较。

在网上和科研论文上搜索后,我找不到任何算法实现可以为像我这样的图像生成时间序列。

只是想尝尝我想比较的图像,见下文:

每一列都是具有三个迭代的植物的特定基因型,如您所知,我想将这些图像相互比较。

所以第一步是以某种方式从每个图像中提取时间序列数据,然后在 DTW 算法中使用它。

我想了三种不同的方法来实现这样的算法,这里是我想听听你的意见。

想法#1

第一个思路,如你所见,是计算同一代分支的距离(代数从底部开始计算)。例如,来自该图像的数据将是:

1st gen : 1.51cm
2nd gen : 0.95cm , 1.03cm
3rd gen : 0.54cm , 0.66cm , 0.69cm , 0.73cm

然后,计算每一代的平均值

1st gen : 1.51cm
2nd gen : 0.99cm
3rd gen : 0.655cm

最后时间序列图是这样的:

这个想法似乎(在我看来)有一个缺点,因为这些分形只有 6 代,这意味着最终只有 6 个数字可以描述时间序列图。

想法 #2

第二个想法是测量从图像的每个叉子到第一个叉子的距离(每一代顺时针方向)。

下面是顺时针每代运算的解释:

这样一来,我对每棵看起来像这样的树进行了很多测量:

1st : 1.67cm
2nd : 1.71cm
3rd : 2.60cm
4th : 2.71cm
5th : 2.86cm
6th : 2.94cm
7th : 3.07cm
and so on...

而时间序列图是:

想法 #3

在这种情况下,测量值是从图像中心到轮廓任何点的距离(我认为随着使用更多的轮廓点,时间序列图中的结果会更好)

该案例的测量结果:

1st : 2.62cm
2nd : 2.27cm
3rd : 1.98cm
4th : 1.43cm
5th : 1.39cm
6th : 2.07cm
7th : 2.73cm
and so on..

以及已经生成的时间序列图:

所以,这就是我的全部 thoughts/ideas。所有这些表示和计算都是我手工制作的,并使用 ImageJ 和 LibreOffice Calc。我认为在决定使用哪种方法后,我应该找到一种方法来自动化该过程(使用 R/matlab 或其他方法)。

欢迎就选择哪种方法、如何使这些想法自动化或任何更正提出任何意见。

谢谢。

其实我用的是第二个idea

使用ImageJadd multi points函数和标准canvas大小,我计算了属于每个叉子的每个点的坐标。

例如:

Fork    X     Y
1st    0.43  0.5
2nd    0.56  0.43
and so on...

我将这些值保存到一个 excel 文件中,并计算每个叉子与第一个叉子的欧氏距离。

最后,我得到了每棵树的距离,并使用 DTW R 包将它们相互比较。