动态侦测技术及其在数字图像监控中的应用1引言随着技术的发展,自动控制系统对在线检测的要求日益提高,由于利用图像进行检测具有非接触性、直观性、高精度性以及智能性等优点,因此这种基于数字图像处理的动态侦测技术在自动控制领域有着广泛的应用范围。它可用于集成电路引线焊接、焊缝缺陷X线图像自动检测、焊缝自动跟踪、浮法玻璃智能测控等项目;也可用于检测医疗器械封装前的图像信号,并当出现组装异常时实时的控制相应的联动机构的动作;还可用于水电站大坝船闸的辅助监控。利用图像检测技术设计出的数字图像监控系统可以同时监控多路频道,并将录像转化为MPEG视频流,然后集中在一台电脑屏幕各个分块区域上显示。录像信息以数字形式存放在硬盘上,克服了传统录像带时间长了或转录次数多了时图像质量变差的问题。然而,由于计算机屏幕尺寸有限,在同时显示多路录像时每一路录像的画面都比较小,这一点不利于工作人员及时发现一些细小的隐蔽的安全隐患问题。因此我们迫切需要一些精确的图像检测技术来提供自动报警,这种技术可以识别图像的变化,检测运动物体的存在并避免由光线变化带来的干扰。2图像侦测原理通过视频帧的比较来检测图像变化是一种可行的途径。MPEG视频流由三类编码帧组成,它们分别是:内帧(I帧),预测帧(P帧)和内插双向帧(B帧)。I帧按JPEG标准编码,独立于其他编码帧,它是MPEG视频流中唯一可存取的帧,每12帧出现一次。我们可以截取连续的I帧,来作为检测比较的材料。另外,我们也可以利用视频采集卡附带的驱动程序中的函数来进行帧的截取。在一些公司设计的数码监控系统中,视频流经过解码运算,以帧为单位连续存放在内存的缓冲区中,我们可以利用函数在缓冲区中将连续的两帧转化为位图形式存放在另外的内存空间以作比较之用。在PAL制式下,每秒刷新25帧,我们不必对每一帧都作出比较,只需按固定的间隔采样缓冲区中的帧即可。至于视频帧的比较则有多种方法,下面我们着重讨论图像减法和直方图法。2.1图像减法用帧差分可以检测场景变化,一个简单帧差分可通过计算两个连续帧的象素获得。对帧内每个象素点(x,y),T时刻与T-1时刻象素值之差为Dx,y(T)=||Sx,y(T)–Sx,y(T-1)||。设定内帧差分系数IDsum=ΣL,IF||Sx,y(T)–Sx,y(T-1)||≥TaTHENL=TRUE,实际决定是否报警,可以通过计算三帧以上IDsum数量。真,IF||IDsum(K)–IDsum(K-1)||≥TbAND||IDsum(K)–IDsum(K+1)||≥Tb报警=假,ELSETa,Tb为适当阈值量。2.2直方图法帧间差分对照明变化和镜头移动非常敏感。视频帧的直方图是用于在视频序列中可鉴别变化的多种样条,它可以避免这类敏感性,而就有关图像的外形提供一个总体描述。直方图可通过度量全部图像中象素的概率分布来计算。假设图像中有N个象素,则象素值为i的标准化直方图数量Hi计算如下:1,IFDx,y=iHi=∑ξ(x,y)/N,ξ(x,y)=0,ELSE由于录像背景一般是固定不变的,而我们感兴趣的往往不是整个画面的比较,而是画面中特定区域的比较。因此以上的帧比较方法含有一些不必要的计算。利用捕捉的位图来比较可以较好的解决这个问题。我们可以在屛画面中上画出一个小矩形,这是我们要检测的地方。然后求得矩形的坐标和大小,从屏幕直接截取这一小块位图进行比较。3动态侦测实现下面是用VisualC++6.0编程对画面特定区域进行动态侦测的具体实现方法。如图所示,首先用鼠标在屏幕上设定动态侦测的区域,利用鼠标事件返回矩形的四个顶点坐标并存放在RECT结构体中。定义一个设备环境(DeviceContext)类CDC的指针指向程序对话框客户区域的设备环境:CWnd*pForeWnd=GetForegroundWindow();CDC*pDC=pForeWnd-GetDC();然后创建一个与之兼容的设备环境dcMemory以及位图m_Bitmap,并将位图装入设备中,dcMemory.CreateCompatibleDC(pDC);m_Bitmap.CreateCompatibleBitmap(pDC,m_Width,m_Height);m_pOldbmp=dcMemory.SelectObject(&m_Bitmap);调用dcMemory的成员函数,将屏幕中设定区域的位图拷贝到m_Bitmap中。dcMemory.BitBlt(0,0,m_Width,m_Height,pDC,m_strcRect.left,m_strcRect.top,SRCCOPY);用m_Bitmap的成员函数将位图像素的值拷贝到m_lpVoid1指向的内存区域中。m_Bitmap.GetBitmapBits(m_TotalBytes,m_lpVoid1);每隔一定时间间隔,程序会作上述同样的操作,截取屏幕上同一监测区域的位图,并会将这一幅位图与上一幅位图的象素值进行比较,如果超出一定数量的象素点的值不同,就发出报警信号。程序运行结果如图所示。在该程序中同一象素点的值的差异在一定范围内时,程序认为该值是不变的。这主要是为了克服光线变化引起的干扰。该程序模块已经嵌入我们所开发的数字图像监控系统中,在对运动物体进行监测时取得了较好的效果。该程序模块也可以做成一个后台运行的软件,它完全独立于监控系统,只负责对显示屏幕上特定区域的图像变化进行监测和报警。4动态侦测技术评估要对动态侦测技术的性能进行评估并不容易,特别是要进行定量的分析时,必须提供一个供作比较研究的标准视频序列,它应该包括突然场景变化,摄像机移动以及光线明暗变换等特殊效果。检测方案可用多种参数来评估,比如检测成功率、检测失败率等等。然而根据监测功能实现的方法分类,则可以对软件和硬件两大类实现方法进行一些定性的分析。采用硬件来实现监测功能,不占用CPU,拥有较快的处理速度,因而可以采用一些较为复杂的算法以获得更为准确的监测结果,并且有很好的实时性。然而硬件实现也意味着较高的成本,而且一旦监控系统对动态监测功能提出了更新更高的要求,那么原来的硬件系统只能弃而不用,必须采购新的硬件,造成浪费。用软件实现的监测功能,由于要占用CPU来完成数值计算,所以算法不能太复杂,而且计算量不宜太大,否则会影响监控系统其他功能(如显示、录像等)的实现。但软件也有着硬件无法比拟的优势,首先它相对硬件而言非常便宜,有利于降低成本。其次是它的功能扩充非常容易,升级换代不会造成不必要的浪费,并且可以根据用户不同的需求提供一些个性化的功能组合。随着计算机硬件性能的不断提高,用于动态监测的软件可以占用更多的CPU时间和更大的内存空间,同样可以采用一些以前只能在硬件中使用的算法。只要计算机硬件性能的提升是无限的,那么软件的算法升级也是无限的。我们认为,用软件来实现系统的动态监测功能,是一种眼光更为长远的选择,而且也是动态监测技术发展的必由之路。