数字图像处理成长之路15:前景提取(最大似然估计EM算法与高斯混合模型)

本文主要是介绍数字图像处理成长之路15:前景提取(最大似然估计EM算法与高斯混合模型),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先实践一下何为前景提取:
原始图像

这里写图片描述

这里写图片描述

如果画面中有移动的物体,会以白色表现出来。

这里写图片描述

我理解的前景提取就是把画面中移动的物体提取出来。

这里写图片描述

这是opencv中给的示意图,来简单看看opencv代码:

- 代码

// Global variables
Mat frame; //current frame
Mat fgMaskMOG2; //fg mask fg mask generated by MOG2 method
Ptr<BackgroundSubtractor> pMOG2; //MOG2 Background subtractormyOpencv::myOpencv()
{//create Background Subtractor objectspMOG2 = createBackgroundSubtractorMOG2(); //MOG2 approach
}cv::Mat myOpencv::BS(cv::Mat srcMat)
{pMOG2->apply(srcMat, fgMaskMOG2);return fgMaskMOG2;//返回值为二值图,白色代表前景
}

代码不多,下面来看看该算法的理论基础:
再来看看这幅图:

这里写图片描述

- 算法的猜测

如果最开始我们有一张静止的背景,并且背景始终保持不变,此时前景提取最为简单,即用带有前景的画面与背景做差即可。

现在让问题变得复杂些,实际上背景很少情况是保持不变的,比如上图左下角出现了第二艘船并停泊在那,这就导致勒背景的变化。而从这句话中我们似乎也能分析出,所谓背景就是在时间轴上很少变化的部分,是相对静止。所谓前景就是在时间轴上变化较频繁的部分。所以前景提取的算法应该和时间有关。

- 高斯分布

具体是怎样的关系,目前不得而知,回过头来看看opencv代码寻找线索。可以发现用了一个叫MOG的算法,查了一下,是混合高斯模型,网上也称之为GMM,混合高斯模型的出现又是为了解决什么样的问题呢?

先来回忆一下高斯分布,或者叫做正态分布。以一维为例,函数图像有中间高两边低,某点函数值的大小代表了该点出现的概率。高斯分布能很好的描述自然现象和社会现象的某些问题,比如一个地区男性成年人的身高,测量某零件长度的误差等。

但是某些问题是单一高斯分布或其他分布描述不了的,比如一张图片的归一化灰度直方图(横坐标代表像素强度,纵坐标代表同一强度的像素出现的频率),如果也简单画出它的曲线,可以想像会出现多个波峰。如果想借助数学工具对该图像进行拟合,显然超出了单一高斯分布的应用范围。

- 混合高斯模型

混合模型的出现正是为了解决类似上面的问题,所谓混合模型是把多个分布叠加在一起,从而可以更灵活的拟合数据。如果混合的分布是高斯分布,就称作高斯混合模型。

很容易想象把两个不同参数的高斯分布叠加在一起,就可以拟合拥有两个波峰的曲线。

混合模型中存在着一种思想,即用已知近似代替未知,用现有的构造没有的。这也是数学中常用到的思想,如以直代曲,如傅立叶变换。

在回到MOG算法,一般来说3-5个高斯分布叠加在一起就能达到很好的拟合效果。具体是几个不是重点,重点是,这些高斯分布的参数是不同的,如何确定它们的参数?

这就又涉及到参数估计的问题。

- 参数估计

本来只是想学习前景提取,可越学习遇到的问题越多,那就继续顺藤摸瓜,跟着这条主线下去,一探机器视觉的世界。

搜索高斯混合模型,出现概率比较高的是两个参数估计方法,即最大似然估计和EM。

- 最大似然估计(MLE,Maximum Likelihood Estimation)

这几个字看起来是那么的生硬难懂,让我们看看生活中的例子。

让我们看一个人的健康情况。口渴,多饮食,多尿,日渐消瘦,等症状往往预示着某种疾病。假如一个人只得口渴症状的概率是pa,多饮食的概率是pb,多尿的概率是pc,日渐消瘦的概率是pd。那么这些症状同时集中在一个人身上的概率是:paxpbxpcxpd,这个概率是联合概率。一个人神上的这些症状(数据)是可以观测的,然而引起这些症状的原因(参数)是不确定的。现在想来估计原因(参数),这个将要被估计的(原因)参数会使我们刚才观测的数据成立的可能性最大。一般来说得了糖尿病最有可能同时出现上述症状,于是我们判断这个人得了糖尿病(确定参数)。

这个例子并不是非常贴切,但是比较形象,有助于理解概念。

实际上,联合概率是值得关注的,这是最大似然估计常常出现的情况,由于是多项相乘,因此容易出现指数的形式,这也是为什么该算法会用到对数求导法,使指数形式变成对数相加,然后在求导进行下一步运算。

- EM算法

据说EM算法是机器学习十大算法之一,虽然我目前还未涉足机器学习,但也隐约感受到了EM算法的重要性,有必要把该算法弄懂。

要弄懂EM算法也并非易事,当我在网上搜索EM算法时,得到的结果大多是数学公式的罗列,真正的例子很少。

http://www.jianshu.com/p/1121509ac1dc 这个例子总算通俗易懂,然而要想真正的理解,需要我们自己动手推演一遍。

我们要进行抛硬币实验来计算硬币正面朝上的概率。也许你会说随着实验次数的增多,正面朝上的概率应该是0.5,在一般的情况下是这样的。

但是这个硬币和普通的不太一样,由于制造时出了差错或者硬币某一面粘了一小块异物,使得它的密度不是均匀分布的,中心也不是在硬币的几何中心的。因此抛在空中后也会出现不同以往的翻转效果,这可能导致其正面朝上的概率严重偏离0.5。

下面我们找来两个这样的硬币A,B来进行实验。A,B是两个同的硬币,分别对每个硬币做4组实验,每组抛5次。结果如下:

这里写图片描述

可以算出,A经过2组共10次实验之后计算正面朝上的概率是0.6,B是0.3。

下面做一下改变,假如刚开始抛硬币时只顾着记正反,错乱了抛硬币的顺序和抛的是哪个硬币,只知道每一组抛的是同一枚硬币,如何计算两个硬币正面朝上的概率?

这里写图片描述

这组图和上组图的区别仅在于并不知道一到四组硬币的顺序,这对我们来说的隐藏的条件,或者说有人故意把这个顺序藏起来不让你知道,来看看你到底有多聪明来找出这个顺序。

我们用向量Z来代表这一条件,Z=(Z1,Z2,Z3,Z4),现在只要求出Z中Z币的顺序就能求出两个硬币各自的朝上概率。

而情况是,只有我们知道了两个硬币朝上的概率,才能估计出这四组实验的顺序。

陷入了循环怪圈怎么办?我们可以先设定两个硬币的概率,然后用这个概率去估计Z的顺序,有了Z的顺序就回到了我们最开始那一过程,就可以重新计算出两个硬币的概率。然后比较一下我们设定的概率和新计算出的概率相差多少,如果相差不多说明我们已经找到了最有可能的情况,如果相差很大则需要继续估计。

下面假设A的概率是0.7,B的概率是0.6。如果第一组抛的硬币是A,则A抛出3正2反的概率是,0.7x0.7x0.7x(1-0.7)x(1-0.7)=0.03087。如果第一组是B,则B抛出3正2反的概率是0.6x0.6x0.6x(1-0.6)x(1-0.6)=0.03456。

此时如果用之前提到的最大似然估计法的话,第一组选择硬币B会最有可能出现3正2反的结果。

这里写图片描述

在每一组中,抛的硬币不是A就是B,是必然事件,概率是1,因此第一组抛的是A的概率是0.03087/(0.03087+0.03456)=0.47,是B的概率是1-0.47=0.53。依次列出其他组:

这里写图片描述

现在我们有些接近问题的解决了,即找到了隐变量Z相关的一些概率。

下面把A组的概率归一化:
这里写图片描述

于是这个问题可以换成这样的描述,从两个硬币中随机拿出一个,进行4组抛硬币实验,已知四组中选中硬币A的概率分别是如上图所示,抛硬币正反面结果如下图所示:

这里写图片描述

分别求硬币A正面朝上和反面朝上的期望。这是一个不难的期望计算问题,经过计算硬币A正面朝上的期望约是2.39,反面朝上的期望是2.61。下一步该计算什么了?从这两个期望就能够计算出硬币A正面朝上的概率是2.39/(2.39+2.61) 约等于0.49。同理可求B的概率。

上面就是EM算法的“E”了。

在得到A和B的新概率后,又可以回到上面重新计算,直到收敛了。

这就是EM算法的“M”了。

下图是网上一个外国人写的也可以做为参考。

这里写图片描述
这里写图片描述

至此,前景提取所需的理论基础大致介绍完毕,但说实话,仅仅介绍完这些仍无法使我理解高斯混合模型和前景提取究竟有什么关系,上述往往是从数学角度的理解,下面我要分析一下高斯模型和前景或者背景的关系。

- 背景的数学建模

为了简单起见,我们从单一高斯模型开始分析,看看它和背景的联系。

如果我们初次研究背景,就需要先研究背景的特征,正如最开始我的猜想,画面的某一点的像素值随时间不做变化或变化很小的应该认为是背景,或者虽然在短时间有巨大变化,但在大部分时间不变或者很少变化的是背景。

现在有这样一个视频片段,tree.avi,来自opencv数据文件夹。视频中有一棵树,基本是静止的,只是在风的作用下,来回小幅摆动。

这里写图片描述

在接近视频的结束时,一只手从视频右上角出现,滑动到中间又左上角划出。

这里写图片描述

视频的描述大致是如此。

选择一个固定点(x=5,y=5),其随时间的图像如下:

这里写图片描述

可以看到前50个点基本没有变化,在第15个点附近有小幅变化,应该是背景光线变化(树的摆动导致局部光线变化)所致,因为我确定这个点从始至终没有被手覆盖过,而第59点之后变化剧烈,因为大约在这个阶段,有一只手划过图像影响了整体光线。

前50个点是一个比较理想的背景实例。

再看下面这张图:

这里写图片描述

这张图是x=50,y=50点。可以看出该点在50点之前有小幅(幅度为5左右)变动,原因是这个点接近树叶,而树叶随风摆动。这个点也可以看作是一直处在背景上的点。

好了,下面我们分析最简单的那个点(5,5):

这里写图片描述

这个点随时间取得不同值可以看作是符合一维高斯模型,只是参数未知,该如何由已知的观测数据求出未知的参数?用最大似然估计法。

到此我们该把数学公式拿出来了。

假设该坐标点不同时间的像素值X1,X2…Xn,符合正太分布,则其似然函数为:

这里写图片描述

其对数似然函数为:

这里写图片描述

求偏导数组成似然方程:

这里写图片描述

解为:

这里写图片描述

至此就可以估计出点(5,5)随时间变化产生的数据所服从的高斯分布,其他点的同理。只不过在用程序实现时还需要考虑一些细节,这就因人而异了,懂了上述原理,理解其这些算法的程序实现上也容易很多。

上述为单一高斯分布,换成混合高斯分布就出现了隐蔽变量,就会用到EM算法。

至此前景提取所需要的大部分学习内容都已经有了分析,该算法的学习也可以先告一段落了。
(完)

这篇关于数字图像处理成长之路15:前景提取(最大似然估计EM算法与高斯混合模型)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026008

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

使用Python在Excel中插入、修改、提取和删除超链接

《使用Python在Excel中插入、修改、提取和删除超链接》超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这... 目录引言使用工具python在Excel中插入超链接Python修改Excel中的超链接Python

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee

C#从XmlDocument提取完整字符串的方法

《C#从XmlDocument提取完整字符串的方法》文章介绍了两种生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`属性,但输出的XML字符串不带格式,可读性差,... 方法1:通过XMLDocument的OuterXml属性,见XmlDocument类该方法获得的xm

DeepSeek模型本地部署的详细教程

《DeepSeek模型本地部署的详细教程》DeepSeek作为一款开源且性能强大的大语言模型,提供了灵活的本地部署方案,让用户能够在本地环境中高效运行模型,同时保护数据隐私,在本地成功部署DeepSe... 目录一、环境准备(一)硬件需求(二)软件依赖二、安装Ollama三、下载并部署DeepSeek模型选

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更