LabVIEW 图像增强算法(基础篇—5)
在采集或传递图像的过程中常会受到各种噪声的影响,这会导致其中包含的重要信息很难被读取和识别。例如,不均匀的光照会使图像灰度过于集中;摄像头的数模转换电路所产生的噪声会使图像质量降低;图像显示设备的局限性会造成图像显示颜色减少等。
因此,在对图像进行分析处理之前,必须对图像进行增强,使其更适合人或机器进一步分析处理。
图像增强是图像处理的一个重要分支。它针对给定图像的应用场合,通过各种算法增强图像中的有用信息,有目的地强调图像的整体或局部特性,抑制不感兴趣的区域,扩大图像中不同特征之间的差别,改善图像质量,加强图像判读和识别效果,使图像更能满足分析或机器决策的需要。
图像增强一般并不能增加原图像信息,但是能针对一些成像条件,突出微弱信号,使信息更容易分辨。图像增强算法根据处理过程所在的空间不同,可分为基于空间域的算法和基于频率域(变换域)的算法两大类,如下图所示:
在空域中,图像增强主要通过对不同位置的像素灰度及其变化方向进行操作来实现,而在频域中图像增强则主要通过对空间频率(spatial frequency)进行操作来实现。
除了为图像理解和机器识别、决策作准备外,图像增强自身的应用领域也十分广阔。例如:在军事应用中,可增强红外图像中感兴趣的敌军目标;在医学应用中,可增强 X 射线所拍摄的患者脑部、胸部图像来确定病症的准确位置;在空间应用中,对用太空照相机传回的图像进行增强处理以改善图像的质量;在农业应用中,增强遥感图像以了解农作物的分布;在交通应用中,对大雾天气图像进行增强以加强车牌、路标等重要信息进行识别等。
1、空间域图像增强算法
空间域图像增强算法直接对图像进行点运算或邻域处理。
点运算直接对像素灰度进行点对点映射,常见的点运算包括:灰度变换、直方图匹配(修正)和直方图均衡,以及某些图像的算数或逻辑运算等。图像的邻域增强则以某一像素为中心,综合该像素及其周围某一范围内(邻域)像素的灰度值进行计算,并将计算结果作为中心像素新的灰度值。
根据输出像素是否是输入像素及其邻域内像素的线性组合,可将图像邻域增强方法分为线性和非线性两大类。每一类方法又可分为低通滤波和高通滤波方法。低通滤波算法可以滤除图像中的高频噪声,使其变得更平滑;高通滤波则可以增强图像中目标的轮廓或边缘等高频细节,使其更锐化。
1.1、线性卷积
1.1.1、一维卷积
图像在空间域的增强常通过线性卷积运算来实现,它通过在图像中滑动一个模板,不断根据邻域像素的值计算各个像素的新值来完成计算过程。
根据信号处理理论,线性时不变系统可通过其传递函数来描述。如果忽略线性系统的内部细节,则线性系统在时域可抽象为输入信号 f(t)与其传递函数冲击响应 h(t)的卷积(Convolution),在频域则可抽象为输入信号 F(s)与其传递函数冲击响应 h(s)的乘积。下图显示了基于传递函数的线性系统模型:
卷积运算为积分运算,它反映了函数 h(T)被反转为 h (-T)后,沿 r 轴在另一个函数 f(T)上移动时,与其所重叠部分乘积的积分。下图显示了两个函数进行卷积计算时的反转、平移及相乘和积分过程。
对于离散信号来说,假定有两个长度分别为 m 和 n 的序列 f(i)和 h(j),则它们的积分将输入长度为(m+n-1)的序列,可表示为:
离散信号的卷积过程与连续信号类似,不同之处在于其中一个序列被反转、平移后,与另一序列重叠的对应点相乘后是进行求和运算。下图显示了两个离散序列的卷积计算过程:
如果换个角度,将其中一个序列反转后的值看作是它与另一序列重叠时对应点的权重,则卷积可以被看作是“加权求和”操作。
若再进一步,反转后的序列的值均为归一化后的值,则卷积可以被看作是对一组序列进行“加权平均"操作。若线性时不变系统为二维系统,则可表示为以下连续和离散形式:
连续形式为:
离散形式为:
此外,如果二维线性系统可分离,即 h (x, y) =h1(x)h2 (y),则线性系统可分解为两个一维卷积:
离散形式为:
这意味着在进行二维卷积计算时,可以将其分解为连续的两次一维卷积计算。在工程实践中,这种分解往往会极大地降低程序算法的计算量,提高计算速度。
1.1.2、二维卷积
二维连续信号的卷积计算过程与一维卷积逻辑上类似。
计算时可以先将其中一个信号 h(u,v)沿其原点旋转 180°,然后以原点为中心沿 u 轴和 v 轴平移该信号(u 轴平移 x,v 轴平移 y)再将两个信号重叠部分相乘并积分,即得到原点处的输出。若信号为二维离散信号,则可以先将其中一个离散点阵序列 h(m,n)沿其中心点旋转 180°,然后以中心点沿另一离散点阵序列 f(m,n)的横向和纵向滑动,每到一个位置,就把两个序列重叠的对应元素(中心点的邻域)相乘并且求和,即可得到该点的卷积。
若将离散二维信号 f (m,n)看作是待处理的数字图像,并使 h(m,n)点阵沿其中心对称(即旋转 180°前后结果相同),就可以通过直接在数字图像 f(m,n)中滑动 h(m,n)完成图像的卷积运算。此时,被旋转 180°后的 h(-m,-n)点阵或沿中心对称的离散点阵 h(m,n)被称为模板或卷积核(converlution kernel)。
图像卷积计算属于一种邻域处理方法。理论上来说,卷积核可以为任意尺寸,但是为了处理方便,它实际上常被设计为 3×3、5×5 或 7×7 等方形阵列。卷积核的类型决定了卷积运算对图像中的像素如何进行变换,卷积核中的元素值(权重)定义了它所覆盖的像素对中心像素的影响。在计算时,将卷积核由图像的左上角到右下角逐点平滑移动,每次滑动至一个新像素,都将卷积核中的每一因子作为权重值(绝对值越大,对中心点的影响越大),与它所覆盖的图像范围内的像素做加权求和,得到的结果作为它所覆盖的图像部分中心点的像素值。
下图显示了使用一个大小为 3×3 的卷积核对图像进行卷积运算时的过程。卷积核沿着图像左上角逐行、逐列滑动至右下角最后一个像素点。对于每次移动,卷积核中的 9 个元素 P(x,y)都会和它覆盖的图像中对应的像素 K(x,y)相乘并求和,得到的结果∑K (x, y)·P (x,y)将作为卷积核中心点在图像中所覆盖的像素 P(x,y)的新值。当卷积核沿着所有像素滑动,并均完成前述计算后,图像的卷积计算即完成。
在机器视觉和图像处理系统开发过程中,卷积运算常用于对图像在空间域进行增强。具体是滤除图像中的噪声还是增强目标的轮廓或边缘等高频细节,由所选择的卷积核决定。
1.2、领域增强
图像的邻域增强,就是在空间域对其进行高通或低通滤波,以消除其中的噪声,锐化图像的轮廓,沿某一方向锐化目标的边缘等。
图像的空间域滤波直接根据像素及其周围邻域内的像素值,通过某种计算或变换得到新的像素值来实现滤波功能。如果输出像素是输入像素及其邻域像素的线性组合,则称为线性滤波,否则称为非线性滤波(中值滤波、边缘保持滤波等)。例如,基于卷积的图像邻域加权求和滤波就是一种空间域的线性滤波方法,而中值滤波等非加权计算形式的滤波则为非线性滤波。
一般来说,线性平滑滤波对去除各种噪声(如高斯噪声)较为有效。但是当信号频谱与噪声频谱混叠,或者当信号中含有非叠加性噪声时(如由系统非线性引起的噪声或非高斯噪声等),线性滤波在滤除噪声时,总会以某种方式模糊图像中的边缘和细节,进而降低图像中线性特征的可识别性。非线性滤波器常基于某种非线性映射关系,把某一特定的噪声近似地映射为零而保留信号的重要特征,因而其在一定程度上能克服线性滤波器的不足之处。
NI Vision 为图像的邻域增强提供了众多滤波函数,它们位于 LabVIEW 的 Vision and Motion→Image Processing→Filters 图像空间域滤波函数选板中。使用这些函数可以对图像进行线性或非线性高通、低通滤波,实现锐化图像中目标边缘、轮廓和细节或对其进行平滑降噪的功能。位置如下所示:
函数说明及使用可参见帮助手册:
1.2.1、线性滤波
机器视觉系统开发过程中,常用的基于卷积计算的线性滤波方法有线性梯度算子(Linear Gradient)、拉普拉斯算子(Laplacian)、平滑滤波(Smoothing)和高斯算子(Gaussian)4 种。其中,前两种方法用于锐化图像中灰度变化较快的高频边缘或纹理细节;后两种方法则用于滤除高频噪声和细节,使图像更平滑。下表对常用的线性滤波方法进行了汇总:
邻域增强中的线性滤波多基于卷积运算,卷积核的尺寸限定了处理时的邻域大小,卷积核中的元素值设定了各邻域像素对中心像素影响的权重值,其绝对值越大,对中心像素的影响越大。如果卷积核中的因子有正有负,则滤波过程相当于邻域像素求权重差,其效果相当高通滤波;而如果卷积核中只有正因子,那么滤波过程相当相当于邻域像素求权重和,其效果相当低通滤波。线性梯度、Laplacian 算子属于前一类,而高斯和平滑滤波属于后者。
Nl Vision 使用 IMAQ Convolute 和 IMAQ GetKernel 或 IMAQ BuildKernel 配合,在空间域对图像进行线性滤波。
IMAQ Convolute 可使用由 Kernel 参数指定的卷积核对图像进行卷积运算,而 IMAQ GetKernel 和 IMAQ BuildKernel 则用于获取 Nl Vision 预定义的卷积核,或由字符串构建卷积核,以传递给 IMAQ Convolute 的 Kernel 参数,如下图所示:
IMAQ BuildKernel 搜索由逗号或分号分隔的字符串(各行由换行符分隔),将其中的数字转换为卷积核;IMAQ GetKernel 通过卷积核的编码(Kernel Code)来索引 NIVision 预定义的卷积核。卷积核的编码由 4 位数字构成,其中千位代表卷积核的分类码(Kernel family),百位代表卷积核的尺寸(Kernel Size),个位和十位共同代表卷积核的编号(Kernel Number)。例如,大小为 3×3 的梯度算子中,第 14 个算子编码为 1314。
Nl Vision 共预定义了梯度、拉普拉斯、平滑和高斯 4 大类卷积核,不同卷积核的大小、作用各不相同,且都能通过卷积核的类别、尺寸及编号进行索引。
1.2.2、非线性滤波
非线性滤波方法也可分为进行边缘检测的高通滤波和去除图像中杂散点的低通滤波两大类。
常用的非线性边缘检测(高通)方法有非线性梯度(Nonlinear Gradient)、Roberts、差值(Differentiation) 、Sobel、Prewitt、Sigma 和 Canny 7 种。非线性低通滤波方法则有中值(Median)滤波、N 阶滤波器、低通(Lowpass)滤波 3 种。下表对常用的非线性滤波方法进行了汇总:
与线性滤波方法类似,空间域的非线性滤波方法也常使用滤波算子,基于像素的邻域进行计算,但是其计算函数往往并非线性函数。若用 P (x,y)格式表坐标为(x,y)的像素值,则可通过像素灰度的非线性函数来表示各种非线性滤波算法。
非线性梯度、Roberts 和差值滤波过程均基于像素左上方 2×2 的邻域进行。非线性梯度滤波对该邻域内的像素两两沿垂直方向求其差值的绝对值,并取其中较大者作为新像素值。Roberts 滤波过程与非线性梯度滤波计算过程类似,但它是沿对角线方向,对像素左上方向 2×2 邻域内的像素两两求差值的绝对值,并取其中较大者作为新元素值。差值滤波过程则对像素左上方向 2×2 邻域内的像素,沿各个方向两两求差值的绝对值,并取其中较大者作为新元素值。
通过使用 IMAQ Convolute 对图像进行平滑滤波、IMAQ EdgeDetection 对图像进行非线性高通滤波(包括非线性梯度、Roberts、差值、Sobel、Prewitt 滤波和下面将要讲到的 Sigma 滤波)、IMAQ LowPass 和 IMAQ NthOrder 实现图像的非线性低通滤波、IMAQ CannyEdgeDetection 实现 Canny 算法的实例程序了解线性滤波、非线性滤波和 Canny 算法的使用方法,由于这是一个程序中集成了多个图像处理功能,分别讲讲各个功能设计思路。
线性滤波功能模块设计思路如下所示:
程序一开始先为图像处理分配内存,并将图像 fig.tif 读入内存缓冲区,然后进入 While 循环;
While 循环首次执行时,将比较用户所选择的滤波方式 Filter 及各图像增强 VI 的参数 Kernel Size、Kernel#、Size & Tolerance 及 Size & Order 是否与 Parameter 簇常量中的默认值不同,若有变化,程序即进入包含各种滤波 Vl 的分支;
当从 Filter 控件中选择 Smooth 滤波方式时,分支结构中的代码将调用 IMAQ GetKernel,根据输入参数获取 NIVision 预定义的卷积核,并传递给 IMAQ Convolute 对图像进行卷积运算;
当循环继续执行时,程序将比较用户的输入与上次循环执行时是否有变化,若任何输入发生变化,程序都会再次进入包含滤波代码的分支;
当用户单击 STOP 按钮时,程序将退出循环释放缓冲区,结束程序执行;
实例中,用户选择了对图像进行平滑滤波,所选用的卷积核大小为 5×5,编号为 #0。
非线性高通滤波功能模块设计思路如下所示:
只需通过它的 Method 参数选择所需的滤波方式即可。程序结构与线性滤波功能代码结构相同,只是从树形列表控件中选择了 Differentiation 滤波方式,从而代码也相应执行非线性差值高通滤波分支。由程序的运行结果可以看出,滤波后的图像边缘沿多个方向被增强。
非线性低通滤波功能模块设计思路如下所示:
程序中显示了基于 3×3 邻域对图像进行 N 阶非线性低通滤波的实例;
由于 N 取 4,恰好为邻域内像素排序后中间值的索引,因此相当于对图像进行中值滤波;
由程序的运行效果可以看出,原图像中的椒盐噪声几乎均被滤除;
还使用 IMAQ LowPass 对图像滤波,以及使用 IMAQ NthOrder 取 N=1 和 N=7 时对图像滤波的结果。可以看出,当 N 阶滤波器的阶值小于 4 时,暗区域被膨胀,亮区域被腐蚀,而阶值大于 4 时则恰好相反。
Canny 算法功能模块设计思路如下所示:
Canny 算法采用高、低双阈值法减少假边缘点的数量;
若某一像素位置的值超过高阈值,该像素被保留为边缘点;
若小于低阈值,则被去除;若在两个阈值之间,则仅当像素与一个高于高阈值的像素连接时才被保留;
Canny 算法推荐高、低阈值的比例在 2:1 到 3:1 之间。可以较为准确、有效地确定图像的边缘。
程序实现如下所示:
程序效果如下所示:
程序下载请参见:LabVIEW线性滤波算法_labview滤波算法-其它文档类资源-CSDN下载
2、频率域图像增强算法
2.1、傅里叶变换算法
与空域滤波的工作方式不同,频率滤波器并不直接对图像像素数据进行操作,而是先通过快速傅里叶变换将图像转换至频率域,经滤波处理后再由傅里叶逆变换(InverseFFT)转换回空域,以达到图像增强的目的,如下图所示:
相对于空域滤波来说,频域滤波有以下两点主要优势:1、空域在处理某问题时比较困难,甚至几乎难以处理;2、将图像处理问题从空域转换到频率域上处理时,可以使用一系列成熟的数字信号处理方法和工具集。
Nl Vision 为傅里叶变换以及图像频域计算提供了现成的函数,它们位于 LabVIEW 的 Vision and Motion→lmage Processing→Frequency Domain 函数选板中,如下图所示:
函数的说明和使用可参见帮助文档:
通过对一幅图像进行 FFT 的实例,了解傅里叶变换的使用方法,程序设计思路如下所示:
程序一开始先将图像读入内存,并使用 IMAQ Cast lmage 将其转换为复图像;
函数 IMAQ FFT 对复图像进行 FFT 后,其输出被连接到图像显示控件进行显示;
IMAQ ComplexPlaneTolmage 用于提取复图像的实部、虚部、幅度或相位,并以 8 位、16 位或 32 位浮点数图像格式表示;
在本例中,在它从 FFT 的变换结果中提取出幅度数据并显示在控件 MagF 中后,程序将释放所有缓冲区并退出。
程序设计如下所示:
效果如下所示:
对比程序运行结果可以发现,使用图像显示控件直接显示复数图像与提取出幅度谱后再显示的效果完全不同。这是因为 Nl Vision 在内存中使用标准方式组织 FFT 的计算结果(复数)。这意味着从 FFT 计算得到的幅度数据中,高频部分将分布在图像的四角,低频区域在图像的中心。但是,当使用图像显示控件直接显示复数图时,Nl Vision 会自动计算图像的幅度谱,并反转高频和低频数据,以中心对称模式显示。即高频部分居中,低频部分分布在四角。不仅如此,为了增强幅度的显示效果,NI Vision 还会为计算得到的幅度数据乘以一个与图像长 M 和宽 N 相关的系数 m,其计算公式如下:
程序下载请参见:LabVIEW实现傅里叶变换_labview傅立叶变换用图像显示出来-其它文档类资源-CSDN下载
2.2、图像频域滤波
在图像处理中,图像的锐化与平滑处理可通过空间滤波或频域滤波来完成。从数学角度看,空间滤波是将信号与滤波算子进行卷积等运算的结果,具有方法直观、操作简便等优点。但当要处理的图像数据较大时,若没有发现比较高效的算法,就会有计算量大、计算时间长以及实时性差等缺点。
在频域对图像进行分析、增强时,不仅无须求解较难的微分方程,而且利用频谱图可直观地揭示系统性能,并可方便地选择有效抑制噪声的滤波器。此外,在频率域上进行图像处理时,还可以使用数字信号处理的一系列成熟方法和工具快速解决问题。
下表对常见的频域低通滤波器的特点进行了汇总和比较,可以看出:
理想低通滤波器处理的图像极为模糊,且含有很严重的振铃现象,但其对噪声的平滑效果好;
梯形低通滤波器的振铃现象不像理想滤波器那样严重;
巴特沃斯低通滤波器与指数低通滤波器相比,图像模糊程度低,但对噪声的平滑效果也差些;
高斯低通滤波器能在有效抑制噪声的情况下尽可能减小图像的模糊程度,因此它相对其他滤波器有较为广泛的应用。
比较下表所列出的几个高通滤波器可以发现:
理想高通滤波器处理的图像边缘抖动现象严重,且同时保留了边缘和噪声;
梯形高通滤波器会产生轻微抖动现象,但因计算简单经常被使用;
巴特沃斯滤波器锐化效果较好,边缘抖动不明显,但计算复杂;
指数高通滤波器比巴特沃斯滤波器效果差些,无边缘抖动现象;
高斯高通滤波器能在图像边缘抖动和锐化效果之间获得较好的平衡。
带通滤波器可以使某一下限和上限截止频率范围内的信号通过,但衰减低于下限截止频率和高于上限截止频率的信号。带阻滤波器则可以衰减某一下限和上限截止频率范围内的信号,但允许低于下限截止频率和高于上限截止频率的信号通过。下图显示了理想带通和带阻滤波器的时频响应:
在实际中,带阻滤波器常用于滤除图像中的周期性噪声。周期性噪声在图像的频谱中常以对称的形式出现,可使用带阻滤波器滤除频率在环形区域内的信号,以消除噪声。可以看出,带阻滤波器在去除周期噪声时还会滤除噪声以外的成分,使图像中的有用信息减少。如下图所示:
在 LabVIEW 中使用 NI Vision 进行图像滤波的方法可以归纳为 4 类:
IMAQ ComplexTruncate 和 IMAQ Mask 可以使图像中指定比例的频率范围通过或衰减,使用它们可以对图像进行理想低通、理想高通、理想带通和理想带阻滤波;
IMAQComplexAttenuate 可对图像进行三角形高通或低通滤波;
IMAQ Mask 除了可实现理想低通、理想高通、理想带通和理想带阻滤波器的功能外,还能实现理想陷波滤波器;
公式法则可以实现任何形式的频域滤波器。
如下表所示:
NI Vision 为频域滤波操作提供了专门函数,它们位于 LabVIEW 的视觉与运动→lmage Processing→Frequency Domain 函数选板中,如下图所示:
函数的说明和使用可参见帮助文档:
通过一个图像滤波示例,了解各类型滤波方法的使用方法,程序设计思路如下所示:
程序先将图像读入内存并对其进行傅里叶变换;
随后使用 IMAQ ComplexTruncate 生成的理想低通滤波器对图像进行滤波,其中参数 Truncation Frequency%将低通滤波的截止频率设置为图像频率范围的 5%处;
滤波完成后对图像进行傅里叶反变换,获得滤波后的图像;
程序在为傅里叶反变换分配缓冲区时指定图像类型为 16 位灰度图,这样 NI Vision 会自动对傅里叶反变换的结果进行转换;
观察程序运行结果,可以发现,使用理想低通滤波器对图像进行滤波时会出现明显的振铃现象。
程序设计如下所示:
将 IMAQ ComplexTruncate 实现的理想低通和高通滤波器进行组合,可以实现理想带通或带阻滤波器。具体来说,当用其实现的低通和高通滤波器连续对某图像进行滤波,且低通滤波器的截止频率大于高通滤波器的截止频率时,这种类似串联的连续滤波结果等效于带通滤波;当用其实现的低通和高通滤波器分别对原图像进行滤波后将二者结果叠加,且低通滤波器的截止频率小于高通滤波器的截止频率时,这种类似并联的滤波叠加效果等效于带阻滤波。
程序效果如下所示:
程序下载请参见:LabVIEW图像频域滤波算法-其它文档类资源-CSDN下载
图像增强一般并不能增加原图像信息,但是能突出微弱信号,使信息更容易分辨。图像增强不仅可以在空域进行,还能在频率域进行。在频域处理图像时,需要先通过傅里叶变换将图像转换至频域,经滤波处理后再由傅里叶逆变换转换回空域,以实现图像增强。
版权声明: 本文为 InfoQ 作者【不脱发的程序猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/7fa7d30407030a3dfa7aacef8】。文章转载请联系作者。
评论