Steger算法在运动鞋底表面光条图像中心提取的应用

2021-09-15 02:54邢礼源陈玉洁罗一龙
关键词:鞋底算子灰度

邢礼源, 陈玉洁, 张 豪, 罗一龙

(东华大学 机械工程学院,上海201620)

目前运动鞋的鞋底成型工艺主要有胶黏、缝制、模压、硫化、注塑等,其中胶黏工艺因流程简单、生产效率高、成本低、适用大批量生产,被制鞋企业广泛应用[1]。然而,人工涂胶耗时长,且胶水中的化学物质对人体建康有一定的影响,因此,将机器人技术引入运动鞋生产中具有重要的意义。

丁度坤等[2]利用工业相机采集鞋底图像并进行鞋底轮廓的提取,但这种方法只提取鞋底的二维轮廓。马新伍等[3]采用双目立体视觉完成鞋底三维信息提取,但获得的鞋底轮廓精度不高且算法开发难度大。Hu等[4]提出了利用结构光系统采集鞋底的三维信息,但提取的鞋底轮廓精度有待进一步提高。基于此,采用线结构光对运动鞋底三维信息进行提取,并重点对鞋底表面光条图像中心的提取算法进行研究,以满足鞋底三维信息提取的精度和实时性要求。

常见的光条图像中心提取方法主要分为两类:一类从光条图像的几何形态特征出发,包括阈值法、极值法、骨架提取法等[6-8],这类方法虽然简单快速,但易受各种噪声和阈值的影响而导致提取精度降低;另一类从光条图像的灰度特征出发,如重心法、方向模板法、Steger算法以及曲线拟合法[9-12],这类方法提取中心准确,精度较高,但当光条宽度发生变化时,会发生光条图像部分区域中心提取失败的情况。近年来,一些学者综合了两类光条图像提取方法的优点,提出了改进的光条图像中心提取方法。汪安国等[13]先用自适应阈值完成鞋底光条图像的分割,再用极值法得到光条图像的近似中心,最后用重心法实现鞋底光条图像的中心提取;南方等[14]提出改进的Steger算法,先利用自适应阈值分割光条图像,然后用随机霍夫变换求出光条边缘线,再通过法线计算出光条图像区域的宽度值,最后进行Steger算法提取。然而,由于运动鞋的鞋底内表面比较粗糙,光条图像边缘存在散斑[15],自适应阈值不能完整地分割光条区域,进而导致光条图像中心提取失败。

针对上述问题,本文提出一种适用于运动鞋底表面光条图像中心的提取算法。在自适应阈值分割基础上,计算模板均值与模板内各像素间的差值,并将模板内所有差值作为背景,再用Otsu法寻找最佳的差值阈值,从而有效分割光条的光斑。提取光条边缘时,根据光条图像梯度等级直方图自动获取Canny算子的高低阈值,避免了手动选取阈值带来的边缘提取差异。利用光条的边缘和梯度方向提取光条的宽度,根据光条的宽度缩小光条图像中心的检测范围并改变Steger算法中高斯滤波核的大小,最后采用Hessian矩阵的求解得到光条图像的中心,完成鞋底表面光条图像的中心提取。

1 鞋底粗糙表面的光条图像预处理

1.1 鞋底表面光条图像的特性

在理想情况下,光条图像在横截面上的能量分布符合高斯曲线分布,式(1)为高斯曲线的数学表达式。

(1)

式中:u为能量分布的幅值;σ为标准差,在图像上代表曲线的跨度;μ为图像纵坐标的平均值。

然而,实际测量环境的复杂性使得鞋底表面光条图像的形状以及亮度分布发生了变化。在理想鞋底表面和运动鞋底粗糙表面上的光条图像横截面的能量分布如图1所示。从图1(a)可以看出,理想鞋底表面的光条图像中心位置就是光条能量曲线极值所在的位置,而在图1(b)中,鞋底粗糙表面的光条图像中心位置范围较广。

(b) 运动鞋底粗糙表面

1.2 光条图像的自动分割算法

自适应阈值算法主要的思想是将图像中的各像素定义为中心,以其周围的邻域像素作为一个分块,计算出这个分块内像素的加权均值作为阈值。这种方法可以较好地区分出光条区域和非光条区域,但无法分割出光条的光斑区域。

先根据灰度特征计算出模板平均灰度值;然后计算平均灰度值与模板内各像素灰度的差值,以模板内所有差值作为背景,采用Otsu法寻找最佳的差值阈值;最后利用光条边缘两侧灰度值变化较大的特征来保留图像的边缘。差值阈值寻找的算法具体步骤如下:

(1) 计算模板平均灰度(ga)以及统计模板内像素灰度值高于200和低于50的个数,如式(2)~(4)所示。

(2)

a=w(gi) (i=1, 2, …, 9)

(3)

b=h(gi) (i=1, 2, …, 9)

(4)

式中:gi为模板内光条图像的像素灰度值;w(gi)和h(gi)分别为统计模板内像素灰度值高于200和低于50的函数;a为模板内像素灰度值高于200的个数;b为模板内像素灰度值低于50的个数。

(2) 计算平均灰度与模板内其他像素灰度的差值,如式(5)所示。

Δgi=gi-ga(i=1, 2, …, 9)

(5)

(3) 利用Otsu寻找差值阈值,如式(6)和(7)所示。

μ=ω0(gt)μ0(gt)+ω1(gt)μ1(gt)

(6)

(7)

如果gi-ga>gt,且a<3或者b<3,那么就认为该点不是光条上的点,将其灰度值置0,其余灰度值置255,最终完成图像的分割。

1.3 光条图像边缘及宽度提取

1.3.1 光条边缘提取

Canny算子在提取边缘时,采用边缘模板计算光条图像的梯度,通过非极大值抑制与高低阈值检测连接边缘。传统Canny算子主要根据经验选择高低阈值,本文设计一种基于光条图像梯度幅值的直方图来选择高低阈值的方法,根据光条图像梯度等级直方图自动获取阈值。基于光条梯度幅值的直方图阈值设计具体流程如下:

(1) 计算光条图像梯度幅值的最大值和最小值,如式(8)和(9)所示。

M=fmax(B(x,y))

(8)

N=fmin(B(x,y))

(9)

式中:M为光条图像梯度幅值的最大值;N为光条图像梯度幅值最小值;B(x,y)为图像在(x,y)位置的梯度值。

(2) 将梯度幅值区间[M,N]分成10等份小区间,则每个区间的长度L和小区间Ki分别如式(10)和(11)所示。

L=(M-N)/10

(10)

Ki=[M+(i-1)×L,M+i×L] (i=1, 2, …, 10)

(11)

(3) 分别统计出现在Ki区间内梯度幅值B(x,y)的个数Ri,如式(12)所示。

Ri=H(Ki) (i=1, 2, …, 10)

(12)

(4) 设Ki为梯度级数区段出现频率最多的区段,那么Canny算法的高、低阈值th和tl,如式(13)所示。

th=M+i×L,t1=0.4×th

(13)

1.3.2 光条宽度提取

光条图像灰度梯度方向与其法线方向非常接近,因此将灰度梯度方向作为光条的法线方向。假设点(x0,y0)是光条图像的某个边缘点,该点的法线近似为灰度梯度方向,假设其斜率为k,那么经过点(x0,y0)的直线如式(14)所示。

y=k(x-x0)+y0

(14)

对于直线y从一个边缘点到另一个边缘点所经过的光条像素位置进行数量统计,就可以得到光条的宽度W。

2 基于光条宽度的Steger中心提取算法

Steger算法可以采用高斯滤波核来确定Hessian矩阵,并通过高斯滤波核的一阶、二阶形式滤除光条图像的一部分噪声,以便更准确地求解出光条图像中心。二维高斯核函数的定义如式(15)所示。

式中:σ为高斯滤波核的大小;x和y为图像的横、纵坐标。

利用高斯核函数求解在任意图像像素点(x,y)处的Hessian矩阵,如式(16)所示。

(16)

Steger算法对光条图像区域内所有像素点进行Hessian矩阵计算,图像中每一个像素点和长度为n的二维高斯模板做多次卷积运算[17]。由式(16)可以看出Hessian矩阵的计算量非常大。根据光条图像的横截面能量分布可知,光条图像的中心位置主要在光条宽度的中间位置,故取光条图像横截面宽度中间0.4W范围内的像素点进行Hessian矩阵计算。

Hessian矩阵求解后的两个特征值与光条图像灰度函数的两个二阶方向导数的极值是对应的,特征值对应的特征向量就是极值的方向。用较大特征值对应的特征向量,在光条图像像素点f(x,y)的基础上,利用泰勒公式在该点的法向上展开,得到中心点亚像素坐标(px,py),如式(17)和(18)所示。

(px,py)=(tnx,tny)

(17)

(18)

如果亚像素坐标(px,py)的取值范围在((-0.5, 0.5), (-0.5, 0.5))内,该点就是光条图像中心点。

3 试验结果分析

为了验证提出的运动鞋底粗糙表面的光条图像中心提取方法的可行性与有效性,采用带有光斑且宽度剧烈变化的光条图像进行试验验证。试验环境:Intel(R)i7-8550U处理器,4G内存,软件及版本为MATLAB 2018a。

3.1 鞋底光条分割

使用不同的图像分割方法分割运动鞋底光条图像区域,结果如图2所示。由图2可知:Otsu法无法分辨出光斑,光条图像提取失败;自适应阈值法同样不能区别光斑和光条边缘,还带有一些噪点;本文的算法则可以有效分割出光条区域和光条的光斑。

(a) 原图

(b) Otsu法

(c) 自适应阈值法

(d) 本文算法

3.2 鞋底光条的边缘提取

选择Sobel算子、Robert算子、Canny算子以及本文改进的Canny算法分别对同一运动鞋底光条图像进行边缘提取。为了更好地观察提取效果,对提取后的边缘进行放大处理,结果如图3所示。

(a) Sobel算子

(b) Robert算子

(c) Canny算子

(d) 本文算法

从图3(a)和(b)可以看出:Sobel算子和Roberts算子不能很好地提取边缘,在光条的图像边缘和中间都存在一些噪声点;而在图3(c)和(d)可以看出,本文算法和Canny算子都比较好地完成光条图像边缘提取,但本文所提的方法不用考虑阈值的选取,有更好的适应性。

3.3 鞋底光条图像的中心提取

选择灰度重心法、Steger算法以及本文的光条中心提取算法对同一运动鞋底的光条图像进行中心提取,结果如图4所示。从图4可以看到:灰度重心法无法对光条图像宽度较细地方进行中心点提取;传统Steger算法在光条图像宽度突然变小的地方发生中心点提取失败;本文算法对于光条图像任何宽度变化的区域都可以进行中心点的提取。

(a) 原图

(b) 灰度重心法

(c) Steger算法

(d) 本文算法

3.4 光条图像的中心提取时间

采集运动鞋底尾部、中间、中上、头部处的光条图像,并分别命名为1#、 2#、 3#、 4#光条图像。每一类图片拍摄10张,分别利用灰度重心法、传统Steger算法和本文算法进行光条的中心提取,并统计光条图像中心提取的平均时间,结果如表1所示。

表1 不同算法对光条的中心提取时间的对比

由表1可知:灰度重心法提取光条图像的中心所花的时间最少;Steger算法提取光条图像的中心花费的时间最长;本文算法在提取不同位置光条图像的中心所花的时间,要比传统的Steger算法少三分之一左右。

4 结 语

本文采用的运动鞋底表面光条图像的中心提取算法,可以很好地分割出光条的光斑,同时解决了光条宽度变化带来光条图像的中心提取缺失的问题,具体结论如下:

(1) 使用模板内像素灰度均值和其他像素灰度的差值阈值来分割光条图像,解决了运动鞋底粗糙表面上光条的光斑无法分割的问题。

(2) 通过光条的梯度直方图自动设置Canny算子的阈值,避免了手动选取阈值带来的边缘提取差异,提高了Canny算子在提取鞋底的光条边缘的稳健性。

(3) 根据光条的宽度缩小光条中心的检测范围并改变Steger算法中高斯滤波核的大小,加快了Steger算法中心提取的速度,同时解决了光条宽度变化导致的光条中心提取缺失问题。

猜你喜欢
鞋底算子灰度
与由分数阶Laplace算子生成的热半群相关的微分变换算子的有界性
采用改进导重法的拓扑结构灰度单元过滤技术
拟微分算子在Hp(ω)上的有界性
Heisenberg群上与Schrödinger算子相关的Riesz变换在Hardy空间上的有界性
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
各向异性次Laplace算子和拟p-次Laplace算子的Picone恒等式及其应用
画与理
一种全自动鞋底清洁机的设计
“鞋底垫厚点,也能走得快”——贫困户崔普选和他的“梦中梦”
基于最大加权投影求解的彩色图像灰度化对比度保留算法