OPENCV之EM算法篇

来源:互联网 发布:网络司法拍卖 变卖 编辑:程序博客网 时间:2024/05/22 10:45

 

OPENCVEM算法篇

EM算法是求解最大似然函数极值的一种解法,使用的是迭代求解的方法,并且保证收敛。EM算法的应用相当广泛,包括混合高斯模型的求解,隐马尔科夫模型的求解,最大后验概率模型的求解等。最常用的是混合高斯模型的求解,把混合概率密度分解为一系列的高斯分量之和。关于EM算法的具体流程可参考网上,个人推荐一个介绍的不错的,《pattern recognition and machine learning》有一章专门介绍这个,通俗易懂,介绍了KMEANSEM算法的关系,还介绍了一搬(generalEM算法的流程。在我博客里还会有另一篇文章专门介绍KmeansEM算法和MEANSHIFT算法的关系。

Opencv里的CVEM函数是用于专门求解混合高斯模型的,输入和输出都与CVkmeans2函数的输入输出兼容,都是输入矩阵一行代表一个样本。可以选择两种模式,一种是普通的方差矩阵,一种是对角的方差矩阵。对角的方差矩阵计算相对简单,可以减少计算量,而且很多情况下效果和普通的方差矩阵差不多。由于EM算法的计算复杂度要高于Kmeans,所以在实际使用时一般先用Kmeans选定类别中心,再用EM算法调整,可以提高计算速度。在CVEM类里有KMEANS的成员函数,实现预处理功能。Opencv里的EM算法有个和Kmeans一样的缺点就是类别数无法确定,并且数据如果不服从高斯分布,用于图片分割的效果不好,耗时也很长。所以EM算法还是比较适合于大数据量的样本聚类或学习。

下面是一个图片分割的例子:

输入图像:

输出图像:

 

PS在右图中发现,每个形状的周围都存在一些黑色的类别,这是由于左图中每个形状的边缘部分是模糊的即(颜色值递减的),所以出现错分割或者说过分割。