第8章 图像处理和系统
在机器视觉系统中,图像的空间和灰度精度取决于照明、镜头、摄像头和采集卡;而速度则主要取决于摄像头的帧频和采集后图像处理的速度。
在机器视觉系统中,从获得图像数据到最后获得处理结果,通常要经过很多种算法。同时,不同目的的机器视觉系统要求对图像作的运算也大为不同。但对图像处理算法作详尽的介绍已超出本书的范围,在此不作讨论。为了更好地讨论影响硬件和软件系统的处理速度和结构,我们在此就计算过程的先后位置和所针对的目标,将图像处理大致分分类。
8-1 图像处理的类别
机器视觉系统的输入是图像,而最后的输出则是一些符号或者数值,这些符号或数值,有可能表达了物体的特性(正品/次品,坦克/汽车,桌子/椅子、阿拉伯数字等等)和位置(导弹跟踪目标的方位、集成电路引脚的位置等等)。
由图像处理成符号或数值的过程是将图像逐步简化。视觉系统在处理过程中的数据量是非常大的,加上机器视觉系统对处理时间的实时性要求,使得对机器视觉的时间需求是非常苛刻的。下面我们将对各步骤的图像处理算法的处理量、处理速度和完成工具进行一定的讨论。
8-1-1 点运算
有一些运算只对图像的每一个像元点操作,然后产生一幅新图像,二值化就是一个典型的例子。在预先设定了阀值的情况下,二值化的输出仅仅取决于该点的值,因此
式中fA和fB分别为输入和输出图像.这种运算可使用查找表,LUT,在图像数据顺序通过时一次完成,见图8-1的二值化运算。各种灰度校正也是这种运算,所不同的是二值化产生了二值图像,而校正产生的仍为灰度图像。
8-1-2 局部运算
局部运算的输出仍为一幅图像,输出图像的每一个像元值取决于输入图像相对应的像元以及它周围的邻近像元。因此
式中的N代表以[i,j]为中心的局部子图像。这种运算的一个例子见图8-2,这种运算几乎会出现在每一个机器视觉系统中,它的输入图像可以是灰度图像,也可以是二值图像;它可以作平滑、锐化、去噪、细化、边缘检测等等运算,局部像元的取法可以有多种方法,十字形、方形、蜂窝形等等,但使用得最多的是方形,例如使用3×3或5×5或7×7的方形模板,模板中每一位置具有一个核系数,见图8-3,用此模板对每一像元及其相邻像元作卷积,是用得最多的一种运算,其它如中值滤波也是去除噪音的较好算法。
局部算法比上节的点运算的计算量大多了,对3×3模板来说,以卷积为例,每一个像元就可能要作3×3=9次乘法,8次加法,再乘上总像元数,这个计算量是很大的。
阵列处理器或者单指令多数据(SIMD)机器是最适宜作这种处理的。现在的ASIC和FPGA芯片已能实时完成这类运算。
8-1-3 全局性算法
有一些算法是基于整个输入图像而获得的,被称作全局算子
这类算法的一个例子在图8-4中显示。
它的输出可以是一幅图像,也可以是符号输出。直方图、富氏变换、广义Hough变换等等都是全局算法。
全局算法的运算量也很大,是降低视觉系统速度要考虑的主要环节之一。在实际情况下,大多数高级别算法都是全局的,给机器视觉系统的算法和结构设计带来了很大的挑战。
随着集成电路技术的发展,为全局性算法设计出专用的实时芯片已成为可能,例如直方图和富氏变换都可以使用ASIC芯片来实现。
8-1-4物体级算法
在大多数机器视觉的应用领域,都要求计算出图像中物体的特性。为了识别这些物体,大小、平均灰度、周长、重心、形状和其他一些特性都是常用到的,是直接对目标物体计算而获得的;而在缺陷检测中,也是通过对目标物体所作的检测而获得的。这就引出一个非常困难,而在机器视觉系统中又至关重要的问题:目标物体是什么?在哪里?如何找到?
在机器视觉中的很多算法都是围绕图像中的物体在哪里这一目的而展开的。而图像中的物体还会使系统决策左右为难。例如,我们必需使用属于目标物体的所有点来计算该物体的特性,但我们又必需使用这些特性来区别这些点是否属于该物体。所以能否从背景像元中成功分割出前景物体是视觉系统工作成败的关键。为了彻底理解图像的内容,机器视觉必需对目标物体作多种运算操作,以便作出正确的分割。
图8-5演示了对一个物体的边缘进行跟踪以后获取的链码,通过对链码可以直接作形状分类;例如还可以通过链码作富式算子变换,从而突出反映形状的分量等等对物体的分析和识别。从这个例子可以看出物体级算法不象前面所述的三种类型的算法那么有规律,可以按照像元扫描的顺序来进行,便于使用专门芯片来实时完成。链码是沿着物体边缘逐点跟踪而获得的,随着物体的大小和多少,处理量会差别很大。物体目标级算法往往是较复杂的,只适于用处理器来执行,例如PC机的CPU,专用信号处理器DSP等;同时这些算法的运算时间往往不是固定的,而是随着图像内容的复杂程度而变化的。