浅析监控图像处理系统的软件结构
扫描二维码
随时随地手机看文章
图像软件系统的功能
在现在的面向计算机内存的图像处理系统里,一般采用Windows操作系统、PCI总线、单屏操作方式,而且又融合了图像通信技术。当前图像软件系统一般应具有以下功能:
1、图像的输入输出
图像的输入主要包括摄像机、扫描仪、数码相机的图像输入;图像的输出主要包括打印机、视频拷贝机、监视器的图像输出。要实现把输入输出设备嵌入图像软件系统以完成图像输入输出的功能,就需要调用或安装这些设备的设备驱动程序。
2、图像文件的存储与加载
图像文件的存储是把帧存或内存的图像储存在磁盘上,图像文件的加载是把磁盘中的图像文件调入帧存或内存,这里有图像文件格式问题,常采用通用的BMP格式等。
3、系统的管理
系统的管理可以认为是对图像硬件系统的工作状态进行控制。如输入通道输出通道的切换、存贮体的选择等。
4、图像处理
图像处理的种类很多,常常以大类来作为一级菜单的内容,如灰度变换、图像编辑、图像量测、图像增强等。
5、图像的通信
图像的通信包括图像的发送与接收,常常涉及图像的压缩与传输。一般分静态图像压缩与传输以及动态图像压缩与传输。有两种图像数据源的图像压缩与传输:图像数据来自硬盘;图像数据来自硬件图像系统。
图像软件系统的分层结构
通常,图像软件系统是分层构造的,图1给出了图像软件系统的分层结构。图中虚线框部分是图像软件系统,其中底层是硬件驱动层,主要解决和硬件的联接问题,中间层是处理层,实现各种各样的算法,最上面一层是数据的存储和通信。
一般来说,驱动硬件设备,可以采用以下三种方法:
·提供高级语言调用子程序;
·提供可安装的设备驱动程序;
·提供通用的设备驱动程序。
在Windows操作系统里,用户可以直接安装打印机、扫描仪等设备的驱动程序。因为在Windows操作系统里,已经包含了许多外设的设备驱动程序,这对用户来说是很方便的。
图像软件系统的硬件设备驱动程序
图像软件系统的硬件设备驱动程序要完成如下任务:
·对PCI总线上设备配置空间的操作;
·对SAA7146内部寄存器的操作;
·对视频前端子系统的初始化;
·对PC硬件中断的维护;
·视频图像数据缓冲区的获得;
·视频图像的实时显示;
·软件总体结构和特殊功能的实现。
从整个系统的数据处理流程可以看到,位于主机内的图像数据缓冲区是数据流从外部专用硬件平台到主机内部通用处理平台的中转环节。外部图像数据经PCI总线接口控制芯片写到缓冲区内,而内部的软件需要从缓冲区读数据,进行处理和显示。
图 图像软件系统的分层结构 视频图像数据的显示问题,目前都是利用Windows API函数SetDIBitsToDevice实现图像数据从缓冲区到显示设备之间的传送。绝大多数显卡的硬件功能支持SetDIBitsToDevice,当硬件不支持时,Windows将提供经软件模拟的SetDIBitsToDevice函数。由于有统一的规范,不需要关心所选用的显卡的具体细节,同是显示模式的问题也迎刃而解了。由于图像数据的传输由显卡的硬件完成,所以能达到很好的效果。
Windows图像软件系统的基础结构
在Windows操作系统且采用单屏方式的条件下,要对图像进行处理,就必须将图像装入内存。当物理内存不足时,系统通过内存分页交换,利用硬盘空间模拟内存。应用程序使用统一的系统内存管理,代码简单,维护方便,还具有自动伸缩性。
图像作为一个处理对象放到内存中,必须使用数据结构来描述它,这就是图像数据结构。对于任何一个图像应用程序来说,图像数据总是应用程序数据的核心部分。
应用程序的所有功能几乎都是围绕它进行的。如文件读写、扫描、拍摄、处理、显示、打印等,都需要建立、访问图像数据,实际上都是以图像数据结构核心为中心的。即使是最简单的图像显示软件,也需要图像文件读取和图像显示两大部分。
一个图像软件系统,包括不同的图像处理算法、图像显示、扫描仪或摄像机支持、图像采集卡支持、图像文件格式转换等,都涉及到图像数据结构。如果我们建立了一个以图像数据结构为核心的Windows图像软件系统的基础结构,就建立了一个完整的软件图像环境。
图像基础结构包括图像数据结构核心和围绕此核心构造的周边模块。图像数据结构核心是居于中心位置的。周边模块包括图像文件格式支持、图像显示、图像处理等。
在设计过程中,要注意以下几个问题:
图像基础结构的核心部分以C/C++语言完成。因为C/C++语言编译效率高,执行速度快,这对于要处理大量数据的图像应用来说是非常关键的;且C/C++ 语言非常灵活,使得图像基础结构可以高效的实现,而用其他的语言实现某些相同的功能可能要花很大的精力;C/C++语言移植性强,几乎可以移植到任何硬件和操作系统中。
图像基础结构的内部实现可以使用C++,但是对外接口一律使用C界面。因为C++的名字解析方法没有统一的标准,不同公司的C++编译器对相同的C++符号解析得到的名字可能完全不同,因此不同C++编译器生成的目标文件不能正确连接。这使得像Windows系统下具有C++接口的动态连接库(DLL)的应用不太可行,所以对外接口使用C语言则没有这个问题。
避免使用依赖于平台的声明、函数等,保持核心的可移植性。图像核心定义和代码只使用标准C数据类型和标准C库(ANSI)调用。当需要高端应用时,图像核心可以迅速移植到UNIX及其他平台,使整个应用具备较强的移植能力和伸缩性。
目前,图像基础结构包含如下模块:
·StdImage:图像数据结构核心以及对此核心进行操作的基本函数;
·ProgressStub:进度处理机制的定义和接口;
·VirtualFile:虚拟文件I/O界面;
·Vf_file:虚拟文件I/O的实际文件实现;
·Vf_memory:虚拟文件I/O的内存文件实现;
·ImageFile:虚拟图像文件读写界面;
·Jfit_file:虚拟图像文件读写界面的JPEG格式实现;
·Bmp-file:虚拟图像文件读写界面的BMP格式实现;
·Fgi_file:虚拟图像文件读写界面的自由灰度图像格式实现;
·DibStdImage:DIB(设备无关位图)与StdImage之间的转换;
·mess_util:难以归类的杂项辅助功能;
·ProgressWinHint:Windows下的一个进度处理机制实现;
·WinMessUtilities:Windows下的难以归类的杂项辅助功能。
由于面向帧存的图像硬件系统的结构,以图像帧存为核心,还包括图像的输入输出和处理等模块;而面向计算机内存的图像系统里,是以计算机内存为核心,同样包括有图像的输入输出和处理等模块。前者以整体硬件结构为主体,软件似乎只是图像处理和数据存储,后者以整体软件结构为主体,硬件则纳入软件的管理之下。这两种系统结构的差别很大,但从功能来讲,有其相似之处。
面向计算机内存的图像软件系统结构,称之为Windows图像基础结构,这种Windows图像基础结构的总体结构框图如图2所示。在图2中,StdImage结构代表了一个图像或图像序列,所有的功能几乎都围绕它进行。它可以利用ImageFile模块从图像文件装入图像,或者将图像写入文件中。在Windows环境下,为了显示或打印图像,通常会使用DIB,此外,像扫描仪、摄像机等还会以DIB的形式向计算机输入图像,因此图像基础结构设有DibStdImage模块,以便在DIB和StdImage之间进行快速转换。图像通信插入在网络和StdImage之间,由此可以实现图像的传输,而这种传输,是以内存为媒介,它具有速度快的优点。