-
随着自动化生产设备的普及,工业机器人在各行各业的应用也越来越广泛,越来越多的生产线由自动化设备取代人工操作,实现自动化生产。在机器人分拣过程中,机器人不仅可以将不同规格和质量的产品准确地放入指定的托盘中,而且能够通过视觉系统识别出物体的表面缺陷并进行分类。 随着工业4.0时代的到来,传统的基于视觉检测技术已经无法满足现代工业生产的要求,视觉检测技术成为了现代工业生产中必不可少的一部分。在机器视觉系统中,缺陷检测是非常重要的一个环节。在机器视觉系统中,缺陷检测是指在图像采集过程中,自动地将采集到的图像通过一定算法处理后,自动地对目标物体进行提取、分割、识别和跟踪。通过这些算法处理后得到目标物体信息后,自动地识别出目标物体中存在的缺陷并将其标注出来。在工业生产中,缺陷检测主要分为以下几种:
-
一、图像分割
图像分割就是将图像中的各部分从整体中分割出来,使图像成为具有明确边界的有意义的单元。根据分割对象的不同,可将图像分割为若干区域。图像分割是机器视觉系统中的一个基本任务,主要包括形态学、边缘检测、区域生长和阈值分割等方法。形态学算子可以直接产生边界,方便易操作;边缘检测可以获得边缘信息,适合于定位;区域生长和阈值分割方法,则可以在同一张图像上得到目标和背景的差异信息,得到较精确的目标边界。虽然图像分割方法非常多,但是这些方法都有一个共同的特点:对噪声不敏感。为了抑制噪声,人们常采用一系列算法。如:数学形态学中常用的开运算、闭运算等;基于边缘检测的方法,如 Canny算子等;基于阈值选择的方法;基于区域生长的方法等。虽然这些方法取得了很好的效果,但是由于需要手动选择阈值,因此计算量非常大。当前比较流行的图像分割技术有:基于像素灰度信息和边缘检测算法相结合、基于区域生长算法、基于数学形态学与区域生长算法相结合、基于形态学算子与阈值选择算法相结合等。
-
1、基于像素灰度信息和边缘检测算法相结合
这种方法将边缘检测与灰度形态学结合,从而在不需要了解目标背景的情况下,实现对目标的识别。其基本思想是利用数字图像处理中的边缘检测算子对原始图像进行处理,得到与边缘有关的局部特征信息,然后用这些特征信息来实现对目标的识别。Canny算子是目前应用最广泛、效果最好的边缘检测算子。它以像素为单位,使用灰度梯度信息,能够较为准确地检测出边缘信息。Canny算子的优点是能够准确提取边缘信息,并且对于噪声不敏感,缺点是计算量大、耗时长。为了克服 Canny算子的缺点,研究者们提出了各种改进算法。例如: (1) Hough变换(H):H不能提取边缘,但是能够获取目标和背景的差异信息。 (2)双峰法:可以去除噪声,但是会丢失目标和背景之间的信息。 (3)梯度法:对梯度幅值和方向进行分析,能够更好地提取边缘。 (4)多尺度法:能够将多个尺度的信息综合起来考虑问题,从而更加准确地检测到目标边缘信息。
-
2、基于数学形态学与区域生长算法相结合
数学形态学是一种通过变换图像结构元素来进行图像分析的数学工具,可以很好地消除噪声和突出目标。区域生长算法是一种基于区域的分割方法,它是将区域生长方法应用于图像分割的一种有效途径。目前,国内外对基于区域生长算法的应用研究比较多,如:张军红等人将数学形态学与区域生长相结合,利用形态学腐蚀运算对目标进行增强处理,然后对增强后的图像进行区域生长,最后得到分割结果。利用该方法得到的结果具有边缘清晰、无噪声干扰、定位准确等优点。但是该方法也有一些不足:区域生长算法在图像分割过程中需要人为确定种子点,需要手动确定阈值,且只能对简单结构元素进行分割,而对于复杂结构元素无法进行分割。
-
-
二、特征提取
图像的特征提取就是为了将图像的特征数据提取出来,作为后续处理的输入数据。通常情况下,图像特征包括以下几种: (1)灰度特征:灰度信息是机器视觉中最重要的特征之一,在图像处理中有非常广泛的应用。灰度信息是指图像中的像素值随位置变化而产生的变化信息,例如,亮度和对比度等。由于灰度信息能够在不依赖于物体形状、大小、光照条件和背景等因素的情况下进行描述,因此,它也是机器视觉中非常重要的特征。 (2)边缘检测特征:边缘检测是机器视觉中一个非常重要的研究内容。当物体被放置在光学相机拍摄时,它可以将物体表面的信息存储在光学图像传感器上,然后通过边缘检测算法来提取图像中物体表面的信息。常用的边缘检测算法有: Canny边缘检测算法、霍夫变换边缘检测算法、 Hough变换边缘检测算法。 (3)纹理特征:纹理是一种描述图像中不同对象之间相互关系的信息,它包含了物体表面各种不同特征属性,例如,粗糙度、灰度和空间分布等。对于一个特定类型的物体或物体表面来说,它应该具有特定类型的纹理信息。常见的纹理特征有:灰度共生矩阵、直方图和灰度直方图等。 (4)几何特征是指与形状相关或由形状描述的特征。根据这些特征,可以将物体分为不同类型:直线、圆柱体、长方体和长方体等。几何特征通常被用于描述物体表面形状,例如:圆形度、直线度、圆度、长宽比等。 (5)颜色特征:颜色是物体表面颜色信息与其特性之间相互关系的一种描述方式。例如,对于不同颜色的物体,它们具有不同的反射率和透射率等特性。因此,我们可以使用颜色进行缺陷检测。常见的颜色特征有: RGB (红绿蓝)、 CMYK (白)和 YCbCr (黄)等。 (6)纹理特征:纹理是指物体表面特定类型或特征信息。例如,当一个物体是圆时,它可能具有圆和非圆两种不同类型或特征属性。因此,通过使用纹理特征进行缺陷检测可以更准确地识别目标物体是否存在缺陷。
-
三、缺陷识别
缺陷识别是一种自动识别缺陷的方法,其基本思想是,当目标物体存在缺陷时,它会发出一定的信号,当这种信号与其周围的背景信号达到一定比例时,就会发现目标物体存在缺陷。工业机器人在生产过程中,可以通过视觉检测系统自动识别出目标物体中的缺陷并将其标注出来。随着工业生产水平的提高,这种方法也逐渐被应用到其他行业中。例如在半导体行业中,当芯片上存在缺陷时,工人会使用手持设备或机器人将芯片从基板上分离出来。
-
以下是几个常用的OpenCV缺陷检测代码示例:
1. 边缘检测:
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 50, 150)
# 显示结果
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
2. 轮廓检测:
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 50, 150)
# 轮廓检测
contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours, -1, (0, 0, 255), 2)
# 显示结果
cv2.imshow('Contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
3. 直线检测:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 50, 150)
# 直线检测
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
# 绘制直线
for line in lines:
rho, theta = line[0]
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
y1 = int(y0 + 1000 * (a))
x2 = int(x0 - 1000 * (-b))
y2 = int(y0 - 1000 * (a))
cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)
# 显示结果
cv2.imshow('Lines', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这些代码示例可以用于常见的缺陷检测任务,但具体应用需要根据实际情况进行调整和优化。