rambo

Opencv学习:像素采样及迭代器;平均背景法

像素片段

在对像素变化建模时,先要对图像中的像素点在一段时间内如何变化有个概念。考虑行人穿过摄像机视野的场景。给定一段线段在给定帧数的图像中的变化,然后给这种波动建立模型。

首先我们需要对这条线段进行采样。线采样函数为 cvInitLineIterator()和CV_NEXT_LINE_POINT() 宏定义。

cvInitLineIterator()返回直线上迭代的点的个数。

每次调用CV_NEXT_LINE_POINT(line_iterator) 使line_iterator指向下一个像素。

 

 平均背景法

基本思路:计算每个像素的平均值和标准差作为它的背景模型。考虑行人检测的像素直线,可以通过视频中的平均值和平均差来描述每一个像素的变化,

2帧图像之间对应像素点灰度值算出一个误差值,在背景建模时间内算出该像素点的平均值,误差平均值,然后在平均差值的基础上+-误差平均值的常数(这个系数需要手动调整)倍作为背景图像的阈值范围,所以当进行前景检测时,当相应点位置来了一个像素时,如果来的这个像素的每个通道的灰度值都在这个阈值范围内,则认为是背景用0表示,否则认为是前景用255表示。

QQ截图20150818220804

分配临时内存和完成背景建模后的内存释放

学习累积背景图像和每一帧图像插值的绝对值。

cvCvtScale函数将原始的每通道8位,3通道的彩色图像转换我float型的3通道图像。之后我们基类原始的浮点图像为IavgF,cvAbsDiff()计算每帧图像之间的绝对差图像,并将其累积为IdiffF。每次累积图像后,增加图像计数器Icount的值。该计数器是一个全局变量,用于接下来计算平均值。

计算每一个像素的均值和方差观测(平均绝对差分)

平均绝对差分:△=(│△1│+│△2│+……+│△n│)/n (△为平均绝对误差;△1、△2、……△n为各次测量的绝对误差)。所有单个观测值与算术平均值的偏差的绝对值的平均。与平均误差相比,平均绝对误差由于离差被绝对值化,不会出现正负相抵消的情况,因而,平均绝对误差能更好地反映预测值误差的实际情况。
一阶距是总体平均数。如何衡量样本之间的离差呢,假设用平均差的概念,也就是E|X-EX|难以计算,而E(x-EX)^2则相对好计算得多。

SetHighThreshold(7.0)使得对于每一帧图像的绝对差大于平均值7倍的像素都认为是前景;SetLowThreshold(6.0)使得对于每一帧图像的绝对差小于平均值6倍的像素都认为是前景;像素平均值范围内,认为目标是背景。

cvCvtPixToPlane可以看作是cvSplit的宏

一旦有了自己的背景模型,同时给出高低阈值,可用它将图像分割前景(不能被背景模型”解释”的图像部分)和背景(在背景模型中,任何在高低阈值之间的图像部分)

QQ截图20150818230834QQ截图20150818230824

QQ截图20150818230814