基本了解GMM的基本工作原理,下面我们介绍利用MATLAB来实现GMM的基本工作原理。通过介绍程序来逐步实现GMM的工作原理。
代码段一:通过sprintf函数来读取所存在的图片,然后再通过imread来读取图片的数值,这个代码段比较简单,主要用于读取图片的数值。
代码段二:主要参数的初始化。
代码段三,主要用于计算每张图片的灰度值,下面就简单介绍一下图像平均灰度值的计算方法,灰度值是亮度的概念,0~为黑色,255~白色,依据颜色深浅范围为0~255.(一定介于0-255之间)。计算图像的平均灰度值有利于简化静态图像和动态图像的区分,我们通过计算图片的平均灰度值,使静态的物体变为黑色,而使动态的物体变为白色。从而简化了动态物体的识别。
代码段四:这里就是我们所得到多维高斯函数的叠加功能。
这两组公式就是对应的这段代码,通过代码我们可以实现多维高斯函数的叠加运算。
代码段五:图像像素的更新,将处理后的图像做更新,然后得到跟踪的图像。
4.2 仿真结果以及分析
以上我们基本了解了GMM的基本工作流程,下面我们将GMM的仿真结果做具体的分析。所谓的动态图像跟踪,就是将图片变成黑白像素的图像,然后动态的物体做为白色物体而静态的物体作为黑色图像。从而实现了物体的动态跟踪过程。
·动态树叶的分辨
图4-1 |
图4-2 |
图4-3 |
图4-4 |
事实上,动态树叶的变动范围是非常小的,而对于系统的检测,树叶不应该被检测出来,这可能就是该系统的不足之处。
·汽车的跟踪
视屏中出现多次的汽车,我们以其中一个汽车做为例子来说明。
图4-5 |
图4-6 |
图4-7 |
图4-8 |
图4-9 |
图4-10 |
图4-11 |
图4-12 |
从图中我们可以看到右端一个白色的物体移动过来,这个白色的物体就是所谓的汽车了,只是由于GMM系统自身的不稳定性,导致略微运动的树叶也被检测出来了,但是总体可以看到汽车已经被检测出来了。
·行人的跟踪
图4-13 |
图4-14 |
图4-15 |
图4-16 |
图4-17 |
图4-18 |
通过观察这几张图片,我们可以看到中间有一个行人走了过来,说明对于行人,我们也检测成功了,可见GMM算法的正确性。
- 利用MATLAB实现KDE
5.1 基于MATLAB的KDE实现
通过以上的理论分析,我们基本可以得到KDE算法的基本实现过程。
代码段一:这个代码段主要通过计算图像的KDE像素点来完成图像的检测工作。然后对通过算法后的点利用reshape函数进行重构图像,得到我们所要的像素值。
代码段二:通过这个代码,我们将得到满足条件要求的图像类型值。
代码段三:权重的计算
代码段四:最后我们得到了图像的最后需要的像素值来达到动态物体的跟踪效果。
5.2 仿真结果以及分析
通过上面的代码分析,我们得到了所要的效果。
图5-1 |
图5-2 |
通过这个程序,我们可以看到,只有动的人物被检测出来了,但是背景的树叶没有被检测出来,完好的解决了GMM算法中存在的问题。
图5-3 |
图5-4 |
通过这个程序,我们可以看到,只有动的汽车被检测出来了,但是背景的树叶没有被检测出来,完好的解决了GMM算法中存在的问题。
图5-5 |
图5-6 |
通过这个程序,我们可以看到,只有动的人物被检测出来了,但是背景环境物体没有被检测出来,完好的解决了GMM算法中存在的问题。
通过以上的对比,很显然KDE的效果比GMM效果更加理想,所以在大多数的情况下,我们一般采用KDE算法作为移动物体的动态检测算法。