0


将时间序列转成图像——马尔可夫转移场方法 Matlab实现

【若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!】

其他:

  1. 时间序列转二维图像方法及其应用研究综述_vm-1215的博客-CSDN博客

2.将时间序列转成图像——格拉姆角场方法 Matlab实现_vm-1215的博客-CSDN博客

3.将时间序列转成图像——递归图方法 Matlab实现_vm-1215的博客-CSDN博客

4.将时间序列转成图像——图形差分场方法 Matlab实现_vm-1215的博客-CSDN博客

5.将时间序列转成图像——相对位置矩阵方法 Matlab实现_vm-1215的博客-CSDN博客

1 方法

马尔可夫转移场(Markov Transition Field, MTF)是基于马尔可夫转移矩阵的一种时间序列图像编码方法。该方法将时间序列的时间推移看成是一个马尔可夫过程,即:在已知目前状态的条件下,它未来的演变不依赖于它以往的演变,由此构造马尔可夫转移矩阵,进而拓展为马尔可夫转移场,实现图像编码。

对于时间序列X=(x_t,t=1,2,...,T)​,其图像编码步骤如下:

  1. 将时间序列X(t)​分成Q​个分位箱(标记为1,2,...,Q​,每个分位箱内的数据量相同);
  2. 将时间序列中每一个数据更改为其对应的分位箱的序号;
  3. 构造转移矩阵W​(\omega_{i j}​表示分位箱i转移到分位箱j的频率): W=\left[\begin{array}{ccc} \omega_{11} & \ldots & \omega_{1 Q} \\ \omega_{21} & \cdots & \omega_{2 Q} \\ \vdots & \ddots & \vdots \\ \omega_{Q 1} & \cdots & \omega_{Q Q} \end{array}\right] \quad \text { s.t. } \quad \sum_{j} \omega_{i j}=1
  4. 构造马尔可夫转移场M​: M=\left[\begin{array}{ccc} \omega_{i j} \mid x_{1} \in q_{i}, x_{1} \epsilon q_{j} & \ldots & \omega_{i j} \mid x_{1} \in q_{i}, x_{N} \in q_{j} \\ \omega_{i j} \mid x_{2} \in q_{i}, x_{1} \epsilon q_{j} & \cdots & \omega_{i j} \mid x_{2} \in q_{i}, x_{N} \in q_{j} \\ \vdots & \ddots & \vdots \\ \omega_{i j} \mid x_{N} \epsilon q_{i}, x_{1} \epsilon q_{j} & \cdots & \omega_{i j} \mid x_{N} \in q_{i}, x_{N} \in q_{j} \end{array}\right]

2 Matlab代码实现

  1. clc
  2. clear
  3. close all
  4. %% 生成数据
  5. % speed = xlsread('3_1_link6_28_5_30min.csv');
  6. speed = xlsread('3_1_link1_1_5_30min.csv');
  7. X = speed;
  8. m = length(X);
  9. %数据初始化[0,1]
  10. X = (X - min(X))/(max(X) - min(X));
  11. %% 构造转移矩阵W
  12. N = length(X);
  13. % 分出Q个分位箱(按照个数),从小往大:1234
  14. Q = 4;
  15. % X_Q把每个元素标记为分为箱1234
  16. X_Q = ones(1,N);
  17. j = 0;
  18. % 初始化k
  19. k = ones(1,Q+1);
  20. for i = 2 : Q+1
  21. % 循环计算小于j的数据个数,达到阈值时跳出循环
  22. while( sum(X < j) < N * (i-1) / Q)
  23. j = j + 0.0001;
  24. end
  25. % 记录每一个分位箱的阈值
  26. k(i) = j;
  27. % 将原先的数据向量变成对应的分位箱次序向量
  28. X_Q(find(X < k(i) & X > k(i-1))) = i-1;
  29. end
  30. %% 计算马尔可夫矩阵
  31. sum_14 = 0;
  32. sum_13 = 0;
  33. sum_24 = 0;
  34. sum_12 = 0;
  35. sum_23 = 0;
  36. sum_34 = 0;
  37. sum_11 = 0;
  38. sum_22 = 0;
  39. sum_33 = 0;
  40. sum_44 = 0;
  41. sum_21 = 0;
  42. sum_32 = 0;
  43. sum_43 = 0;
  44. sum_31 = 0;
  45. sum_42 = 0;
  46. sum_41 = 0;
  47. for i = 1:N-1
  48. switch(X_Q(i) - X_Q(i+1))
  49. case -3
  50. sum_14 = sum_14 + 1;
  51. case -2
  52. switch(X_Q(i))
  53. case 1
  54. sum_13 = sum_13 + 1;
  55. case 2
  56. sum_24 = sum_24 +1;
  57. end
  58. case -1
  59. switch(X_Q(i))
  60. case 1
  61. sum_12 = sum_12 + 1;
  62. case 2
  63. sum_23 = sum_23 + 1;
  64. case 3
  65. sum_34 = sum_34 + 1;
  66. end
  67. case 0
  68. switch(X_Q(i))
  69. case 1
  70. sum_11 = sum_11 + 1;
  71. case 2
  72. sum_22 = sum_22 + 1;
  73. case 3
  74. sum_33 = sum_33 + 1;
  75. case 4
  76. sum_44 = sum_44 + 1;
  77. end
  78. case 1
  79. switch(X_Q(i))
  80. case 2
  81. sum_21 = sum_21 + 1;
  82. case 3
  83. sum_32 = sum_32 + 1;
  84. case 4
  85. sum_43 = sum_43 + 1;
  86. end
  87. case 2
  88. switch(X_Q(i))
  89. case 3
  90. sum_31 = sum_31 + 1;
  91. case 4
  92. sum_42 = sum_42 + 1;
  93. end
  94. case 3
  95. sum_41 = sum_41 + 1;
  96. end
  97. end
  98. W = [sum_11 sum_12 sum_13 sum_14;
  99. sum_21 sum_22 sum_23 sum_24;
  100. sum_31 sum_32 sum_33 sum_34;
  101. sum_41 sum_42 sum_43 sum_44];
  102. W = W./repmat(sum(W),[4,1])
  103. M = zeros(N,N);
  104. for i = 1: N
  105. for j = 1:N
  106. M(i,j) = W(X_Q(i),X_Q(j));
  107. end
  108. end
  109. figure(1)
  110. plot(X)
  111. hold on
  112. for i = 2 : Q
  113. plot(1:N,ones(1,N)*k(i),'linewidth',1.5);
  114. hold on;
  115. end
  116. im = figure(2);
  117. imagesc(M)
  118. saveas(im,'MTF_1.bmp');
  119. saveas(figure(1),'MTF_01.bmp');

3 结果

【若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!】


本文转载自: https://blog.csdn.net/weixin_41406486/article/details/127815523
版权归原作者 vm-1215 所有, 如有侵权,请联系我们删除。

“将时间序列转成图像——马尔可夫转移场方法 Matlab实现”的评论:

还没有评论