基于亚像素边缘检测模型的图像轮廓测量方法
2022-09-22宋浩然张哲许圳淇
宋浩然,张哲,许圳淇
(上海理工大学,上海 200093)
目前工业生产需求对各种工件和零件的测量精度要求越来越高,这对工业零件的轮廓检测和测量提出了更高的要求。但受到检测设备成本的限制,难以有效提升检测精度。因此,不仅需要使用图像的像素进行边缘检测,还需要使用亚像素对图像进行处理。亚像素边缘提取是一种比传统像素边缘提取更准确的方法,如果采用亚像素技术将精度提高到0.1像素,相当于将图像系统分析分辨率提高10倍。
1 亚像素检测技术的研究现状
1.1 亚像素细分算法
亚像素细分算法可以运用在刀调仪上[1],该算法先使用亚像素对图像进行处理,然后设定一个阈值,通过计算边缘点的坐标来确定边缘。一般的阈值在0~255之间,该算法选取的阈值在30~100之间。但是该算法比较简单,容错率低,使用的时候需要调参,比较烦琐,应用范围有限。当阈值发生变化的时候,计算的边缘点也会随之变化。
1.2 基于sigmoid函数的亚像素边缘检测算法
基于sigmoid函数的亚像素边缘检测算法需要sigmoid函数在x轴和y轴的偏移量、边缘倾斜度等参量。该算法参量过多,涉及求导,计算微分方程等步骤。虽然能达到一定的精度,但是其过程烦琐,不易实现[2]。Sigmoid函数主要用于神经网络的激活函数,但是在亚像素边缘检测方面有欠缺性。
2 亚像素图像的获取方法
2.1 采用双线性插值法的原因
笔者建立了亚像素边缘检测模型,提出了亚像素图像下的Canny算子边缘检测模型。假设原始图像为1000个像素,如果每个像素扩展为10个像素,则该像素图像与其对应有10000个像素,所以在图像处理过程中要提高精度。笔者提出了一种双线性插值的方法,将原始图像的像素点放大到原始图像的10倍,得到一个亚像素图像。笔者以亚像素图像为基础,对图像进行滤波和二值化,然后使用Canny算子检测图像的边缘,最后利用边缘检测得到的图像梯度优化图像的轮廓。为了获得精度更高的亚像素图像,笔者采用双线性插值法对图像进行扩展,将图像的像素点扩大到原来的100倍。在边缘检测完成后,为了得到有序的边缘轮廓,笔者提出了一种基于连通域检测算法思想的散点轮廓排序方法。该方法基于连通域的检测和堆栈进出操作,可以有效地对二值图像中连续无序的散点进行排序。此外,散点轮廓排序算法还可用于区分不连通的轮廓曲线,分别计算它们在像素坐标系中的周长。
2.1 双线性插值法的步骤
亚像素边缘定位和检测的前提是对原始图像进行扩展得到亚像素图像,因此笔者选择插值方法得到亚像素图像。最常见的插值算法是样条插值[3]。该方法的原理是在像素间构造平滑过渡样条曲线,以补充像素间准确的图像信息。该方法的缺点是算法复杂度高,运行速度不能满足大规模图像处理的要求。与样条插补相比,直线插补具有明显的速度优势。因此,笔者在线性插值中使用双线性插值方法对图像进行插值。在数学上,双线性插值是具有两个变量的插值函数的线性插值扩展,其核心思想是分别在两个方向上进行线性插值[4]。进行双线性插值,首先在图像的x方向进行线性插值,
然后在图像的y方向进行线性插值,
基于上述,双线性插值结果如下。
其中,f是一个未知函数,P=(x,y)是一个关于未知函数值的函数,并且有四个已知函数值点,如图1所示,点R1和R2的函数值可以通过x方向的线性插值得到,然后在R1和R2的基础上通过y方向的线性插值得到点P的函数值。
图1 已知数据点和待插值数据点
3 轮廓的检测和分类
3.1 Canny算法边缘检测
边缘检测是提取轮廓并计算轮廓像素长度的过程中最重要的环节[5],也是亚像素边缘检测模型和算法的核心。笔者设计的边缘检测算法基于Canny边缘检测,改进了检测后得到的轮廓像素无序、不连续的问题。在像素图像下,常见的边缘检测算子有Sobel、Prewitt、Roberts、Canny、Marr-Hildreth等[6],其中比较高级的算子有Canny算子和Marr-Hildreth算子。经过比较,笔者选择Canny算子作为亚像素边缘检测模型和算法的基础。Canny算子是由澳大利亚计算机科学家John F.Canny开发的一种多级边缘检测算法。该算法可以尽可能地标记图像中的实际边缘,实现对噪声的最小响应。使用Canny算子进行边缘检测的基本步骤如下:
(1)高斯滤波;
(2)计算梯度图像和角度图像;
(3)梯度图像非极大抑制;
(4)边缘连接使用双阈值。
3.2 滤波和优化
Canny算子边缘检测是二值图像,存在一定的边缘不连续性[7]。本文提出的边缘检测模型在Canny算子边缘检测的基础上进行了改进。本文涉及的方法是计算图像的梯度函数。假设3×3图像矩阵的中心坐标为(xi,yi),其他点的坐标如图2所示。
图2 像素坐标关系
该图像是二值图像。假设其像素函数为I,则该函数的梯度函数与像素函数的关系为:
3.3 获取有序边缘轮廓曲线
连通域搜索算法用于检测相同的连通轮廓数据点,并将它们分开计算每个轮廓的像素长度,最后求和得到整个轮廓图像的周长。连通域搜索算法是一种在二值图像中寻找黑色或白色连通区域的方法,分为4连通和8连通[8]。8连通是指在一个像素的8个相邻像素中,如果一个像素与中心像素具有相同的像素值,则认为该像素与中心像素连通。4连通的原理与8连通相同,4连通的搜索范围只是中心像素的上、下、左、右像素。笔者采用8连通方法,将边缘检测后得到的二值轮廓图像作为处理目标。基本步骤如下:遍历二值图像,找到像素值为1并标记为I的任意像素;在像素点8的邻域检测到相同的像素点,将其视为I+1点,并标记其访问;递归搜索像素点I+1的8个邻域中的同一个像素点,直到周围没有未访问的标记,所有标记的像素形成的曲线就是轮廓曲线;在等高线中,找到等高线的端点是8个连通邻域中只有一个边标的点;将轮廓点排序,以任意端点为起点,即可得到有序轮廓。
4 实验验证
4.1 测试样本说明
与获取有序轮廓曲线的方法类似,笔者采用的轮廓检测算法也是基于8连通方法。在检测到连接的像素后,将它们压入堆栈。检测到整个轮廓后,依次访问堆栈中的像素,逐点计算距离,得到像素坐标系中轮廓的周长。
4.2 像素图像与亚像素图像的比较
通过插值在每两点之间插入10个像素,使图像的X轴和Y轴分辨率分别提高10倍。图3显示了原始图像和扩展亚像素图像之间的比较。
图3 像素图像与亚像素图像的比较
4.3 二值边缘图像的像素矩阵
通过函数的梯度函数与像素函数得到的矩阵就是二值边缘图像的像素矩阵。笔者使用上述算法对三幅图像进行卷积处理,得到三幅图像的边缘图像。处理结果如图4所示:
图4 原始图像上不同颜色的轮廓
4.4 边缘轮廓的测试结果
表1、表2和表3包含三张图片的轮廓点数和轮廓的长度。下表中的长度单位均为像素。
表1 边缘轮廓数据输出格式
表2 边缘轮廓数据输出格式
表3 边缘轮廓数据输出格式
4.5 结果分析
经测试,该模型实现的边缘检测精度是Canny算子的10倍,电子测量精度也高于传统电子测量方法。
5 结束语
该模型精度比Canny算子高,而且消除了光线和零件毛刺对图像处理的影响。可应用于工厂各种零件的测量、高精度边缘提取和圆角半径测量、激光切割测量等一系列应用场景,且受环境影响小,鲁棒性高。