codebook 背景建模更新及码本模型如何释放内存

时间:2021-08-30 14:54:07

原文链接:http://blog.csdn.net/quzhongxin/article/details/45558269

在使用codebook背景建模过程中,对于模型的背景更新始终一个问题。

1 我们要求的目标是:

  • 1 在人静止不动时,不能把人更新成背景(必须保证人始终是前景);
  • 2 但是对于移动的书本等要能够被更新成背景

2 提出的解决办法:

2.1 采用两个codebook背景模型,

一个模型:主模型M,用来分割前景
另一个模型:重新建模模型R,满足条件后重新建模成功,R替代M;如果重新建模失败,需释放掉R
R替代M后,要将M释放掉,然后重新初始化一份R

temp = M;
M = R;
free(temp);
R = Init();

如何释放存在的codebook码本模型?

void CodeBookDestroy(codeBook* T, int len) //len = width*height
{
    for(int j = 0; j < len; j++)
    {
        if (T[j].cb)
        {
            for (int i = 0; i < T[j].numEntries; i++)
            {
                delete T[j].cb[i];
            }
            delete [] T[j].cb;
        }
    }
    if (T)
        delete [] T;
    T = NULL;
}

2.2 重新建模的条件(满足一个即可)

统计当前帧中前景点的比例 p:
1. 画面没有前景时, 意味着此时房间没有人 ( p<Th )
2. 有太多的前景时,意味着光线发生了变化或摄像头被移动,或背景模型计算不准确( p>Th线 )

3 参考论文

Smart Vision for Managed Home Care:
http://download.csdn.net/detail/quzhongxin/8671203