一种用CPLD实现视频信号运动检测的方法
compare_data?process?spclk2?valid?compare_field?
begin
if?spclk2'event and spclk2=‘0’?then
if?compare_field=‘0’?then
pixels<=“0000000000”?
elsif?valid='1'?then
if?data_sram_reg<=data_reg1 or data_sram_reg>=data_reg2?then
pixels<=pixels+1?
end if?
end if?
end if?
end process?
compare_data进程在抽样的间隔(输入为色度分量Cr或者Cb时)对前后两次抽样的数据进行比较,如果比较结果超过允许值,计数器pixels加1,否则不加。
motion_detect?process?pixels?
begin
if?pixels>max_pixels?then
int0<=‘1’?
else
int0<=‘0’?
end if?
end process?
max_pixels是一个阈值,表示一帧数据中允许出现的不相等抽样数据的最大数目,当计数器pixels超过max_pixels时,就认为检测到了物体运动,CPLD将int0输出管脚置高,向处理器请求中断。这里max_pi
xels取600,它可以根据需要设置适当的值。
当CCD摄像头前有物体晃动时,CPLD的int0管脚会连续产生高电平脉冲,这说明运动检测模块已经正常工作起来,同时另一路视频信号经过W99682处理后输送到电视屏幕上,以便观察运动的场景。如果晃动摄像头本身,只要微小的晃动就可以看到类似的效果,因此用这种CPLD实现运动检测是可行的。
事实上,还可以利用同样的原理对CMOS摄像头的输入信号进行运动检测。
当然这种检测方法本身也有不足之处,最主要的一点是实际检测到的只是摄像头前光线亮度的变化,不能智能地判断引起这种变化的原因,也不能判别运动物体的形状。另一方面,从实验结果来看,有时候会出现误判;当运动物体离摄像头比较远时,检测的灵敏度也会降低,出现漏判。误判和漏判是一对矛盾,在实际应用中需要根据实际情况反复调试,选出最佳的阈值,减少这两种情况的发生。
《一种用CPLD实现视频信号运动检测的方法(第4页)》