发明名称 基于分层背景建模的运动目标实时检测方法
摘要 本发明公开了一种基于分层背景建模的运动目标实时检测方法,为每一个像素点创建一个背景字典,所有像素点的背景字典构成一个完整的背景模型,当前输入像素点在背景字典中找到匹配即为背景点,否则为前景点,最后并采用候选背景模型来更新主背景模型。具体实现步骤为:首先利用前若干帧初始图像,建立背景模型,其次利用当前输入图像与背景模型做差,检测运动目标区域,然后对运动目标区域进行形态学滤波后,输出运动目标,最后再对背景模型进行实时更新,以供下一帧目标检测用。本发明方法解决了背景差法中背景构造更新的困难,对光照变化、背景扰动不敏感,具有很好的鲁棒性和实时性。
申请公布号 CN102096931B 申请公布日期 2013.01.09
申请号 CN201110052980.6 申请日期 2011.03.04
申请人 中南大学 发明人 许雪梅;李岸;曹建;孔德明;尹林子;赵岩;郭巧云;郭远威
分类号 G06T7/20(2006.01)I;G06K9/00(2006.01)I 主分类号 G06T7/20(2006.01)I
代理机构 长沙市融智专利事务所 43114 代理人 黄美成
主权项 1.一种基于分层背景建模的运动目标实时检测方法,其特征在于,包括以下步骤:步骤1:采集前N帧初始图像,建立基于背景字典的背景模型;步骤2:利用当前输入图像与背景模型作差,检测运动目标区域;步骤3:目标区域的形态学滤波,输出运动目标;步骤4:更新背景模型,并返回步骤2进行下一次检测循环;所述步骤1中,采集前N帧初始图像,建立背景模型方法为,设前N个序列中单个像素坐标为(x,y)的序列采样值为:<img file="FDA00002216089900011.GIF" wi="523" he="68" />I中的每一个元素都是一个YUV向量即<maths num="0001"><![CDATA[<math><mrow><msubsup><mi>I</mi><mi>t</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>=</mo><mrow><mo>(</mo><msub><mi>Y</mi><mi>t</mi></msub><mo>,</mo><msub><mi>U</mi><mi>t</mi></msub><mo>,</mo><msub><mi>V</mi><mi>t</mi></msub><mo>)</mo></mrow><mo>,</mo><mi>t</mi><mo>=</mo><mn>1</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>N</mi><mo>;</mo></mrow></math>]]></maths>设<maths num="0002"><![CDATA[<math><mrow><msup><mi>C</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msup><mo>=</mo><mo>{</mo><msubsup><mi>c</mi><mn>1</mn><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>,</mo><msubsup><mi>c</mi><mn>2</mn><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><msubsup><mi>c</mi><mi>L</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>}</mo></mrow></math>]]></maths>为像素点(x,y)的背景字典,背景字典中含有L个码字;每个码字<img file="FDA00002216089900014.GIF" wi="68" he="50" />由两部分组成:YUV向量Avg<sub>i</sub>=(Y<sub>i</sub>,U<sub>i</sub>,V<sub>i</sub>)和特征向量Aux<sub>i</sub>=(f<sub>i</sub>,r<sub>i</sub>,p<sub>i</sub>,q<sub>i</sub>),其中,i=1,...,L,f表示该码字出现的次数;r表示码字在训练中没有再次出现的最大时间间隔;p和q分别表示该码字出现后的第一次和最后一次匹配时间,用帧序数表示;每一个采样值<img file="FDA00002216089900015.GIF" wi="70" he="50" />都和已有的码字进行比较,如果找到码字与其匹配,将匹配的码字进行更新;如果找不到匹配码字,则为其创建一个新的码字存入背景字典中,具体过程如下所示:(1):初始化,将每个像素的背景字典置空,每个背景字典中码字的个数为零,即L=0;(2):对于训练视频帧中的每个像素的序列采样值<img file="FDA00002216089900016.GIF" wi="513" he="53" />中每一个值<img file="FDA00002216089900017.GIF" wi="99" he="50" />根据以下条件来找出匹配的码字<img file="FDA00002216089900018.GIF" wi="95" he="50" />设<img file="FDA00002216089900019.GIF" wi="68" he="50" />的原内容为Avg<sub>m</sub>=(Y<sub>m</sub>,U<sub>m</sub>,V<sub>m</sub>)和Aux<sub>m</sub>=(f<sub>m</sub>,r<sub>m</sub>,p<sub>m</sub>,q<sub>m</sub>):<maths num="0003"><![CDATA[<math><mrow><mi>Low</mi><mo>&le;</mo><msubsup><mi>I</mi><mi>t</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>-</mo><msub><mi>Avg</mi><mi>m</mi></msub><mo>&le;</mo><mi>High</mi></mrow></math>]]></maths>High和Low为背景建模上下边界参数,High取值为(10,10,10),Low取值为(-10,-10,-10);(3):如果背景字典为空或者未找到匹配的码字,则令L=L+1,并创建一个码字<img file="FDA000022160899000111.GIF" wi="68" he="50" />且令它的数据为:<maths num="0004"><![CDATA[<math><mrow><msub><mi>Avg</mi><mi>L</mi></msub><mo>=</mo><msubsup><mi>I</mi><mi>t</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>=</mo><mrow><mo>(</mo><msub><mi>Y</mi><mi>t</mi></msub><mo>,</mo><msub><mi>U</mi><mi>t</mi></msub><mo>,</mo><msub><mi>V</mi><mi>t</mi></msub><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>Aux<sub>L</sub>=(1,t-1,t,t);否则,更新匹配的码字<img file="FDA00002216089900021.GIF" wi="92" he="50" />那么把<img file="FDA00002216089900022.GIF" wi="68" he="50" />更新为:<maths num="0005"><![CDATA[<math><mrow><msub><mi>Avg</mi><mi>m</mi></msub><mo>=</mo><mrow><mo>(</mo><mfrac><mrow><msub><mi>f</mi><mi>m</mi></msub><msub><mi>Y</mi><mi>m</mi></msub><mo>+</mo><msub><mi>Y</mi><mi>t</mi></msub></mrow><mrow><msub><mi>f</mi><mi>m</mi></msub><mo>+</mo><mn>1</mn></mrow></mfrac><mo>,</mo><mfrac><mrow><msub><mi>f</mi><mi>m</mi></msub><msub><mi>U</mi><mi>m</mi></msub><mo>+</mo><msub><mi>U</mi><mi>t</mi></msub></mrow><mrow><msub><mi>f</mi><mi>m</mi></msub><mo>+</mo><mn>1</mn></mrow></mfrac><mo>,</mo><mfrac><mrow><msub><mi>f</mi><mi>m</mi></msub><msub><mi>V</mi><mi>m</mi></msub><mo>+</mo><msub><mi>V</mi><mi>t</mi></msub></mrow><mrow><msub><mi>f</mi><mi>m</mi></msub><mo>+</mo><mn>1</mn></mrow></mfrac><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>Aux<sub>m</sub>={f<sub>m</sub>+1,max(r<sub>m</sub>,t-q<sub>m</sub>),p<sub>m</sub>,t};(4):待所有像素都匹配完成即训练结束后,对每个像素的每个码字依次计算该码字没有出现的最大时间间隔r,对于<img file="FDA00002216089900024.GIF" wi="67" he="50" />来说,其中i=1,...,L,<maths num="0006"><![CDATA[<math><mrow><msubsup><mi>r</mi><mi>i</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>=</mo><mi>max</mi><mrow><mo>(</mo><msubsup><mi>r</mi><mi>i</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>,</mo><msubsup><mi>p</mi><mi>i</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>-</mo><mn>1</mn><mo>+</mo><mi>N</mi><mo>-</mo><msubsup><mi>q</mi><mi>i</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>基于<img file="FDA00002216089900026.GIF" wi="61" he="50" />得到最能代表真实背景的初始背景模型M,M是所有像素的背景字典,以其中的一个像素点(x,y)为例,其背景字典为<img file="FDA00002216089900027.GIF" wi="622" he="52" />i为码字的索引;其中,阈值T<sub>nev</sub>取训练帧数的一半,即N/2;所述步骤2的具体过程为:a:当前输入帧图像的像素与上一帧图像的像素作差,将当前输入帧图像分为变化区域与非变化区域:<maths num="0007"><![CDATA[<math><mrow><mi>S</mi><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mi>S</mi><mn>1</mn></mtd><mtd><mo>|</mo><msubsup><mi>I</mi><mi>t</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>-</mo><msubsup><mi>I</mi><mrow><mi>t</mi><mo>-</mo><mn>1</mn></mrow><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>|</mo><mo>&le;</mo><mi>&epsiv;</mi></mtd></mtr><mtr><mtd><mi>S</mi><mn>2</mn></mtd><mtd><mi>otherwise</mi></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>其中S指当前输入帧图像,S1指非变化区域,S2指变化区域,ε指变化阀值;定义BG<sub>t-1</sub>(x,y)表示第t帧(x,y)像素点的二值化值,其取值只有0和1两种,其中第t帧中属于前景的像素点,被二值化为0;属于背景的像素点被二值化为1;b:非变化区域S1内像素点的BG<sub>t</sub>(x,y)取与上一帧的BG<sub>t-1</sub>(x,y)相同的值,即BG<sub>t</sub>(x,y)=BG<sub>t-1</sub>(x,y) if(x,y)∈S1;变化区域内像素点根据下式从M中找出与其匹配的码字<img file="FDA00002216089900029.GIF" wi="88" he="50" />如果找到,则BG<sub>t</sub>(x,y)=1;否则BG<sub>t</sub>(x,y)=0;<maths num="0008"><![CDATA[<math><mrow><mi>Min</mi><mo>&le;</mo><msubsup><mi>I</mi><mi>t</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>-</mo><msubsup><mi>Avg</mi><mi>i</mi><mrow><mi>x</mi><mo>,</mo><mi>y</mi></mrow></msubsup><mo>&le;</mo><mi>Max</mi><mo>;</mo></mrow></math>]]></maths>其中i=1,…,L,<img file="FDA000022160899000211.GIF" wi="126" he="50" />为像素点(x,y)的第i个码字的YUV向量,Max和Min为目标检测上下边界参数,取Max为(35,6,6),Min为(-25,-6,-6);c:判断前景运动目标像素利用BG(x,y)的值,得到运动目标区域<img file="FDA00002216089900031.GIF" wi="603" he="138" />所述步骤4中更新背景模型方法为:在背景模型M训练完成后,创建第二层背景模型M′,如果一个新输入的采样值与已有背景字典M找不到匹配,则为该新输入的采样值创建一个新的码字到M′中,然后把M’中满足条件“码元出现的次数f&gt;Tadd”的码字增加到背景模型M中,把超过阈值T<sub>del</sub>还没被匹配访问的码字从M中删除,具体步骤为:①:从M中找出与新输入的像素<img file="FDA00002216089900032.GIF" wi="416" he="53" />匹配的码字c<sub>m</sub>,按如下公式更新其向量:<maths num="0009"><![CDATA[<math><mrow><msub><mi>Avg</mi><mi>m</mi></msub><mo>=</mo><mrow><mo>(</mo><mfrac><mrow><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mi>&alpha;</mi><mo>)</mo></mrow><msub><mi>f</mi><mi>m</mi></msub><msub><mi>Y</mi><mi>m</mi></msub></mrow><mrow><msub><mi>f</mi><mi>m</mi></msub><mo>+</mo><mn>1</mn></mrow></mfrac><mo>,</mo><mfrac><mrow><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mi>&alpha;</mi><mo>)</mo></mrow><msub><mi>f</mi><mi>m</mi></msub><msub><mi>U</mi><mi>m</mi></msub><mo>+</mo><mi>&alpha;</mi><msub><mi>U</mi><mi>t</mi></msub></mrow><mrow><msub><mi>f</mi><mi>m</mi></msub><mo>+</mo><mn>1</mn></mrow></mfrac><mo>,</mo><mfrac><mrow><mrow><mo>(</mo><mn>1</mn><mo>-</mo><mi>&alpha;</mi><mo>)</mo></mrow><msub><mi>f</mi><mi>m</mi></msub><msub><mi>V</mi><mi>m</mi></msub><mo>+</mo><mi>&alpha;</mi><msub><mi>V</mi><mi>t</mi></msub></mrow><mrow><msub><mi>f</mi><mi>m</mi></msub><mo>+</mo><mn>1</mn></mrow></mfrac><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>Aux<sub>m</sub>={f<sub>m</sub>+1,max(r<sub>m</sub>,t-q<sub>m</sub>),p<sub>m</sub>,t},其中α是学习率;②:如果在M中没有匹配的码字,则在M′中进行查找,如果找到,按步骤①中的公式更新;如果找不到,则创建一个新的码字c′添加到M′;③:根据T<sub>M′</sub>精练M′,其中T<sub>M′</sub>是阈值,表示码字未出现的最长时间间隔,设为训练帧数的一半,即:M′=M′-{c′<sub>k</sub>|c′<sub>k</sub>∈M′,r<sub>k</sub>&gt;T<sub>M′</sub>};④:将在M′中出现次数超过阈值T<sub>add</sub>的码字移到M中,以解决运动目标长时间停止转化为背景的问题即:M=M+{c′<sub>k</sub>|c′<sub>k</sub>∈M′,f<sub>k</sub>&gt;T<sub>add</sub>};⑤:从M中删除超过时间T<sub>del</sub>未被匹配的码字,即:M=M-{c<sub>k</sub>|c<sub>k</sub>∈M,r<sub>k</sub>&gt;T<sub>del</sub>};其中T<sub>M′</sub>和T<sub>del</sub>分别表示背景模型M′和M中码字未匹配的最大时间阈值,设为训练帧数的一半;T<sub>add</sub>表示码字在背景模型M′中出现最大次数,取值为400~600。
地址 410083 湖南省长沙市岳麓区麓山南路932号