首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
|||||
一种用CPLD实现视频信号运动检测的方法 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 23:54:21 点击数:[] ![]() |
|||||
对于以上的抽样规则,有必要说明一下。最终的抽样数据并非全部都是有效数据,其中还包括了一部分消隐期的数据。这样做是可以理解的,因为运动检测的结果是根据两帧被抽样数据的差值来判定的,虽然消隐期的数据是无效的,但是每次消隐期的数据是相同的,两次抽样数据相减结果是零,并不会影响结果的判定。之所以对一场的行进行抽样,主要是为了减小抽样数据量,使数据总量不超过128K SRAM的容量。 如果要保证抽样数据全部都是有效数据,那么必须利用输入的象素数据同步脉冲SPCLK、场同步信号SVS和行同步信号SHS对抽样时刻做严格的同步。这需要消耗额外的CPLD资源,而效果却不一定好。 根据以上规则,实际抽样的数据量为:864×144=124416Byte,需要的SRAM容量为128K。 2.3 程序 下面给出实现以上过程的一部分VHDL程序。 sram_write_controlprocessstore_fieldvalidspclk2line_counter begin writing<=valid and spclk2 and spclk and store_field and line_counter0 end process sram_read_controlprocesscompare_fieldvalidspclk2line_counter begin reading<=valid and compare_field and spclk2 and line_counter0 end process 这两个进程用于控制SRAM的读写信号,reading和writing正好和SRAM的读写信号反相。Valid变量指示当前输入的行是否为需要采样的有效行,spclk是象素数据同步脉冲,spclk2是它的二分频,用于指示当前输入数据是否为亮度分量Y。line_counter0=1表示奇数行。store_field和compare_field分别指示本场数据是否需要保存或者需要比较。 update_data_busprocessstore_fieldvalidccd_data begin ifstore_field=‘1’and valid=‘1’then data_sram<=ccd_data else data_sram<=“ZZZZZZZZ” end if end process 在抽样第一帧数据的时候,直接把数字视频信号输入到SRAM的数据总线上,写操作信号由writing控制。其它时候,数据总线上输出高阻。 update_data_regprocessspclkccd_dataspclk2compare_field validdata_sram begin ifspclk'event and spclk=‘0’then ifcompare_field=‘1’and valid=‘1’and spclk2=‘1’then data_sram_reg<=data_sram ifccd_data<=thresholdthen data_reg1<=“00000000” data_reg2<=ccd_data+threshold elsifccd_data>=255-thresholdthen data_reg1<=ccd_data-threshold data_reg2<=“11111111” else data_reg1<=ccd_data-threshold data_reg2<=ccd_data+threshold end if end if end if end process SAA7113的象素同步脉冲的下跳边沿是象素数据的有效边沿,进程在compare_field=1时,一方面把抽样数据读入,用寄存器保存用于比较的数据的上限和下限;另一方面从SRAM读入对应数据存入寄存器data_sram_reg,这两个操作为比较数据做好准备。threshold是一个阈值,这里取16,当前后两次抽样差值超过threshold时就认为这两个抽样数据是不等的。在输入数据接近0或者255的时候,需要做特殊处理,避免整型数溢出,影响比较结果。 compare_dataprocessspclk2validcompare_field begin ifspclk2'event and spclk2=‘0’then ifcompare_field=‘0’then pixels<=“0000000000” elsifvalid='1'then ifdata_sram_reg<=data_reg1 or data_sram_reg>=data_reg2then pixels<=pixels+1 end if end if end if end process compare_data进程在抽样的间隔(输入为色度分量Cr或者Cb时)对前后两次抽样的数据进行比较,如果比较结果超过允许值,计数器pixels加1,否则不加。 motion_detectprocesspixels begin ifpixels>max_pixelsthen int0<=‘1’ else int0<=‘0’ end if end process max_pixels是一个阈值,表示一帧数据中允许出现的不相等抽样数据的最大数目,当计数器pixels超过max_pixels时,就认为检测到了物体运动,CPLD将int0输出管脚置高,向处理器请求中断。这里max_pixels取600,它可以根据需要设置适当的值。 当CCD摄像头前有物体晃动时,CPLD的int0管脚会连续产生高电平脉冲,这说明运动检测模块已经正常工作起来,同时另一路视频信号经过W99682处理后输送到电视屏幕上,以便观察运动的场景。如果晃动摄像头本身,只要微小的晃动就可以看到类似的效果,因此用这种CPLD实现运动检测是可行的。 事实上,还可以利用同样的原理对CMOS摄像头的输入信号进行运动检测。 当然这种检测方法本身也有不足之处,最主要的一点是实际检测到的只是摄像头前光线亮度的变化,不能智能地判断引起这种变化的原因,也不能判别运动物体的形状。另一方面,从实验结果来看,有时候会出现误判;当运动物体离摄像头比较远时,检测的灵敏度也会降低,出现漏判。误判和漏判是一对矛盾,在实际应用中需要根据实际情况反复调试,选出最佳的阈值,减少这两种情况的发生。 |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |