1.问题描述:

基于小波域的隐马尔可夫树模型的图像去噪方法,隐马尔可夫模型(Hidden Markov Model,HMM)描述由隐藏的马尔可夫链随机生成观测序列的过程,属于生成模型。HMM是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列(状态序列),再由各个状态生成一个观测而产生的观测随机序列(观测序列)的过程。

2.部分程序:

M=size(ES,1);
P=size(w,1);
level=log2(P);
BE=zeros(M,P,P);
BEP=zeros(M,P,P);
BER=zeros(M,P,P);
 
AL=zeros(M,P,P);
P1=zeros(M,P,P);
P2=zeros(M,M,P,P);

%UP step
wtmp = repmat(w,[1 1 M]);
wtmp = shiftdim(wtmp,2);
si=2^(level-1)+1; ei=P; sj=2^(level-1)+1; ej=P;
gtmp = gauss(wtmp,MU,SI);
scale = repmat(mean(gtmp,1),[M 1 1]);
BE(:,si:ei,sj:ej) = gtmp(:,si:ei,sj:ej)./scale(:,si:ei,sj:ej);

%clear MUtmp SItmp;

for k=level:-1:2
 J=2^(k-1);J2=J*J; si = J+1; ei = 2*J; sj = J+1; ej = 2*J;

EStmp = reshape(ES(:,:,si:ei,sj:ej),M,M*J2);

if M == 2
  %%%%%% For M=2 the following is faster
  BEtmp = zeros(M,M*J2);
  BEtmp(:,1:M:(M*J2))=reshape(BE(:,si:ei,sj:ej),M,J2);
  BEtmp(:,2:M:(M*J2))=BEtmp(:,1:M:(M*J2)); 
 else
  % For general M (not equal to 2) use the following
  %
  BEtmp = zeros(M,M*4^(k-1));
  for m=1:M
   BEtmp(:,m:M:(M*4^(k-1)))=reshape(BE(:,si:ei,sj:ej,:),M,4^(k-1));
  end;
 end;

BEtmp = reshape(EStmp.*BEtmp,[M M J J]);
 BEP(:,si:ei,sj:ej) = squeeze(sum(BEtmp,1));
 
 sni = J/2+1; eni = si-1; snj = J/2+1; enj = sj-1;

%construct betachild matrix
 BCtmp = BEP(:,si:2:ei,sj:2:ej);
 BCtmp = BCtmp.*BEP(:,si+1:2:ei,sj:2:ej);
 BCtmp = BCtmp.*BEP(:,si:2:ei,sj+1:2:ej);
 BCtmp = BCtmp.*BEP(:,si+1:2:ei,sj+1:2:ej); 
 scaletmp = repmat(mean(BCtmp,1),[M 1 1]);
 scale(:,sni:eni,snj:enj) = scale(:,sni:eni,snj:enj).*scaletmp;
 BE(:,sni:eni,snj:enj)=gtmp(:,sni:eni,snj:enj)./scale(:,sni:eni,snj:enj).*BCtmp;

%construct BE(:,pai(i),paj(j),dindex) matrix
 Btmp=zeros(M,J,J);
 Btmp(:,1:2:J,1:2:J)=BE(:,sni:eni,snj:enj);
 Btmp(:,2:2:J,1:2:J)=BE(:,sni:eni,snj:enj);
 Btmp(:,1:2:J,2:2:J)=BE(:,sni:eni,snj:enj);
 Btmp(:,2:2:J,2:2:J)=BE(:,sni:eni,snj:enj);
 BER(:,si:ei,sj:ej)=Btmp./BEP(:,si:ei,sj:ej);
end;

clear EStmp BEtmp BCtmp Btmp;

%DOWN step
 %initialize
 AL(:,2,2) = PS(:,2,2);

for k=2:level
  J = 2^(k-1); J2=J*J;
  si=J+1; ei=2*J; sj=J+1; ej=2*J;
  sni = J/2+1; eni = si-1; snj = J/2+1; enj = sj-1;
  Atmp=zeros(M,J,J);
  Atmp(:,1:2:J,1:2:J)=AL(:,sni:eni,snj:enj);
  Atmp(:,2:2:J,1:2:J)=AL(:,sni:eni,snj:enj);
  Atmp(:,1:2:J,2:2:J)=AL(:,sni:eni,snj:enj);
  Atmp(:,2:2:J,2:2:J)=AL(:,sni:eni,snj:enj);

Atmp = repmat(reshape(Atmp.*BER(:,si:ei,sj:ej),1,M*J2),[M 1]);
  EStmp = reshape(ES(:,:,si:ei,sj:ej),M,M*J2);
  ALtmp = reshape(EStmp.*Atmp,[M M J J]);
  AL(:,si:ei,sj:ej) = squeeze(sum(ALtmp,2));
 end;

clear Atmp EStmp ALtmp;

%compute probabilities
for k=2:level
J=2^(k-1); J2=J*J;
 si=J+1; ei=2*J; sj=J+1; ej=2*J;
 sni = J/2+1; eni = si-1; snj = J/2+1; enj = sj-1;

temp = repmat(sum(AL(:,si:ei,sj:ej).*BE(:,si:ei,sj:ej), 1),[M 1]);
 P1(:,si:ei,sj:ej) = AL(:,si:ei,sj:ej).*BE(:,si:ei,sj:ej)./temp;
  
 %compute P2

if M == 2 
  % For M=2 the following may be faster
  BEtmp = zeros(M,M*J2);
  BEtmp(:,1:M:(M*J2))=reshape(BE(:,si:ei,sj:ej),M,J2);
  BEtmp(:,2:M:(M*J2))=BEtmp(:,1:M:(M*J2));
 else
  % For general M (not equal to 2) use the following
   BEtmp = zeros(M,M*J2);
  for m=1:M
   BEtmp(:,m:M:(M*J2))=reshape(BE(:,si:ei,sj:ej,:),M,J2);
  end;
 end;

BEtmp = reshape(BEtmp,[M M J J]);

EStmp = ES(:,:,si:ei,sj:ej);
 Atmp=zeros(M,J,J);
 Atmp(:,1:2:J,1:2:J)=AL(:,sni:eni,snj:enj);
 Atmp(:,2:2:J,1:2:J)=AL(:,sni:eni,snj:enj);
 Atmp(:,1:2:J,2:2:J)=AL(:,sni:eni,snj:enj);
 Atmp(:,2:2:J,2:2:J)=AL(:,sni:eni,snj:enj);
 Atmp = repmat(reshape(Atmp,1,M*J2),[M 1]);
 Atmp = reshape(Atmp,[M M J J]);
 BERtmp = repmat(reshape(BER(:,si:ei,sj:ej),1,M*J2),[M 1]);
 BERtmp = reshape(BERtmp,[M M J J]);
 temp = repmat(reshape(temp,1,M*J2),[M 1]);
 temp = reshape(temp, [M M J J]);
 P2(:,:,si:ei,sj:ej)=BEtmp.*EStmp.*Atmp.*BERtmp./temp;
end;
P1(:,2,2)=AL(:,2,2).*BE(:,2,2)./repmat(sum(AL(:,2,2).*BE(:,2,2),1),[M 1 1]);

clear temp BEtmp EStmp Atmp BERtmp;

%M step
PS(:,2,2)=P1(:,2,2);

for k=2:level
 J=2^(k-1); J2=J*J;
 si=J+1; ei=2*J; sj=J+1; ej=2*J;
 sni = J/2+1; eni = si-1; snj = J/2+1; enj = sj-1;

pstmp = sum(sum(P1(:,si:ei,sj:ej),3),2)/J2;
 pstmp = pstmp.*(pstmp>1e-4)+1e-4*(pstmp<=1e-4);
 PS(:,si:ei,sj:ej) = repmat(pstmp,[1 J J]);

if zm == 0
  % do not update MU if zero mean densities
  mutmp = sum(sum(wtmp(:,si:ei,sj:ej).*P1(:,si:ei,sj:ej),3),2)/J2;
  MU(:,si:ei,sj:ej) = repmat(mutmp,[1 J J])./PS(:,si:ei,sj:ej);
 end;

sitmp = sum(sum((wtmp(:,si:ei,sj:ej)-MU(:,si:ei,sj:ej)).^2.*P1(:,si:ei,sj:ej),3),2)/J2;

SI(:,si:ei,sj:ej) = repmat(sitmp,[1 J J])./PS(:,si:ei,sj:ej);

estmp =sum(sum(P2(:,:,si:ei,sj:ej),4),3)/J2;
 ptmp = [PS(:,sni,snj)'; PS(:,sni,snj)'];
 ES(:,:,si:ei,sj:ej)= repmat(estmp,[1 1 J J])./repmat(ptmp,[1 1 J J]);
end; %k

ESN=ES; PSN=PS; MUN=MU; SIN=SI;

3.仿真结论:

D-13

基于小波域的隐马尔可夫树模型的图像去噪方法相关推荐

  1. 隐马尔科夫(HMM)模型

    隐马尔科夫(Hidden Markov model)模型是一类基于概率统计的模型,是一种结构最简单的动态贝叶斯网,是一种重要的有向图模型.自上世纪80年代发展起来,在时序数据建模,例如:语音识别.文字 ...

  2. python做马尔科夫模型预测法_Python实现HMM(隐马尔可夫模型)

    1. 前言 隐马尔科夫HMM模型是一类重要的机器学习方法,其主要用于序列数据的分析,广泛应用于语音识别.文本翻译.序列预测.中文分词等多个领域.虽然近年来,由于RNN等深度学习方法的发展,HMM模型逐 ...

  3. 机器学习——隐马尔科夫(HHM)原理

    机器学习--隐马尔科夫(HHM)模型原理 1 从马尔科夫模型到隐马尔科夫模型 1.1 马尔科夫过程引入 首先,我们先给出一张图: 在上面的图里,给出的是一个链式的结构,结构中的每一个节点称之为一个状态 ...

  4. 【深度剖析HMM(附Python代码)】1.前言及隐马尔科夫链HMM的背景

    1. 前言 隐马尔科夫HMM模型是一类重要的机器学习方法,其主要用于序列数据的分析,广泛应用于语音识别.文本翻译.序列预测.中文分词等多个领域.虽然近年来,由于RNN等深度学习方法的发展,HMM模型逐 ...

  5. 基于隐马尔可夫模型的有监督词性标注

    转载自:http://blog.csdn.net/xum2008/article/details/38309605 词性标注(Part-of-Speech tagging 或 POS tagging) ...

  6. python地图匹配_基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法

    1. 摘要 本篇博客简单介绍下用隐马尔科夫模型(Hidden Markov Model, HMM)来解决地图匹配(Map-Matching)问题.转载请注明网址. 2. Map-Matching(MM ...

  7. 20200918:【广发金融工程】2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究

    参考链接:https://www.sohu.com/a/252454782_465470 [广发金融工程]2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究 2018-09-07 11:26 ...

  8. 基于C#的序列分类器:Part I:隐马尔科夫模型

    原文地址:http://www.codeproject.com/Articles/541428/Sequence-Classifiers-in-Csharp-Part-I-Hidden-Marko B ...

  9. python做空矩阵_【手把手教你】Python实现基于隐马尔科夫的多空策略

    前言 我们通常使用股市的一手数据来创建一个策略模型,预测下一时刻价格的多少.走势的判断或其他. 今天,我们想结合多样的市场条件(波动性,交易量,价格变化等等)和结合隐马尔科夫(HMM)来构建我们的交易 ...

  10. 验证基于逻辑回归的隐马尔可夫模型的心音信号切分算法(literature study)

    这篇文章展示的是基于逻辑回归的隐马尔可夫模型(Logistic regression based hidden semi-Markovmodel (HSMM))心音信号切分方法. 参考文章可以到文末查 ...

最新文章

  1. .net 2.0 BackgroundWorker类详细用法
  2. java条件语句_Java条件语句
  3. 用四种方法Python求出两个有序数组中的中位数
  4. 特性总览:核心特性、数据存储、Web技术、框架整合与测试
  5. WPF MVVM 弹框之等待框
  6. 利用lay-ui结合ajax实现分页功能(不借助框架,简单易懂)
  7. Python 离线 安装requests第三方库
  8. springboot 返回json字符串格式化问题
  9. stm32正交编码器 原理图_恶劣环境下应用的电感式增量编码器和绝对编码器
  10. 在ChemDraw中一键隐藏所有氢原子的方法
  11. vue中利用高德地图选取经纬度
  12. 跟进分析不一样的MTI商城
  13. 中国行政区域shp shx csv 等地图数据下载
  14. 手机网速正常电脑很慢_路由器WiFi速度正常,但电脑和手机上网速度慢怎么办?...
  15. 几个连接虚拟机和云服务器的软件
  16. 共模电感(扼流圈)选型
  17. ArcGIS中的坐标系
  18. 数据结构与算法之多路查找树(2-3树、2-3-4树、B树、B+树)
  19. dhtml_DHTML乌托邦:使用JavaScript和DOM的现代Web设计
  20. 奶爸日记15 - 轮船风景

热门文章

  1. 深度学习入门(九)——深度学习框架概览
  2. python3爬虫教程
  3. 直线插补 圆弧插补 步进电机二维直线插补圆弧插补控制算法 C语言 STM32移植
  4. python与排版设计_python 排版
  5. 好用的dns服务器工具有哪些?
  6. 擦窗机器人毕业设计_家庭清洁机器人毕业设计
  7. 计算机在模具设计中的应用课程设计,数字化技术在冲压模具设计与制造中的应用...
  8. 2021测试开发面试题大全及答案(包含测试基础|接口测试|自动化测试...)【289页】
  9. Android 配置https抓包
  10. 【软件】HP惠普打印机能打印不能用扫描软件解决办法