system: [SYSTEM]

user: 3. 系统设计 3.1. 硬件系统设计 系统的硬件主要由CMOS相机、光源、支架以及计算机组成。 相机负责图像的实时采集，能够将光学信号转化为数字信号 [ 3 ]，根据检测对象大小与工作距离，本系统选取维视图像的MV-EM500M/C型号CMOS相机，分辨率为2592 × 1944，使用GigE数据接口、稳定的千兆以太网进行传输，功率低、分辨率高、传输速度快、成像清晰。如图2所示。 图1. 硬件系统结构图 图2. MV-EM500M型号相机 光源是系统中的重要组成部分 [ 4 ]，直接影响到最终采集到的图像质量，选择合适的光源可以很大程度上减轻图像处理的难度，系统选用胶管圆心、相机光轴同轴环形光源，垂直照射，光照均匀，使轮廓更加清晰。如图3所示。 图3. LED环形光源 按照胶管外径尺寸设计画图并用3D打印机打印了胶管支架，使用白色打印材料，与胶管颜色有较大对比度，减小了外部环境干扰。 3.2. 软件测量系统设计 算法设计采用模块化的思想，在VS2015软件平台下用C++语言和OpenCV图像库开发，使程序结构清晰，各模块均能完成独立的功能，便于后续维护和扩展。工业上要求系统内径测量值与标准值相差小于0.3 mm，平均壁厚与标准壁厚相差小于0.3 mm，最小壁厚与标准壁厚相差小于0.4 mm。根据胶管尺寸测量系统的设计要求，主要包括预处理模块、内外圆检测模块、内圆面积测量模块和壁厚测量模块。算法的模块结构框图如图4所示。本文选取某型号标准规格为外径16 mm、内径8 mm、壁厚4 mm的胶管进行举例分析。 图4. 算法结构流程图 3.2.1. 尺寸标定 程序算法测量的尺寸单位为像素，需转化为国际单位(mm)。这个把像素转化为毫米的比率称为标定比。首先输入一个边长为X mm，面积为X 2 的正方形。现用搭建的该尺寸测量系统测出边长为Q像素，面积为S像素。则其标定比为 k = R Q (1) 最小像素点面积大小为 s = X 2 S (2) 现输入一个边长为9 mm的正方形。测得其边长像素为235，面积总像素值为55，252，则该系统的标定比为0.038298，像素点面积大小为0.001466 mm 2 。 3.3. 预处理 3.3.1. 感兴趣区域提取 相机完成胶管图像采集，如图5(a)所示，感兴趣区域为胶管端面的正面图像，需要将其截取出来。首先通过轮廓检测找出图像的最外围轮廓区域，然后画出此轮廓区域的边界矩形，最后截取矩形区域，即为感兴趣区域，如图5(b)所示，减少计算量，节省时间。 图5. 感兴趣区域提取图像 3.3.2. 滤波处理 胶管端面会存在物理切割产生的纹路，滤波的作用就是消除这些噪声的影响，一个较好的滤波方法应该既能消除图像中的噪声，又不会使图像的边缘轮廓和线条变模糊。滤波处理要求输入图像为灰度图，所以在处理之前，先将图像灰度化。对图片分别用高斯滤波、双边滤波和中值滤波方法进行处理分析。如图6所示。 图6. 滤波处理图像 三种结果观察比较得出，高斯滤波在去除噪声的同时会使图像变得模糊，是边界信息减弱；双边滤波很好地保留了边缘信息，但是会发现边缘存在少量毛刺，不利于后续边缘提取的处理；中值滤波对胶管图像处理更加明显，既能很好的平滑了纹路噪声干扰，又使边缘细节更加突出且光滑 [ 5 ]，因此本文选用高斯滤波。 3.3.3. Canny算子边缘提取 在对胶管进行尺寸测量时，胶管的边缘轮廓信息是十分重要的，是进行圆检测的基础。Canny算子边缘提取是二阶算子，引入了非最大抑制概念，不易受噪声干扰，边缘定义为在梯度方向具有最大梯度值的点 [ 6 ]，只保留了图像中变化最锐利的部分。采用双阈值检测，很好的区分了边缘像素，处理结果如图7所示。Canny算法能够检测出图像较细的边缘部分，有效地减少了截面切割带来的纹路痕迹干扰。 图7. Canny边缘提取图像 3.4. 内、外圆检测 内外圆检测是保证胶管尺寸精度的重要环节。Hough变换进行圆检测，计算量过大、检测同心圆精度不高 [ 7 ]。待扫描图像属于圆类图形，是有规律可循的曲线，可以在不同区域根据像素梯度方向设计不同的扫描方法。本文基于八邻域扫描法和区域生长算法提出改进的区域生长法，完成内外圆检测。处理步骤如下： 1) 首先建立两个结构体(分别记为Out、In，都含有两个变量x和y)，用于存放边缘像素坐标信息。 2) 本文借助像素梯度方向分布分别将内外圆分成六个片段，如图8所示，片段以行为参照进行分割，中心点及各个节点的横坐标如表1所示。 图8. 边缘分段及节点位置 Table 1 The abscissa position of the nod Node Abscissa position O Row_center A/C Row_center − (1/6) × height B/D Row_center + (1/6) × height a/c Row_center − (1/9) × height b/d Row_center + (1/9) × height 表1. 节点横坐标位置 3) 对外圆进行检测，如图9所示，找到起点P 1 和点E，白色正方形P 1 为起点，蓝色区域为待扫描区域，圆上每个片段的像素梯度方向都不同，在P 1 -A、B-E、E-D、C-P 1 段启动横向优先搜索，在A-B、D-C段启动纵向优先搜索，每段分别按照方框内数字的大小顺序进行扫描，扫描到与P1同像素的点停止此次扫描，再以它为起点开始新一轮扫描，并将P 1 灰度值更新为80，如图10(a)所示，这样既不会出现扫描重复的现象，又能保证扫描到外圆的所有像素点。 图9. 扫描顺序 图10. 内外圆边缘检测图 5) 对内圆进行检测，从图像中心位置点O向上搜索，扫到第一个像素值为255的点即为起点P 2 ；同理，找到点e的位置。内圆的检测方法及顺序和外圆原理相同。最后作内外圆像素为255的掩膜，让掩膜与像素值全为0且与图10(a)大小相同的新图像作“与运算”，效果更加清晰，结果如图10(b)所示。 3.5. 胶管内径测量 在工业生产中，胶管因其材料的特殊性质，受到挤压容易变形，挤压程度越高，内径测量值产生的误差就越大，在质量检验中容易出现误检。针对这些问题，本文提出一种通过测量其内圆面积来判断胶管内径是否符合检验标准的方法，其中内圆面积允许偏差如式(3)所示： S = ( φ + E 2 ) 2 × π − ( φ 2 ) 2 × π (3) 式中S代表面积允许偏差，E代表内径测量允许偏差， φ 代表胶管标准内径值。系统指标要求E小于0.3 mm， φ 的值为8 mm，由式(3)得S小于3.840597 mm 2 。面积测量需要扫描出内圆所有像素点，本文将分成三部分进行扫描，具体方法如下： 1) 以曲线 a b ⌢ 上的所有像素点为起点，向右进行横向搜索，扫描到灰度值为80的点停止扫描，为了方便观察，将所有扫描过的点灰度值更新为80，结果如图11(a)所示。新建一个变量Sum，记录所有的内圆像素点个数。 2) 以曲线段 a P 2 c ⌢ 上的所有像素点为起点，向下遍历扫描，扫描到灰度值为80的点，停止扫描，结果如图11(b)所示。 3) 以曲线段 b e d ⌢ 上的所有像素点为起点，向上遍历扫描，扫描到灰度值为80的点，停止扫描，结果如图11(c)所示。此时，变量Sum的值为内圆像素点总值。Sum和标定面积尺寸s相乘为测量面积大小。 图11. 内圆面积测量图像 3.6. 胶管壁厚测量 对于不合格胶管，内外圆圆心的位置相差较大，采用从内圆圆心向外做射线并交内外圆于两点的方法来求取厚度，会存在较大误差。本文应用同心圆性质、垂直平分线的性质及勾股定理等原理进行厚度测量，如图12所示，直线L 1 为外圆某点A的切线，做L 1 的垂线段交内圆于点B，L 2 为过点B与L 1 平行的直线，点A到L 2 上所有点的距离中，垂线段AB最短，点A与内圆上所有像素点间的距离，如蓝色线段举例所示，明显都要长于线段AB，因此，算出线段AB的长度即为厚度。具体步骤如下： 图12. 测量原理图 1) 内、外圆所有像素点的横纵坐标分别保存在名为In、Out的结构体里，从外圆起点开始，每个点都和内圆所有点进行遍历。 2) 运用勾股定理计算外圆某点与内圆边缘所有点之间的距离，将这些线段的长度存入数组中，其计算公式如下： S e g [ k ] = ( O u t [ i ] ⋅ x − I n [ j ] ⋅ x ) 2 + ( O u t [ i ] ⋅ y − I n [ j ] ⋅ y ) 2 (3) 3) 采用冒泡法对数组中的所有元素进行比较，找出数组中最小的数，为厚度。最终外圆每个点对应的厚度大小都保存在名为R的数组中。 4) 对R数组中的元素进行排序，找出胶管最大壁厚与最小壁厚。最大、小壁厚的像素值与标定尺寸k相乘为壁厚测量值。