主页(http://www.pttcn.net):试析监控图像处理系统的软件结构与软件包(2) 图像基础结构的核心部分以C/C++语言完成。因为C/C++语言编译效率高,执行速度快,这对于要处理大量数据的图像应用来说是非常关键的;且C/C++语言非常灵活,使得图像基础结构可以高效的实现,而用其他的语言实现某些相同的功能可能要花很大的精力;C/C++语言移植性强,几乎可以移植到任何硬件和操作系统中。 图像基础结构的内部实现可以使用C++,但是对外接口一律使用C界面。因为C++的名字解析方法没有统一的标准,不同公司的C++编译器对相同的C++符号解析得到的名字可能完全不同,因此不同C++编译器生成的目标文件不能正确连接。这使得像Windows系统下具有C++接口的动态连接库(DLL)的应用不太可行,所以对外接口使用C语言则没有这个问题。 避免使用依赖于平台的声明、函数等,保持核心的可移植性。图像核心定义和代码只使用标准C数据类型和标准C库(ANSI)调用。当需要高端应用时,图像核心可以迅速移植到UNIX及其他平台,使整个应用具备较强的移植能力和伸缩性。 目前,图像基础结构包含如下模块: 由于面向帧存的图像硬件系统的结构,以图像帧存为核心,还包括图像的输入输出和处理等模块;而面向计算机内存的图像系统里,是以计算机内存为核心,同样包括有图像的输入输出和处理等模块。前者以整体硬件结构为主体,软件似乎只是图像处理和数据存储,后者以整体软件结构为主体,硬件则纳入软件的管理之下。这两种系统结构的差别很大,但从功能来讲,有其相似之处。 面向计算机内存的图像软件系统结构,称之为Windows图像基础结构,这种Windows图像基础结构的总体结构框图。StdImage结构代表了一个图像或图像序列,所有的功能几乎都围绕它进行。它可以利用ImageFile模块从图像文件装入图像,或者将图像写入文件中。在Windows环境下,为了显示或打印图像,通常会使用DIB,此外,像扫描仪、摄像机等还会以DIB的形式向计算机输入图像,因此图像基础结构设有DibStdImage模块,以便在DIB和StdImage之间进行快速转换。图像通信插入在网络和StdImage之间,由此可以实现图像的传输,而这种传输,是以内存为媒介,它具有速度快的优点。 图像处理软件包 图像处理软件包分为专用图像处理软件包和通用图像处理软件包,专用图像处理都以软件处理为主,解决特定的问题。通用图像处理软件包主要采用菜单形式,其算法相对比较简单,只是要求具有一些初步的算法,但一定具有图像输入功能。 菜单一般有多级,主菜单里可以分为几个大项,如文件管理、图像获取、图像编辑、图像二值化、边缘增强、图像量测、图像变换等,每一个菜单大项的下级菜单又分若干小项,现以单屏图像处理软件包为例,简要介绍菜单的各项内容。 文件管理 图像区域分为规则区域和不规则区域,规则区域通常指矩形区域,不规则区域通常指用鼠标器画出来的一个封闭的单连通区域。 在规则区域的情况下,存储图像时常用鼠标器来确定所需存储的区域,加载时又可以用鼠标器来确定所加载图像的显示位置。图像处理常常按整幅图像来进行,有时也把区域分为整幅图像区域和局部图像区域,由于整幅操作不再需要鼠标器来确定区域,因此可以简化操作。 规则区域图像的格式有自由格式和标准格式两种。对于灰度图像,自由格式文件的第一个字节为0,表示是灰度图像,后两个字节表示矩形区域的宽,接下来的两个字节表示矩形区域的高,随后是灰度图像数据,一个字节表示一个像素,每个像素按照从左到右、从上到下排列。对于彩色图像,常用RGB基色的彩色空间。其自由格式文件的第一个字节为1,表示是彩色图像,后两个字节表示矩形区域的宽,接下来的两个字节表示矩形区域的高,随后是彩色图像数据,三个字节表示一个像素,顺序是R,G,B,每个像素按照从左到右、从上到下的顺序排列。标准格式的图像文件有BMP,TIFF等格式,也有压缩存储的格式。 不规则区域的图像存储和加载比一般矩形区域复杂,首先遇到的是区域边界的描述问题,一般有多边形描述方法和链码(chaincodes)描述方法。 不规则的图像文件的结构。文件头是一个CHAIN-HEAD型的结构体的对象;链码数据就是从图像起始扫描点(xs,ys)开始,以顺时针方向沿区域外边界曲线行走得到的各个节点的数据,其数目由文件头的code_size确定;扫描线的位置数据是若干个CHAIN_SORT型结构体的对象,数目由文件头中的couple_size确定。 图像获取 |