基于隐马尔科夫模型的图像质量评估模型

本文详细介绍了马尔科夫链和隐马尔科夫模型(HMM)的概念,包括状态转移矩阵、输出矩阵以及在HMM中的应用。通过MATLAB实例展示了如何生成随机序列、估计状态序列和矩阵,以及计算后验状态概率。此外,讨论了HMM在序列分析中的挑战和解决方法。
摘要由CSDN通过智能技术生成

先占座

第一章 马尔科夫模型概述

首先,这部分的较少网上大家转载了好多次了,我已经找不到具体的出处了。
我参考的是这个大牛的博客:https://www.cnblogs.com/zhizhan/p/4161516.html

1.1 马尔科夫链

如下图的马尔科夫模型状态转移

在这里插入图片描述
图中的方框代表你要建模过程的可能状态,箭头表示状态间的转移情况。箭头上的标签表示转移概率。在过程中的每一步,模型会产生一个输出(决定于所处的状态)然后转移到另一个状态。马尔科夫模型的一个重要特性是下一个状态只与当前的状态有关,与过去的转移无关。

例如,对于一个顺序抛掷硬币的过程,存在两个状态:正和反。最近一次的投掷决定了模型当前的状态,下一次投掷决定了如何转移到下一状态。如果硬币是公平的,则转移概率都是二分之一,输出就是当前的状态。在更复杂的模型中,每一个状态可以以一个随机过程产生输出,如可以通过投掷骰子来决定输出。

马尔科夫链是离散状态马尔科夫模型的数学描述。马尔科夫链如下定义:

A 一系列状态{1,2,…,M};

B 一个MXM的状态转移矩阵T,其中Tij表示从状态i到j的状态转移概率。矩阵每行的和为1,因为它表示从一个给定状态到其他各状态的所有转移概率的和。

C一系列可能的输出 s 1 , s 2 , … , s N {s_{1},s_{2},…,s_{N}} s1,s2,,sN,默认时可以当做{1,2,…,N},N为可能输出的个数,当然你可以选择不同的数据集或符号来表示;

D 一个MXN的输出矩阵E,其中 E i k E_{ik} Eik表示模型在状态 i i i时的输出 s k s_{k} sk的概率。

马尔科夫链的过程:从第0步的初始状态 i 0 i_{0} i0开始;然后以概率 T i 1 T_{i1} Ti1转移到状态i1,并以概率 E i 1 k 1 E_{i1k1} Ei1k1输出 s k 1 s_{k1} sk1;最后,以概率 T i 1 T_{i1} Ti1 E i 1 k 1 E_{i1k1} Ei1k1 T i 1 i 2 T_{i1i2} Ti1i2 E i 2 k 2 E_{i2k2} Ei2k2 T i r − 1 i r T_{ir-1ir} Tir1ir E i r k E_{irk} Eirk观察到状态 i 1 , i 2 … i r i1, i2…ir i1,i2ir,同时输出 s k 1 s_{k1} sk1, s k 2 s_{k2} sk2 s k r s_{kr} skr

1.2 隐马尔科夫模型(HMM)

隐马尔科夫模型是你只观察到输出,但不知道模型产生输出所经历的状态。隐马尔科夫模型分析就是从观察的数据恢复相关的状态序列。

     例如,考虑一个有2个状态6个可能输出的马尔科夫模型,模型中用到

一个红骰子,6个面,分别标号1~6;

一个绿骰子,12个面,5个面标号2~6,其他面标记1;

一个非均衡的红硬币,以0.9的概率掷出正,0.1的概率掷出反;

一个非均衡的绿硬币,以0.95的概率掷出正,0.05的概率掷出反。

模型以下面的规则产生一系列来自{1,2,3,4,5,6}的数字序列:

先掷红骰子,记下骰子的输出;

然后掷红硬币:
如果是正,则掷红骰子记下结果;

否则掷绿骰子记结果;

接下来的下一步,掷与上一步所用骰子同颜色的硬币,如果是正,则掷同颜色的骰子;否则掷另一个骰子。

模型的状态转移图如下:
在这里插入图片描述
这个模型中,通过掷与状态同颜色的骰子来决定输出,通过掷与状态同颜色的硬币来决定转移到哪一状态。

状态转移矩阵为
在这里插入图片描述

输出矩阵为
在这里插入图片描述
这个模型是非隐的,因为你从硬币、骰子的颜色可以知道状态序列。如果假设有人产生了一系列输出,但不给你展示硬币和骰子,所有你能看到的只是输出序列。如果你开始看到1出现的次数比其他都多,你可能会假设模型处于绿状态,但你不能确定,因为你不能看到所掷骰子的颜色。

隐马尔科夫模型提出了如下问题:

  1.     给定输出序列,求最可能的状态序列?
    
  2.     给定输出序列,你如何估计模型的转移概率和输出概率?
    
  3.     模型得出给定序列的先验概率?
    
  4.     模型在序列某一位置是特定状态的后验概率?
    

1.3 隐马尔科夫模型的matlab工具箱

与隐马尔科夫模型有关的统计工具箱函数如下

l . Hmmgenerate——从一个马尔科夫模型产生状态、输出序列;

lI. Hmmestimate——从输出序列和已知的状态序列计算转移、输出序列概率的极大似然估计;

lII . Hmmtrain——从输出序列计算转移、输出序列概率的极大似然估计;

lV. Hmmviterbi——计算隐马尔科夫模型的最大可能状态序列;

Vl . Hmmdecode——计算输出序列的状态后验概率。

下面来讲如何使用这些函数分析隐马尔科夫模型。

1.3.1 产生测试序列

下面的命令创建状态转移矩阵和输出矩阵

TRANS = [0.9 0.1; 0.05 0.95;];

EMIS = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6;…

7/12, 1/12, 1/12, 1/12, 1/12, 1/12];

要产生一组状态和输出的随机序列,使用函数hmmgenerate

[seq,states] = hmmgenerate(1000,TRANS,EMIS);

输出参数seq为输出序列,states为状态序列。

在matlab上的仿真结果如下:
上述两个矩阵都是1*N的向量,为了方便大家观察,我们这两个矩阵在matlab中reshape成方阵,这样就能方便观察两个矩阵的数据了。
代码如下:

clc
clear all
close all
TRANS = [.9 .1; .05 .95;];
EMIS = [1/6, 1/6, 1/6, 1/6, 1/6, 1/6;...
7/12, 1/12, 1/12, 1/12, 1/12, 1/12];
%要产生一组状态和输出的随机序列,使用函数hmmgenerate
[seq,states] = hmmgenerate(1000,TRANS,EMIS);
a=reshape(seq,20,50);
b=reshape(states,20,50);

运行矩阵的截图如下:
a就是这个仿真结果的最终输出序列,因为骰子的输出只有1-6这六个数,所以输出只有这几个数
在这里插入图片描述

b是我们的状态序列,因为只有红色和绿色两状态,分别用1和2表示,因此输出只是在这两个状态之间转换,因此只有1和2两个数字。
在这里插入图片描述

Hmmgenerate函数第0步开始于状态1,然后第一步转移到状态i1,而i1作为states的第一个元素。如果要改变初始状态,看后面的改变初始状态分布一节。

1.3.2 估计状态序列

给定状态转移矩阵TRANS和输出矩阵EMIS,函数hmmviterbi使用Viterbi算法计算产生给定输出序列seq的极大可能状态序列

likelystates = hmmviterbi(seq, TRANS, EMIS);

likelystates与seq长度相同。
为了测试hmmviterbi的精确度,计算实际状态序列states与估计状态序列likelystates吻合的百分比
sum(states==likelystates)/1000
ans =0.8200
在这个例子中,估计的状态和实际吻合达82%

这个我们还是要给出matlab的代码的,我想跟大家表达的是一个什么样的东西呢?
简单的说就是我们要知道每一步的转移概率,而不是平均的,这对我们来讲意义不大,或者说对我下面要讲的意义不大。

1.3.3 估计状态转移矩阵和输出矩阵

函数hmmestimate和hmtrain可以用来根据给定的输出序列估计状态转移矩阵和输出矩阵。
使用hmmestimate
此函数需要你知道产生输出序列的状态序列。基于输出序列和状态序列,如下估计转移矩阵和输出矩阵
[TRANS_EST, EMIS_EST] = hmmestimate(seq, states)

TRANS_EST =

0.8989 0.1011

0.0585 0.9415
EMIS_EST =

0.1721 0.1721 0.1749 0.1612 0.1803 0.1393

0.5836 0.0741 0.0804 0.0789 0.0726 0.1104

与原始的序列对比
TRANS =

0.9000 0.1000

0.0500 0.9500
EMIS =

0.1667 0.1667 0.1667 0.1667 0.1667 0.1667

0.5833 0.0833 0.0833 0.0833 0.0833 0.0833

1.3.4 使用hmmtrain
如果你不知道状态序列,但知道TRANS和EMIS矩阵的初始猜测(PS:这个矩阵,在我们以后的项目中,我们将编写一个引导模型生成多个近似的序列来作为初始猜测矩阵),可以使用hmmtrain函数估计。
假设已知TRANS和EMIS矩阵的初始猜测如下

TRANS_GUESS = [0.85 0.15; 0.1 0.9];
EMIS_GUESS = [0.17 0.16 0.17 0.16 0.17 0.17;0.6 0.08 0.08 0.08 0.08 0.08];
下面做矩阵估计
[TRANS_EST2, EMIS_EST2] = hmmtrain(seq, TRANS_GUESS, EMIS_GUESS)

TRANS_EST2 =
0.2286 0.7714

0.0032 0.9968

EMIS_EST2 =
0.1436 0.2348 0.1837 0.1963 0.2350 0.0066

0.4355 0.1089 0.1144 0.1082 0.1109 0.1220

Hmmtrain函数使用迭代算法调整TRANS_GUESS和EMIS_GUESS,使得基于调整的矩阵产生更加类似于观察序列seq的输出。当两次迭代中矩阵的变化不大时迭代结束。

如果如果算法在默认的最大迭代次数100次以内仍没结束,将返回迭代的最后结果并产生一个警告。这时可以通过增加最大迭代次数来增大迭代的次数

hmmtrain(seq,TRANS_GUESS,EMIS_GUESS,‘maxiterations’,maxiter)

maxiter是新设的最大迭代次数。

还可以改变默认的最小容忍值

hmmtrain(seq, TRANS_GUESS, EMIS_GUESS, ‘tolerance’, tol)

tol为新设的最小容忍值,增大它可以让算法更快的停止,但结果将不精确。

两个因素将降低hmmtrain函数估计结果的可靠性:

l 算法收敛到一个局部极大值,但此极大值并不是真正的状态转移矩阵与输出矩阵的位置。对此,可以使用多个不同的初始猜测值来估计,使用最好的结果;

l Seq序列太短,以至于不足以训练矩阵,对此,可以使用更长的seq序列。

1.3.5 估计后验状态概率

输出序列seq的后验状态概率是模型给出seq序列时所处状态的后验概率。可以使用hmmdecode函数计算后验状态概率:

PSTATES = hmmdecode(seq,TRANS,EMIS)

随着序列长度的增加,序列的概率会趋向于0,所以一个足够长的序列的概率将小于计算机的最小精度,为了避免此问题,hmmdecode还返回了概率的对数值。

1.3.6 改变初始状态分布

默认地,统计工具箱的隐马尔科夫模型函数是从状态1开始的。换句话说,初始状态的分布集中在状态1处,其他位置为0。如果想给初始状态赋予一个概率分布p=[p1,p2,…,pM],可以如下实现

创建一个M+1XM+1的辅助状态转移矩阵如下

其中的T是真正的状态转移矩阵,第一列包含M+1个0,向量p的和为1。

创建M+1XN的辅助输出矩阵如下

如果状态转移矩阵与输出矩阵式TRANS和EMIS,可以使用如下命令创建辅助矩阵

TRANS_HAT = [0 p; zeros(size(TRANS,1),1) TRANS];

EMIS_HAT = [zeros(1,size(EMIS,2)); EMIS];

第二章 基于…全局像素质量计算

待续…

第三章 基于马尔科夫模型的图像质量评估

待续…论文投稿中…

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
目 录 第一章 引言 1 1.1 图像质量评价的定义 1 1.2 研究对象 1 1.3 方法分类 2 1.4 研究意义 3 第二章 历史发展和研究现状 4 2.1 基于手工特征提取的图像质量评价 4 2.1.1 基于可视误差的“自底向上”模型 4 2.1.1.1 Daly模型 4 2.1.1.2 Watson’s DCT模型 5 2.1.1.3 存在的问题 5 2.1.2 基于HVS的“自顶向下”模型 5 2.1.2.1 结构相似性方法 6 2.1.2.2 信息论方法 8 2.1.2.3 存在的问题 9 2.2 基于深度学习的图像质量评价 10 2.2.1 CNN模型 10 2.2.2 多任务CNN模型 12 2.2.3 研究重点 15 第三章 图像质量评价数据集和性能指标 16 3.1 图像质量评价数据集简介 16 3.2 图像质量评价模型性能指标 17 第四章 总结与展望 19 4.1 归纳总结 19 4.2 未来展望 19 参考文献 21 第一章 引言 随着现代科技的发展,诸如智能手机,平板电脑和数码相机之类的消费电子产品快速普及,已经产生了大量的数字图像。作为一种更自然的交流方式,图像中的信息相较于文本更加丰富。信息化时代的到来使图像实现了无障碍传输,图像在现代社会工商业的应用越来越广泛和深入,是人们生活中最基本的信息传播手段,也是机器学习的重要信息源。 图像质量图像系统的核心价值,此外,它也是图像系统技术水平的最高层次。但是,对图像的有损压缩、采集和传输等过程会很容易导致图像质量下降的问题。例如:在拍摄图像过程中,机械系统的抖动、光学系统的聚焦模糊以及电子系统的热噪声等都会造成图像不够清晰;在图像存储和传输过程中,由于庞大的数据量和有限通讯带宽的矛盾,图像需要进行有损压缩编码,这也会导致振铃效应、模糊效应和块效应等图像退化现象的出现。所以,可以说图像降质在图像系统的各个层面都会很频繁地出现,对图像质量作出相应的客观评价是十分重要且有意义的。为了满足用户在各种应用中对图像质量的要求,也便于开发者们维持、控制和强化图像质量图像质量评价(Image Quality Assessment,IQA)是一种对图像所受到的质量退化进行辨识和量化的
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值