LabVIEW图像灰度分析与变换(基础篇—4)
作者:互联网
1、图像灰度分析
图像灰度分析是图像分析中最基本的内容,它使用各种图像灰度分析工具,提取图像或ROI区域内的灰度特征信息。基于对图像灰度的分析测量,可以实现最基本的机器视觉检测系统,如目标存在性检测系统等。
直方图(histogram)是最基本的图像灰度分析工具。使用它不仅可以判断图像中是否包含可从背景中分割出的区域、图像的饱和度和对比度是否适合检测任务,还能确定应该如何对图像采集系统进行调整以获得较高质量的图像。
除直方图外,线灰度分布曲线(line profile)、图像线灰度均值(linear averages)ROl边界灰度曲线、图像形心(centroid,又称几何中心)和图像质心(central of mass)、灰度定量描述(grayscale quantify)以及图像结构相似度(structuresimilarity index)分析也是较为有效的图像灰度分析工具。
1.1、直方图分析
图像直方图是最基本的图像分析工具。由于其具有简单易用等特点,因此在图像分割、图像灰度变换等处理过程中发挥着重要作用。图像直方图常见的作用包括:判断图像中是否包含可以清晰地从背景中分割出的区域,分析图像的亮度和对比度是否满足机器视觉系统的检测要求,以及确定如何对图像采集系统进行调整改进。
图像的直方图包含了丰富的图像信息,是图像最基本的统计特征,描述了图像的灰度级内容,反映了图像的灰度分布情况。图像的灰度直方图以图表的方式显示了图像中每个灰度级与其所对应像素数量的关系,其中像素数量可被看作灰度级的函数。图表的横坐标为灰度级,纵坐标是各个灰度级在图像中出现的频率。直方图是概率密度函数,从概率论的角度来看灰度出现的频率可被看作其出现的概率。
对于数字图像来说,常见的直方图类型有线性直方图(linear histogram)和累计直方图(cumulative histogram)。两种情况下,直方图的横轴均为灰度级,线性直方图的纵轴为灰度级对应的像素数,累计直方图的纵轴则表示所有小于或等于灰度级k的像素数量之和。若以离散函数形式表示两种类型的灰度直方图,则线性直方图可表示为:
累计直方图则可表示为:
其中:
- H(k)和n,表示灰度级对应的像素数量;
- k表示灰度级;
- max表示图像数据类型可表示的最大值,如当图像类型为U8时,max=255。
下图分别显示了线性直方图和累计直方图的例子。其中线性直方图说明图像主要由3个灰度不同的部分构成,两个灰度较低的部分比较接近,而第三个灰度较高的部分与前两个灰度较低的部分区别明显。累计直方图则说明两个灰度较低的部分大约占整个图像的80%,而灰度较高的部分约占图像的20%。
机器视觉系统的光源对于成像质量至关重要。当视场中光线过暗时,图像传感器成像过程会出现曝光不足的情况;而若光线太强,则会导致曝光过度。无论曝光不足还是曝光过度,都会导致所采集的图像中检测目标的特征信息丢失。使用直方图可以直观地判断图像的亮度是否满足系统检测要求。由于曝光不足的图像中包含大量灰度值较低的像素,因此常会在直方图的左边出现峰值;相反,曝光过度的图像常包含大量灰度值较高的像素,峰值会出现在直方图的右端。这两种情况如下图所示:
1.1.1、灰度图像直方图分析
Nl Vision为图像直方图的操作提供了易用的IMAQ Histograph和IMAQ Histogram,它们位于LabVIEW的视觉与运动→lmage Processing→Analysis图像分析函数选板中,如下图所示:
函数的说明和使用可参见帮助文档:
通过一个案例了解IMAQ Histograph和IMAQ Histogram计算图像直方图的使用方法和区别,设计思路如下所示:
- 程序在将图像读入内存后即可直接使用VI计算其直方图,其中参数#Classes指定了要将图像中的像素分为多少级别;
- 默认情况下,8位灰度图像的像素将被分为256级,也就是说每个灰度级都会被作为单个类来对待。NI建议采用2的整数次幂来对像素进行分级。参数Interval Range为直方图计算时的最大和最小边界值,只有那些落在最大值和最小值所约定的范围内的像素才会参与直方图的计算;
- 如果指定的像素级数超出了Interval Range中最大值和最小值约定的范围,则最终计算所得到的像素灰度级数会与指定的灰度级数不同。
- IMAQ Histograph返回的Histograph参数是以LabVIEW Graph数据格式组织的灰度直方图数据,它可以直接连接到Graph控件显示直方图曲线。Mean Value参数会返回参与直方图计算的像素灰度平均值。Standard Deviation参数返回直方图灰度的标准差,其值越大,则说明参与直方图计算的灰度级分布越分散,对这个图像来说对比度就越强。同时显示了经过计算得到Iron.tif图像的直方图。
程序设计如下所示:
效果如下所示:
项目资源下载请参见:https://download.csdn.net/download/m0_38106923/18997435
1.1.2、彩色图像直方图分析
Nl Vision提供了3个进行彩色图像直方图的计算操作函数IMAQ ColorHistogram、IMAQ ColorHistograph和IMAQ ColorEqualize,它们位于LabVIEW的视觉与运动→Image Processing→Color Processing函数选板中。这3个函数的作用与灰度图像的直方图函数IMAQ Histogram、IMAQ Histograph和IMAQ Equalize类似,只是它们可作用于彩色图像的3个不同分量,如下所示:
函数的说明和使用可参见帮助文档:
这三个函数功能说明如下所示:
- IMAQ ColorHistogram可适用于RGB、HSL、HSV、HSI、CIE Lab和CIE XYZ 6种色彩空间;
- 虽然lMAQ ColorHistograph仅可支持RGB、HSL、HSV和HSI4种色彩空间,但是它返回的数据却能直接与LabVIEW的Graph数据格式兼容,直接在前面板上绘制曲线;
- IMAQ ColorEqualize可对彩色图像的3个分量进行直方图匹配或均衡操作。
通过一个案例来了解彩色图像直方图的实现方法(IMAQ ColorHistograp函数为例),程序设计思路如下所示:
- 程序先将RGB-U32格式彩色图像pepper.png读入内存,然后使用IMAQ Castlmage将其转换为HSL-U32格式;
- IMAQ ColorHistograph在程序中的作用是计算HSL彩色图像各个图层的直方图数据,并以LabVIEW Graph的格式返回这些数据,以方便显示。
程序设计如下所示:
程序效果如下所示:
项目资源下载请参见:https://download.csdn.net/download/m0_38106923/18998403
1.2、线灰度曲线分析
线灰度曲线分析(line profile)绘制了沿图像中某条线段的像素灰度变化。它的横轴为线段上的像素点位置索引,纵轴为各点的灰度。线灰度分布曲线可用于检测图像中相邻部分的边界,定量表示灰度变化并可检测图像中是否存在某种特征。在线灰度曲线中,波峰和波谷代表图像中某一区域灰度沿着所选线段的增减,波峰和波谷的宽度和幅度分别代表区域在图像中的尺寸和亮度。例如,若图像中包含某一亮度较高的区域,则沿着穿过它的线段所绘制的灰度分布曲线中将出现一个波峰,该区域相对于背景的亮度越高,则波峰就越陡峭。注意,图像中的噪声通常会导致一系列较窄的尖峰。
Nl Vision中IMAQ LineProfile可实现线灰度曲线分析操作,它位于LabVIEW的视觉与运动→lmage Processing→Analysis图像分析函数选板中(位置参照文章:1.1.1部分),函数的说明和使用可参见帮助文档:
通过统计生产线上某种针形产品数量的例子理解线灰度曲线分析的应用方法,程序设计思路如下所示:
- 程序将图像读入内存后,先通过IMAQ GetlmageSize获取图像宽度;
- 然后用IMAQ Overlay Line沿着图像中产品上部放置一条和图像等宽度的线段无损图层;
- 该线段所覆盖的像素正是IMAQ Line Profile用于绘制线灰度曲线的线段。
程序设计如下所示:
在线灰度曲线中,每个上升或下降沿都代表灰度由暗到亮或由亮到暗的剧烈变化,而每个针形部件刚好对应一个"脉冲”。因此,只要统计“脉冲"的个数,即可得知图像中包含的要检测部件的数量,程序效果如下所示:
项目资源下载请参见:https://download.csdn.net/download/m0_38106923/18999559
1.3、图像线灰度均值分析
图像线灰度均值分析(linear averages)可以计算整个图像或指定矩形区域内像素的4种类型线灰度均值,包括沿X轴方向上每列像素的灰度线性平均值(XAxis Average)、沿Y轴方向上每行像素的灰度线性平均(YAxis Average)、沿左下到右上角对角线方向,垂直于该对角线的像素灰度均值(X+YAxisAverage),以及沿左上角到右下角对角线方向上垂直于该对角线的像素灰度均值(×-YAxis Average)。下图显示了计算4种类型的图像线灰度均值的逻辑示意图,其中虚线代表像素灰度均值,实线表示参与计算的像素。
Nl Vision中IMAQ LinearAverages可实现图像线灰度均值分析操作,它位于LabVIEW的视觉与运动→lmage Processing→Analysis图像分析函数选板中(位置参照文章:1.1.1部分),函数的说明和使用可参见帮助文档:
通过使用图像线灰度均值和ROI边界灰度曲线检查液态药品灌装质量的例子理解图像线灰度均值分析的应用方法,程序设计思路如下所示:
- 程序先将采集到的图像读入内存;
- 然后使用IMAQ LinearAverage计算指定矩形区域内沿坐标X方向上每列像素的灰度线性平均值XAxis Average;
- 为了检查药品灌装质量是否达标,程序所指定的矩形区域正好覆盖灌装达标时的液位;
- 为了直观地让用户看到所指定ROI区域的位置,程序使用IMAQ Overlay Rectangle在图像中标记出矩形区域;
- IMAQ ROIProfile用于返回指定的矩形ROI区域的灰度曲线ROI Profile。
程序设计如下所示:
观察程序运行后返回的曲线XAxis Average和ROlProfile,可以发现对于灌装正常的药瓶,沿着X轴方向上每列像素的灰度线性平均值均在160附近;而未灌满的药瓶,其沿着X轴方向上每列像素的灰度线性平均值则在灰度范围最大值255附近,这是由于未灌满的药瓶在矩形ROI范围内白色区域所占比例要比正常药瓶大。矩形ROI区域的边界灰度曲线和线灰度分布曲线类似,它从矩形ROI的左上角开始,按照顺时针方向绘制边界所覆盖的各像素灰度。由图中ROI边界灰度曲线可以看出,矩形上边框对应的灰度曲线变化类似于脉冲,这是因为白色药瓶与黑色背景之间交替变化而形成的。矩形下边框对应的灰度曲线变化则稍有不同,其中一个未正常灌装的药瓶灰度"脉冲"值明显高于其他几个正常灌装的药瓶。程序效果如下所示:
项目资源下载请参见:https://download.csdn.net/download/m0_38106923/19000935
1.4、图像形心和质心分析
图像形心(centroid)又称为图像的几何中心,它是指几何区域内所有像素坐标值在各方向上的平均。若区域的像素数量为W×H(其中W为宽度,H为高度),则几何中心可以用以下公式计算:
图像质心(center of mass)与图像形心是两个完全不同的概念。质心(质量中心的简称)是一个假想点,它是组成目标物的所有质点质量分布的平均位置。若假定目标物由n个质点组成,它们的质量分别是m, m2,...,mn,各质点相对于某一固定点О(特殊情况下为坐标原点〉的矢径分别为r1,r2,...,rn,质心到O的矢径为rmass,则有:
换句话说,组成目标物的所有质点质量与质点到固定点的矢径乘积之和,等于质心矢径与所有质点质量和的乘积。由上式可得到质点的矢径:
质心仅与各质点的质量大小和分布的相对位置有关。选择的坐标系不同,质心坐标可能会不同,但相对于各质点的位置与坐标系的选择无关。
对于大小为W×H的数字图像来说,可将各像素灰度值p,视为质点的质量,则图像质心位置可通过以下计算x、y两个方向上质心坐标的公式得到:
其中xi、yi为图像中各像素点的坐标。图像的形心与质心相对于图像中各个像素来说有较为明显的特征,它们的位置通常不会随着图像移动、旋转、伸缩以及噪声的影响有大幅度变化。由于基于图像形心和质心的特征相对较为稳定,因此可基于这些特征构建鲁棒性较高的机器视觉系统。此外,在进行颗粒分析时,图像形心或质心也常作为各种测量分析的基点。
Nl Vision中IMAQ Centroid可实现图像线灰度均值分析操作,它位于LabVIEW的视觉与运动→lmage Processing→Analysis图像分析函数选板中(位置参照文章:1.1.1部分),函数的说明和使用可参见帮助文档:
通过使用图像形心和质心计算某种皮肤细胞图像形心的例子理解图像形心和质心的应用方法,程序设计思路如下所示:
- 程序先将采集到的细胞图像读入内存,并由IMAQ Threshold对图像进行二值化处理;
- 经二值化处理后,原图像中位于35~255灰度区间的像素灰度均被置为255;
- 此后IMAQ LowPass将滤除二值图像中的高频噪声;
- IMAQ FillHole用于填充二值化的细胞图像中各个“孔洞”,以获取"实心"的细胞目标图像;
- 此后又用IMAQ Remove Particle去除了图像中各类噪声点;
- 由于IMAQCentroid在计算图像中某个目标的形心时要使用目标的遮罩图像,因此程序先使用IMAQ Label对二值图像进行标记,即将图像中被认为属于同一组的像素(即颗粒)值全部更改为某一固定灰度值,再由IMAQ LabelToROl和IMAQ ROIToMask2将标记的图像转换为ROl和需要的遮罩图像;
- 一旦获得细胞对应的遮罩图像,即可由IMAQCentroid计算得到非规则形状的细胞形心;
- 在程序中,IMAQ OverlayROl和IMAQ OverlayPoints分别在图像中添加了细胞轮廓和细胞形心的无损图层。
程序设计如下所示:
程序效果如下所示:
项目资源下载请参见:https://download.csdn.net/download/m0_38106923/19008331
1.5、图像灰度定量描述分析
图像灰度定量描述分析(grayscale quantify)指对整个图像或图像中某个区域内的像素灰度进行定量计算的过程。包括计算像素灰度均值(mean gray value)、最大值(maxmum gray value)、最小值(minimum gray value)、像素灰度的标准差(standard deviation)以及某个区域的面积(area)等。若图像的大小为H×W,像素用P(i,j)表示,则像素的均值u和标准差o可通过以下公式计算:
Nl Vision中IMAQ Quantify 2可返回图像或其中某一区域的定量描述参数,包括:像素灰度均值、标准差、最大值、最小值以及通过像素数量或用户自定义单位(校准坐标及单位)表示的图像区域面积。它位于LabVIEW的视觉与运动→lmage Processing→Analysis图像分析函数选板中(位置参照文章:1.1.1部分),函数的说明和使用可参见帮助文档:
若要使用IMAQ Quantify2计算图像中某个或多个区域的灰度数据,必须使用标记过的遮罩图像(Labeled lmage Mask)来说明各个区域,每个区域均使用一个数字标记。也就是说,8位的遮罩图像可以最多标记256个区域,16位的遮罩图像可以最多标记65535个区域。
使用IMAQ Quantify2计算时,若已由标记过的遮罩图像在图像中指定了多个区域,则IMAQ Quantify2不仅会通过Global Report簇返回整个图像的灰度定量描述数据,还会通过Region Reports数组返回每个区域(按标记由小到大顺序)的灰度定量描述参数。数组中元素的类型为簇,包含图像中各区域的灰度定量数据。
通过使用IMAQ Quantify2计算矩形ROI区域内灰度定量描述数据的例子理解图像灰度定量描述分析的应用方法,程序设计思路如下所示:
- 程序先为待处理图像和遮罩图像在内存中分配了缓冲区,随后枚举Light Meter目录中的".jpg"图像路径,交由For循环处理;
- 针对目录每一".jpg"图像文件,For循环先将其读入缓冲区,并由IMAQ Clear Overlay清除图像中的无损图层(若有);
- IMAQ Convert Rectangle to ROI可以把矩形(110,25,160,85,0)转换为ROI Descriptor数据类型,IMAQ ROl to Mask进而将矩形ROI转换为图像遮罩,存储在图像缓冲区Mask中;
- IMAQ Label会对生成的遮罩图像进行标记,并将其传递给IMAQ Quantify2用于计算矩形区域内的灰度定量描述数据;
- 为便于观察,For循环还使用IMAQ Overlay ROI在源图中添加了矩形无损图层;
- 为进行比较,For循环还使用IMAQ Histogram和遮罩图像直接计算了矩形ROI区域内的灰度信息。
程序设计如下所示:
观察程序运行结果可发现,IMAQ Quantify2和IMAQ Histogram均可计算得到某些相同的灰度数据,但前者需要以标记过的遮罩图像作为输入。
灰度定量描述工具常用于基于灰度的目标存在性检查和缺陷检测。通常情况下,先基于观测目标上某一相对固定的特征确定单个或多个监测区域。随后,对区域内的像素灰度进行统计测量,并通过综合分析灰度测量结果来判断检测目标是否存在或产品是否存在缺陷。例如,若上述例子中矩形ROI区域代表某手机工作时显示屏的亮度,则可以通过设定平均灰度值的阈值范围来检测手机显示屏的亮度范围是否符合要求。
项目资源下载请参见:https://download.csdn.net/download/m0_38106923/19010776
2、图像灰度变换图像灰度变换是图像处理的基本内容之一,它以点对点映射的方式将原图像的像素灰度值变换为新灰度值。由于像素的新灰度值仅由原像素的灰度和灰度变换函数决定,因此图像灰度变换并不会改变像素点之间的空间关系。灰度变换主要用于图像增强,通过它不仅可调整图像的亮度和对比度,还能对图像中的高灰度级或低灰度级进行压缩或扩展,突出图像中的重要信息。
若假定输入图像为SrcA(x,y),输出图像为Dst(x,y),则图像灰度变换可由下式表示。显然,它由灰度变换函数GST决定,并不改变图像内像素点之间的空间关系。
图像灰度变换可以分为线性和非线性两大类。
- 线性变换的灰度变换函数为线性函数,此时运算后输出的灰度级与输入灰度级呈线性关系。为方便起见,将分段线性变换、窗口变换、阈值变换也作为线性变换来讲解。
- 常用的非线性变换包括对数变换、指数变换和幂变换,而幂变换又分为“幂值大于1"和“幂值在0~1之间"的两种情况。
这些灰度变换不仅可以拉伸或压缩图像或其中某一部分的整体灰度,也可以在压缩或拉伸低灰度区间的同时对高灰度区间进行变换。下表对各种变换按其功能进行了分类汇总:
Nl Vision为实现图像灰度变化提供了便捷的VI,它们位于LabVIEW的视觉与运动→lmage Processing→Processing函数选板中,如下图所示:
为提高效率,这些VI先将各种线性和非线性灰度变换函数转换为查找表(Lookup Table,LUT),再以查表的方式对输入图像或其中某一灰度区域进行灰度变换。因此Nl Vision将灰度变换又称为LUT变换。查找表中包含输入图像的像素灰度和根据灰度变换函数计算得到的对应输出灰度值。
以8位灰度图像为例,其查找表可以用包含256个元素的数组来表示,数组元素的索引代表输入像素灰度级,而元素中的值则是根据灰度变换函数计算得到的输出灰度值。为变换后的新元素值。若查找表中未包含某一原图像中的像素值,则保留其值不变。根据IMAQ UserLookup的特点,当要使用诸如分段线性变换等IMAQ MathLookup未定义的灰度变换时,就可以先根据灰度变换函数计算得到自定义的查找表,然后再调用IMAQ UserLookup,用自定义查找表对原图的像素进行灰度映射。
当然,对于分段线性变换的特例:阈值变换,NI Vision提供了IMAQ Threshold和IMAQ MultiThreshold两个VI,其中前一个通过双固定阈值法将阈值区域内的像素置为1或用户自定义的值,其余像素设置为0,而后者则可对多个灰度区域进行阈值化。IMAQ Threshold和IMAQ MultiThreshold提供了一种手动的图像阈值分割方法。Nl Vision还支持其他自动方式的图像阈值分割方法,说明和使用可参见帮助文档:
通过使用IMAQ BCGLookup对图像进行亮度、对比度和高低灰度级压缩的例子理解图像灰度变换的应用方法,程序设计思路如下所示:
程序将检测用户是否更改BCG控件的值,若BCG控件中任何一个元素的值被更改,While循环就立即执行Case分支结构中的IMAQ BCGLookup和IMAQ Histogram,重新调整原图像的亮度和对比度,并对其进行伽马变换。
程序设计如下所示:
程序显示了Brightness=145、Contrast=60和Gamma=1.5时程序的运行结果。可以看出,处理后的图像不仅亮度提高,对比度增强,而且图像的低灰度级被压缩,高灰度级被扩展,效果如下所示:
项目资源下载请参见:https://download.csdn.net/download/m0_38106923/19009876
图像灰度分析和变换是图像分析和处理的基本内容之一。图像灰度分析通过各种图像灰度分析工具提取图像或ROI区域内的灰度特征信息。图像灰度变换以点对点映射的方式将原图像的像素灰度值变换为新灰度值,以实现图像亮度对比度的增强。
标签:灰度级,像素,LabVIEW,直方图,灰度,图像,IMAQ 来源: https://blog.51cto.com/HandsomeManJie/2955644