一.运动检测的算法
1.算法目的:
在一个的运动图象帧序列中,把其中图象几乎无变化的连续几帧滤掉,仅剩下图象有变化的帧序列
2.算法思想:
使用差影法,将前后两帧图象进行相减,并对相减得到的结果帧进行检测,如果结果帧几乎为空帧,则认为这两帧图象无变化,并把无变化的帧删掉;否则认为这两帧图象有变化,并把它们保存在结果队列中
3.算法描述:
3.1从管道中读入图象帧,每次比较当前帧和下一帧,对它们相应象素点的灰度值进行相减,如果差值不为0,则把结果帧相应的象素点的灰度值赋为1,然后对结果帧中灰度值为1的象素点进行统计,如果和大于某个阀值,则认为这两帧的图象有变化,否则无变化。
3.2如果连续的两帧图象有变化,则将它们以及各自相应的位置标志保存在结果队列中
3.3如果连续的两帧图象无变化,则比较当前帧和下n帧
3.3.1如果当前帧和下n帧无变化,并且当前帧和下n/2帧也无变化,则认为当前帧到下n帧图象都没有变化,则把这一段图象序列滤掉
3.3.2如果当前帧和下n帧有变化,或者当前帧和下n/2帧有变化,则n=n/2,重新比较当前帧和下n帧,直到n=2时停止
程序结构:
全局变量:
first=>当前帧指针
second=>下一帧指针
gif_no =>帧号
fore_pol=>当前帧位置
back_pol=>下一帧位置
add_start=>数据区头指针
Len=>一帧象素点的个数
BEGIN
从管道中读出第一、二帧赋予first,second
gif_no=0
fore_pol=0;
back_pol=0;
do
first=add_start+Len*fore_pol;
second=add_start+Len*back_pol;
if 比较函数(first, second)为真
then gif_no++
back_pol++
fore_pol++
first, second往后移一帧
将当前帧及相应的帧号放入结果队列
else 调用后移函数(P0, P1,n)
将经过检测得到的图象帧及相应的帧号放入结果队列
(gif_no, back_pol, fore_pol都在后移函数中修改而得新值)
until 命令停止
END