纹理(Texture)是物体表面固有的特征之一。目前对于纹理尚无正式的定义,但一般认为它是由许多相互连接且常周期性重复的单元构成。与灰度特征不同,纹理不是基于单个像素点的特征,它通常与图像的尺度关系密切,且具有区域性和统计特征。
通常来说,在放大后的图像上可以观察到目标表面的纹理。而且一般来说,纹理特征需要在包含多个像素点的图像区域中进行灰度统计才能获得。纹理特征的这种区域性可使特征匹配过程不会因局部的偏差而失败。因此通过纹理分析,可对物体表面尺寸和形状的变化进行检测,如划痕(Scratch)、裂纹(Crack)和污渍(Stain)等。
纹理分析常用于对具有不规则纹理图案的目标表面进行检测,如瓷砖、纺织品、木材、纸张、塑料或玻璃的表面等。
多数基于纹理分析的机器视觉应用使用纹理分类器(Texture Classifier)进行检测。纹理分类器可通过对无缺陷的标准样本目标进行学习获得,其中包含样本的纹理特征信息。检测时,算法会将被测目标中的纹理特征与纹理分类器中的特征信息进行匹配,并将不能接受的区域标识为缺陷。
通常来说,纹理分析过程会以目标的表面图像为输入,并以二进制大颗粒(Binary Large OBjects,BLOB)的形式输出检测结果。获得缺陷部分的BLOB后,可以进一步使用颗粒分析工具对其属性、尺寸等进行分析。
适用性强的纹理分析检测过程不仅应对于噪声有较强的抵抗能力,还应具有平移不变(Shift-Invariant)、旋转不变(Rotate-Invariant)和尺度不变(Scale-Invariant)的性质。也就是说,相较于纹理分类器中的纹理特征而言,即使被测目标中的纹理特征垂直或水平移动,在平面内旋转或有一定比例的缩放,纹理分析检测过程仍能继续正确地识别它们。一般的纹理检测过程都具有平移不变的性质,且能支持±5°的旋转和±10°的缩放。
若要支持更大范围的旋转不变和尺度不变性,则要通过学习和训练过程,创建包含各个方向和比例纹理特征信息的纹理分类器。此外,还应注意在纹理匹配过程的执行速度与旋转不变和尺度不变性范围之间进行平衡。
由于纹理特征与图像的尺度、区域及灰度统计数据具有密切联系,因此NI Vision使用离散小波变换和统计的方法来提取纹理特征并对其进行分类检测。一般的纹理检测过程如下图所示,主要包括以下步骤:
Nl Vision使用位于LabVIEW的视觉与运动→lmage Processing→Texture函数选板中的VI对上述过程进行封装,如下图所示:
函数说明及使用可参见帮助手册:
其中:
IMAQ Extract Wavelet Bands可执行小波变换从纹理图像中提取各种子带图像;
IMAQ Cooccurrence Matrix能计算图像的共生矩阵和Haralick特征;
IMAQ Extract Texture Feature对子带提取、共生矩阵计算和Haralick特征提取与连接进行了集成,可直接返回计算得到的纹理特征;
IMAQDetect Texture Defect不仅集成了整个纹理特征的提取过程,还集成了按照纹理分类器对纹理进行分类的过程,它能以二值图像输出检测到的纹理缺陷。
通过一个墙壁纹理或缺陷检测的实例,了解纹理分析的实现方法,程序设计思路如下所示:
程序一开始先由IMAQ Read ClassifierFile从分类器文件Texture.clf中读取事先训练好的纹理特征信息,并为后续处理分配内存;
循环结构中的代码,逐一从文件夹中取出被测图像,在用清除无损图层后,由IMAQ Detect Texture Defect根据分类器对纹理进行分类;
Nl Vision分类过程使用范围为0~1000的识别得分(ldentification Score)来判别被测特征与某一类别的相似程度,当纹理与合格的特征信息差别越大时,说明其越接近缺陷;
由此,程序中设置了最小缺陷分类识别得分为200,分类时任何得分等于或大于该阈值的像素均被识别为纹理缺陷。
程序设计如下所示:
通过运行程序,效果如下所示: