pdfbtrainthmt.m
上传用户:l56789
上传日期:2022-02-25
资源大小:2422k
文件大小:3k
源码类别:

图形图像处理

开发平台:

Matlab

  1. % pdfbtrainthmt.m
  2. % written by: Duncan Po
  3. % Date: August 24, 2002
  4. % Using the EM algorithm, train a model for the provided data
  5. % Usage: model = pdfbtrainthmt(tree, levndir, mD, ns,zeromean)
  6. %        [model, stateprob] = pdfbtrainthmt(tree, levndir, mD, ns,zeromean)
  7. %        model = pdfbtrainthmt(tree, levndir, mD, initmodel)
  8. %        [model, stateprob] = pdfbtrainthmt(tree, levndir, mD, initmodel)
  9. % Inputs:   tree        - data in tree structure
  10. %           levndir     - the number of subbands in each level (e.g. [2 2 3 3])
  11. %           mD          - convergence value
  12. %           ns          - number of states in the desired model
  13. %           zeromean    - 'yes' for zero mean model and 'no' for non-zeromean model
  14. %           initmodel   - an initial model can be provided to speed up the training 
  15. % Output:   model       - the model generated
  16. %           stateprob   - state probabilities
  17. function [model, stateprob] = pdfbtrainthmt(tree, levndir, mD, ns,zeromean)
  18. if nargout == 2
  19.     needstateprob = 1;
  20. else
  21.     needstateprob = 0;
  22. end;
  23. nlevel = length(tree);
  24. if nargin == 4
  25.     initmodel.nstates = ns.nstates;
  26.     realns = initmodel.nstates;
  27.     initmodel.nlevels = ns.nlevels;
  28.     initmodel.zeromean = ns.zeromean;
  29.     initmodel.rootprob = zeros(1,realns);
  30.     for l = 1:realns
  31.         initmodel.rootprob(l) = ns.rootprob(l);
  32.     end;
  33.     for l = 1:nlevel-1
  34.         for k = 1:2.^(levndir(l+1)-levndir(1))
  35.             initmodel.transprob{l}{k} = zeros(realns);
  36.             for m = 1:realns
  37.                 for n = 1:realns
  38.                     initmodel.transprob{l}{k}(m,n) = ns.transprob{l}{k}(m,n);
  39.                 end;
  40.             end;
  41.         end;
  42.     end;
  43.     for l = 1:nlevel
  44.         for k = 1:2.^(levndir(l)-levndir(1))     
  45.             if strcmp(ns.zeromean, 'yes') == 0
  46.                 initmodel.mean{l}{k} = zeros(1,realns);
  47.                 for m = 1:realns
  48.                     initmodel.mean{l}{k}(m) = ns.mean{l}{k}(m);
  49.                 end;              
  50.             end;
  51.             initmodel.stdv{l}{k} = zeros(1, realns);
  52.             for m = 1:realns
  53.                 initmodel.stdv{l}{k}(m) = ns.stdv{l}{k}(m);
  54.             end;                 
  55.         end;
  56.     end;
  57. else
  58.     model.nstates = -2;
  59.     model.nlevels = -1;
  60.     model.zeromean = 0;
  61.     model.rootprob = zeros(1,ns);
  62.     for l = 1:nlevel-1
  63.         for k = 1:2.^(levndir(l+1)-levndir(1))
  64.             model.transprob{l}{k} = zeros(ns);
  65.         end;
  66.     end;
  67.     for l = 1:nlevel
  68.         for k = 1:2.^(levndir(l)-levndir(1))     
  69.             if strcmp(zeromean, 'yes') == 0
  70.                 model.mean{l}{k} = zeros(1,ns);
  71.             end;
  72.             model.stdv{l}{k} = zeros(1, ns);
  73.         end;
  74.     end;
  75. end;
  76. if ~exist('initmodel', 'var')
  77.     if needstateprob == 0
  78.         pdfbtrain_thmt(ns, nlevel, levndir, zeromean, tree, mD, model);
  79.     else
  80.         for l = 1:nlevel
  81.             numofel = length(tree{l});
  82.             stateprob{l} = zeros(numofel, ns);
  83.         end;
  84.         pdfbtrain_thmt(ns, nlevel, levndir, zeromean, tree, mD, model, stateprob);
  85.     end;
  86. else
  87.     model = initmodel;
  88.     if needstateprob == 0
  89.         pdfbprotrain_thmt(ns, nlevel, levndir, tree ,mD, model);
  90.     else
  91.         ns = initmodel.nstates;
  92.         for l = 1:nlevel
  93.             numofel = length(tree{l});
  94.             stateprob{l} = ones(numofel, ns);
  95.         end;
  96.         pdfbprotrain_thmt(ns, nlevel, levndir, tree, mD, model, stateprob);
  97.     end;
  98. end;
  99.