将时间序列转成图像——图形差分场方法 Matlab实现

目录

1 方法

2 Matlab代码实现

3 结果


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

其他:

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 方法

时间序列图形表达了时间序列的时间结构信息,基于时间序列图形的序列熵则可以用于时间序列的复杂性测量、动态系统表征等。因此,作者提出了基于不同图形长度的图形差分场,实现时间序列到图像的转换。

图形差分场(Motif Difference Field, MDF)的基本思想是:给定一个时间序列X=(x_t,t=1,2,...,N),设定需要得到的图像数量n(1<n<N),再设定不同步长d(1\leq d\leq d_{\max},d_{\max}=[(N-1)/(n-1)]),不同长度s(s=1,2,3,...,N-(n-1)d)的时间窗口,以此多次提取时间序列原始图形的某一段,然后经过组合变换获得n个图像。具体的流程如下:

  1. 根据时间序列X,得到图形集:
        

    M_{d}^{n}=\left\{M_{d, s}^{n}, s=1,2,3, \ldots, T-(n-1) d\right\}

    其中M_{d, s}^{n}=\left(x_{t}, t=s, s+d, s+2 d, \ldots, s+(n-1) d\right)s相当于一个时间窗口,d相当于步长(时移),t相当于移动窗口(有n个时刻点),t相当于移动窗口(有n个时刻点),共有n\times d_{\max}个图形;
  2. 得到图形差分集:

    d M_{d}^{n}=\left\{d M_{d, s}^{n}, s=1,2,3, \ldots, T-(n-1) d\right\}

    其中d M_{d, s}^{n}=\left(x_{s+d}-x_{s}, x_{s+2 d}-x_{s+d}, \ldots, x_{s+(n-1) d}-x_{s+(n-2) d}\right),共有(n-1) \times d_{\max }个图形;
  3. 定义新序列I_{d,s}^n,通过补零操作使得序列长度一致:

    I_{d, s}^{n}=\left\{\begin{array}{cc} d M_{d, s}^{n}, & 1 \leq s \leq N-(n-1) d \\ 0, & N-(n-1) d<s \leq N-(n-1) \end{array}\right.

  4. 定义图形差分场:

    MDF^{n}=\left\{I_{1}^{n}, I_{2}^{n}, \ldots, I_{d_{m a x}}^{n}\right\}

    I_d^n代表步长d对应的(n-1)个序列集,这样图形差分场可以生成对应的n-1个通道图像。

  5. 针对第i个通道,定义图像数组为:

    G_{i}^{n}=\left[\vec{I}_{1}^{n}(i), \vec{I}_{2}^{n}(i), \ldots, \vec{I}_{d}^{n}(i), \ldots \vec{I}_{d_{m a x}}^{n}(i)\right]^{N}

    其中\vec{I}_{d}^{n}(i)=\left[\vec{I}_{d, 1}^{n}(i), \vec{I}_{d, 2}^{n}(i), \ldots, \vec{I}_{d, T-n+1}^{n}(i)\right]^{N}, 1 \leq i \leq n-1
  6. 针对第i个通道,定义图像数组为:

    G_{i}^{n}=\left[\vec{I}_{1}^{n}(i), \vec{I}_{2}^{n}(i), \ldots, \vec{I}_{d}^{n}(i), \ldots \vec{I}_{d_{m a x}}^{n}(i)\right]^{N}

    其中\vec{I}_{d}^{n}(i)=\left[\vec{I}_{d, 1}^{n}(i), \vec{I}_{d, 2}^{n}(i), \ldots, \vec{I}_{d, T-n+1}^{n}(i)\right]^{N}, 1 \leq i \leq n-1
  7. 填补G_i^n中的零元素,定义MDF图像的每一个通道:

    IMG_{i}^{n}=G_{i}^{n}+K^{n} \odot G_{i}^{\prime n}

    其中K_{d, s}^{n}=\left\{\begin{array}{lr}0, & 1 \leq s \leq N-(n-1) d \\ 1, & N-(n-1) d<s \leq N-(n-1)\end{array}\right.G_{i}^{\prime n}是由G_{i}^{n}旋转而来,\odot为哈达玛积[15]。

 最终实现时间序列到图像的转换。

2 Matlab代码实现

function MDF(n)



%% 生成数据
speed = xlsread('3_1_link6_28_5_30min.csv');
% speed = xlsread('3_1_link1_1_5_30min.csv');

X = speed;
X = (X - min(X)) / (max(X) - min(X));
m = length(X);

%% 生成图
%%%%%%%%%%% MDF %%%%%%%%%%%%%%
% 参数
% n = 4;    % 图数量

% 根据设置的图数量,循环生成
% 根据图数量,生成窗口步长序列 1: dMax
dMax = floor((m-1)/(n-1));
% 循环生成图集和差分图集
for d = 1 : dMax
    s = 1:m - (n-1)*d;
    for j = 1:n
        M(:,d,j) = zeros(m-n+1,1);
        
        M(1:length(s),d,j) = X(s+(j-1)*d);
        
        if j > 1
            % 生成差分图集
            dM(:,d,j-1) = M(:,d,j) - M(:,d,j-1);

            K(:,d,j-1) = ones(m-n+1,1);
            K(1:length(s),d,j-1) = 0;
        end
    end
end
% 生成图形差分场
MDF = dM;
G = MDF;
IMG = G + K.*rot90(rot90(G));

%% 显示图(热力图)
for i = 1:n-1
    im(i) = figure(i);
    imagesc(IMG(:,:,i))
    title(['第',num2str(i),'幅图']);
%     saveas(im(i),['MDF_1(n=',num2str(n),')第',num2str(i),'张图.bmp']);
end
figure(n)
plot(speed)
title('time data')
xlabel('t')
ylabel('speed')

3 结果

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

你可能感兴趣的:(算法,计算机视觉,人工智能,时间序列,图形差分场)