由于一个项目,我想比较一些图像产生的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..
以及产生的时间序列图:
所以,这就是我所有的想法我用ImageJ和LibreOffice Calc手工制作了所有这些表示和计算,我认为在决定使用哪种方法之后,我应该找到一种方法(用R/matlab或其他工具)来自动化这个过程。
任何关于选择哪种方法,如何自动化这些想法或任何更正的意见都是受欢迎的。
谢谢您。
最佳答案
实际上我用了第二个主意。
使用ImageJ
,add multi points
函数和标准画布大小,我计算了属于每个fork的每个点的坐标。
例如:
Fork X Y
1st 0.43 0.5
2nd 0.56 0.43
and so on...
我将这些值保存到一个excel文件中,并计算每个fork与第一个fork之间的欧几里德距离。
最后,我得到了每棵树的距离,并使用dtw r包将它们相互比较。