APP下载

改进Canny 算法在编织布疵点边缘检测中的应用

2021-04-08闫伟伟孙宏昌张树刚田东阁蒋永翔

天津职业技术师范大学学报 2021年1期
关键词:像素点算子灰度

闫伟伟,孙宏昌,张 廷,张树刚,田东阁,蒋永翔

(1.天津职业技术师范大学机器人及智能装备研究所,天津 300222;2.呼伦贝尔职业技术学院,呼伦贝尔 021000;3.天津亚东智鑫科技有限公司,天津 300380)

塑料编织袋广泛应用于各行各业,因其具有较好的拉伸性能,可承载并有效保护质量较大的产品,满足了消费者的使用需求。目前,传统的编织布原料破损检测主要依靠人工识别[1],检测效率低下、误判率高,检测人员长期视力集中易导致眼睛疲劳以及引发职业病。因此,在编织布检测流程中应用机器视觉检测技术十分必要。

破损编织布图像中背景与缺陷边缘、缺陷与缺陷边缘特征是检测破损的关键特征[2],因此在机器视觉技术中通常会引入图像边缘检测技术。在图像边缘检测中常用的一阶边缘检测算子有:Roberts 算子[3]、Prewitt 算子[4]、Sobel 算子[5]、Scharr 算子[6]等;二阶的边缘检测算子有:Laplacian 算子[7]、LoG 算子[8]、Canny 算子[9]等,这些算子的原理都是将图像与特定大小的模板进行卷积处理。上述算法简单,实用性强,其中Canny 算子因其检测精度高、信噪比高等优势在图像处理领域中应用广泛。但由于Canny 算子中的高低阈值需要人为设定,过高的高阈值会导致边缘断裂,出现边界不连续的情况而丢失边缘细节信息;反之,过低的低阈值会出现伪边缘。当图像光照情况发生变化时,图像整体灰度分布随之变化,导致高低阈值需进行相应地修改,因此传统Canny 算子在阈值的确定上缺乏实时性和自适应性[10]。针对上述问题,文献[11]提出了结合双重Otsu 方法进行高低阈值确定的算法,文献[12]使用迭代阈值分割法和改进Otsu 算法以选取高低阈值,实现边缘检测连接,文献[13]利用梯度直方图选取阈值。以上方法虽然提高了边缘提取的检测精度,但并没有改善算法的自适应性。本文提出一种改进Canny 算法,旨在提高Canny 算子在织物疵点边缘检测中的准确性和自适应性。

1 Canny 边缘检测算法

传统的Canny 边缘检测算法最初由John F.Canny提出,并设定了信噪比准则、定位精度准则、单一边缘响应准则[14]来提高边缘检测精度。为满足这3 条准则,John F.Canny 在一阶微分算子的基础上,增加了2 项改进,即非极大值抑制和双阈值。多边缘响应、边缘的定位精度利用非极大值抑制来控制;双阈值能减少边缘的漏检率。其检测流程如图1 所示。

图1 传统Canny 边缘检测算法流程

(1)利用二维线性高斯滤波器对目标图像进行去噪。二维高斯函数与图像进行卷积处理以达到平滑图像的效果,二维高斯函数 G(x,y)为

高斯函数与目标图像卷积公式为

式中:σ 为高斯函数的标准差,其大小可以控制图像的平滑程度;R(x,y)为高斯函数与输入图像进行卷积处理之后的图像;f(x,y)为输入图像;“*”代表卷积运算。

为提高运算效率,可以将高斯函数转化为高斯滤波模板[15],再与输入图像做卷积运算得到平滑后的图像。

(2)计算梯度幅值和方向,利用Sobel 梯度模板[16]分别计算去噪后的图像在像素点(x,y)处x 和y 方向上的偏导数。

其在x 方向上的偏导数Ix为

在y 方向上的偏导数Iy为

式中:R(x,y)为像素点(x,y)处的像素值。

则利用二范数计算其梯度幅值O 所得

其梯度方向为

(3)非极大值抑制(NMS)[17]旨在尽可能保留图像灰度梯度幅值变化最大的点,尽可能地抑制该范围内的干扰值,提高边缘定位的准确度。非极大值抑制的具体实现方法为:遍历图像的每一个像素点,如果像素点R(x,y)处像素的梯度值不大于该梯度方向上相邻2 个像素点的梯度值,则把点R(x,y)标记为非边缘点;反之,像素点R(x,y)则被标记为候选边缘点。

(4)滞后阈值化,人工确定1 个高阈值Th和1 个低阈值Tl,分别对经过非极大值抑制处理之后的梯度图做二值化处理,然后对边缘点进行选取和连接,具体方法为:扫描图像的像素点(x,y),如果该点像素梯度值大于高阈值,则点(x,y)为边缘像素;如果该点像素梯度值小于低阈值,则该点认定为非边缘点;若像素点的梯度值处于高、低阈值之间,则进一步检查像素点(x,y)的 3 × 3 邻域,如果在像素 3 × 3 的邻域内有梯度大于 Th的像素(x,y),则(x,y)为边缘像素点,否则视为非边缘像素。

2 改进的Canny 边缘检测算法

从上述Canny 边缘检测算子的检测流程可以看出,由于进行边缘检测和连接时所依据的高低阈值是人工设定的,因此对整幅编织布图像进行边缘检测时无法估计局部特征信息,随着设定值的不同,所检测物体的轮廓信息出现检测出假边缘或边缘断裂等情况,无法实现自适应。另外,人工设定阈值会因经验不同而产生误差。针对传统Canny 算子存在的不足,本文运用双重基本全局阈值分割算法[18],根据实时的光照环境变化自适应地确定合适的高阈值和低阈值。改进后的Canny 算法流程如图2 所示。

图2 改进Canny 算法流程

2.1 基本全局阈值分割算法

在一个灰度等级为L(一般L=256)的图像中,设有nm个灰度值为m 的像素,n 表示像素总个数,其中n=n0+n1+…+nL-1,灰度图像中灰度值m 像素点出现的概率用 p(m)表示,则

其中,p(0)+p(1)+ … +p(L-1)=1,用初始阈值T0将图像中的像素灰度值分成C0和C1两大类,即C0={0,1,...,T0},C1={T0+1,T0+2…,L-1}。

对于初始阈值T0的设置,可以先找出图像中灰度最大的值hmax和灰度最小的值hmin,令T0为灰度最大的值hmax和灰度最小的值hmin的均值,这样可以减少计算量,则有

则C0和C1的分布概率分别为ω0和ω1

式中:ω0为 C0的分布概率;ω1为 C1的分布概率,且ω0+ω1=1。

C0部分像素点的灰度均值φ0(T)为

C1部分像素点的灰度均值φ1(T)为

对φ0(T)与φ1(T)求均值,有

其中,T1是经过一次迭代所得的一个阈值。

2.2 Canny算子结合双重基本全局阈值分割算法

由上述对基本全局阈值分割算法的介绍可知,双重基本全局阈值分割算法是先对梯度图像赋予一个初始阈值T0,第一步使用上述方法获取一个新的阈值T1,然后将T0和T1进行比较,如果二者相等或是二者之差在一个允许的范围内,返回T1,此时所得到的新阈值T1即为最优阈值,将其设置为高阈值Th;否则继续进行迭代,直到相邻2 次得到的阈值之差为0 或者在一个允许的范围时,终止迭代,最终得到最优阈值。第二步在[0,Th]之间再次使用全局阈值分割法得到另一个最优阈值,将其设置为低阈值,此时得到的高阈值和低阈值即可作为滞后阈值化操作所需的阈值。

3 实验结果与分析

为验证上述理论分析的可行性和有效性,在Python 3.7.0 环境下配置开源计算机视觉函数库OpenCV4.2.0版本进行测试。传统Canny 检测算法直接调用edge=cv2.Canny(image,threshold1,threshold2),image 为经过灰度变换后的灰度图像,threshold1、threshold2 分别为设定的低阈值和高阈值,edge 为检测出的图像边缘二值图。改进后的算子中的高低阈值是经过2 次全局阈值分割方法多次迭代得到的,不需人为设定。

选取多幅不同缺陷类型的图像对本文改进算子和传统算子的检测效果进行对比,其中传统算法与改进算法所用的高斯滤波模板大小均为3×3,标准差σ=1.4,计算梯度用一阶Sobel 梯度模板,由于图像整体灰度较低,传统算法双阈值中高阈值选择为30,低阈值为15。

图3 为有瑕疵编织布的原图,改进算法所得阈值与传统方法确定的阈值对比结果如表1 所示。从表1可以看出,改进Canny 算法确定的阈值能根据图像灰度分布自适应确定高低阈值,提高了算法的自适应性。两种算法在处理同一幅图像时,采用改进的方法多于传统方法,这是因为在确定Canny 算子的最优阈值时需要额外的计算量,这就使得算法在时间复杂度上有一定的提高。

图3 瑕疵编织布原始图像

表1 编织布图阈值比较

采用改进Canny 算法和传统Canny 算法分别对其处理后,编织布图检测出的瑕疵边缘像素占图像整体像素比例情况如表2 所示。从表2 可以看出,改进的Canny 边缘检测算法能检测出更多的瑕疵边缘像素。

表2 编织布图检出边缘像素占比 %

传统Canny 算法和改进Canny 算法的检测结果分别如图 4 和图 5 所示。由图 4(a)、图 5(a)中的标记处可以看出,改进方法检测出破损编织布瑕疵的边缘细节更多。由图4(b)、图5(b)小破损瑕疵可以看到,传统算法对于编织布小破损情况下的检测情况明显不如改进后的算法。图5 中的打结和跳线瑕疵图可以看出,改进的算法边缘检测和连接的效果更好,这也为后续疵点检测和打标机标记瑕疵布料提供了依据。

图4 传统Canny 算法检测图

图5 改进Canny 算法检测图

4 结 语

本文在传统Canny 算子确定高阈值和低阈值的步骤中应用2 次全局阈值分割方法,解决了其边缘检测算子在确定高低阈值方面自适应能力差的问题。该算法能够根据图像整体灰度分布自适应地确定合适的阈值,无需人为操作。实验结果表明,本算法检测出的边缘像素明显增多,在边缘像素连接方面的效果更好,而且能在一定程度上抑制假边缘,提高了Canny算子在织物疵点边缘检测上的自适应性。同时,由于低阈值也是由算法根据图像灰度分布计算得到的,因此能够减少伪边缘的产生,保证了后续疵点检测和标记的准确性。本文的算法在自适应性、边缘检测和连接方面相比传统算法具有一定的优势,但在检测时间方面耗时比传统算法长,对检测效率有一定的影响,今后仍需进一步研究。

猜你喜欢

像素点算子灰度
与由分数阶Laplace算子生成的热半群相关的微分变换算子的有界性
采用改进导重法的拓扑结构灰度单元过滤技术
图像二值化处理硬件加速引擎的设计
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
基于局部相似性的特征匹配筛选算法
Domestication or Foreignization:A Cultural Choice
Arduino小车巡线程序的灰度阈值优化方案
基于像素点筛选的舰船湍流尾迹检测算法
基于canvas的前端数据加密
QK空间上的叠加算子