一种基于坡度图像分割的安息角检测方法
技术领域
本发明涉及计算机视觉技术领域,尤其涉及的是一种基于坡度图像分割的安息角检测方法。
背景技术
煤堆安息角的估算是基于这样一个假设:在煤堆物料自由落体式的堆积过程中,煤堆在图像上的投影(可近似视为煤堆的纵切面)是一个等腰三角形。因此煤堆安息角的计算关键在于煤堆纵切面的边缘提取。经过几十年的研究,已经有很多边缘提取算法,然而现有主流的边缘提取方法如canny,ED,EDLine,LSD等,往往依赖于高阈值的点作为关键点,后续的边缘连接工作以关键点为基础完成。虽然已经有多人提出了自适应计算阈值的方法,然而该阈值无一例外均为全局阈值,而实际堆场图像中,煤堆部分整体较暗,周围环境常常呈现出更高的对比度,使得煤堆部分难以检测。
因此,现有技术存在缺陷,需要改进。
发明内容
本发明所要解决的技术问题是针对现有技术的不足提供一种基于坡度图像分割的安息角检测方法。
本发明的技术方案如下:
一种基于坡度图像分割的安息角检测方法,包括以下步骤:A1、首先对像素进行两轮滤波,第一轮针对梯度方向进行滤波,滤除梯度方向为水平和垂直的像素点;第二轮根据梯度幅值进行滤波,对图像的各行自适应的计算阈值,滤除梯度幅值过小的像素;A2、接着通过计算像素之间的相似性进行直线检测;A3、最后对直线聚类,检测煤堆左右边缘,计算安息角。
所述的基于坡度图像分割的安息角检测方法,所述步骤A1具体包括以下步骤:
A11、第一步滤波为梯度方向滤波,将所有像素点的梯度方向量化到[0,45,90,135,180]五个方向上,梯度方向为水平或垂直的像素点被滤除;
A12、第二步滤波为基于局部阈值的梯度幅值滤波,计算图像每个位置的梯度幅值M;
Ix(x,y)=I(x+1,y)-I(x-1,y)
Iy(x,y)=I(x,y+1)-I(x,y-1)
只有当像素点的梯度幅值M超过阈值Thv的时候,它才会被提取出来,这个阈值是自适应的,每行计算一次,它的计算方法如下:
Thv=σv (1)
式中,σv是第v行上所有像素的梯度幅值变化直方图的标准偏差,假设梯度幅值的变化是高斯白噪声。
所述的基于坡度图像分割的安息角检测方法,所述步骤A2具体包括以下步骤:
A21寻找候选点
坡度由一条直线上的所有像素点和他们的支撑点组成,坡度的构造从图像底部开始,然后向上逐行扫描;然后对于每个像素,检测它上面一行上是否有与其相邻的不为零的像素存在;即,对于第i行上位置为X
1的像素d
i,如果在i-1行上,有一个位置为X
2的像素d
i-1,满足
则像素d
i-1被标记为d
i的备选点;δ等于1,如果d
i-1没有被标记为任何坡度的备选点,则将由d
i-1产生一个新的坡度。
A22像素间的相似度计算
所有属于同一个坡度上的像素,都应当有类似的灰度特性,像素之间的相似度被用来判断备选点是否应该与参考点相连;使用归一化的SAD来衡量两个像素间的相似度,且像素点和它对应的支撑点同时参与相似度计算;
A23用几何标准进行直线滤波
当一个坡度满足条件1且满足条件2,3中的一个时,它将被提取出来:
条件1:坡度的扭曲度小于一个阈值τo;
条件2:坡度的长度大于一个阈值τl1;
条件3:坡度的长度大于一个小阈值τl2且坡度的幅度大于一个阈值τa。
所述的基于坡度图像分割的安息角检测方法,所述步骤A3具体包括以下步骤:
A31,根据直线的起点和终点,将之写为y=ax+b的格式,并投影到(a,b)二维空间上,投影点的灰度代表了该直线的长度;考虑到斜率a的分辨率问题,投影的时候将斜率a用反正切换算为角度;
A32,根据煤堆的角度,在[30 60]和[120 150]两个角度范围内分别进行聚类;
A33.在两个聚类中分别计算重心,将重心投影到图像平面,即为煤堆的左右两边;
A34,根据煤堆左右两边即可计算顶角,然后根据煤堆截面是等腰三角形的假设即可计算出安息角的估计值。
所述的基于坡度图像分割的安息角检测方法,条件1意味着坡度中的方向允许有变化,但是方向的变化应该是有规律的;假设有一个坡度包含像素d0,d1,…,dn,则此坡度的扭曲度可以用下式计算:
式中,Dir(i)是像素di-1到像素di的方向,可以由两个像素的横坐标之差计算而出。如果我们认为坡度方向有规律的变化意味着所有的Dir(i)都是同一符号,考虑到坡度的定义中δ等于1,则当两个方向间的差值绝对值为1的时候,扭曲度取到最大值,即1/4=0.25;所以阈值τo取0.25。
所述的基于坡度图像分割的安息角检测方法,条件2中,τl1是一个几何阈值,只要坡度的长度大于τl1就认为这个坡度是轮廓;τl1是一个自适应的阈值;对所有坡度的长度做直方图,只保留5%的最长的坡度,对应的坡度长度即为τl1。
所述的基于坡度图像分割的安息角检测方法,条件3中取τl2值为4,阈值τa为所有行的阈值平均值的3倍。
本发明具有以下有益效果:
通过本发明的安息角检测方法,通过对散货堆场料堆进行安息角检测,预判物料的堆取范围,避免物料在堆场过程中超出堆料区域。本发明通过首先对像素进行两轮滤波,第一轮针对梯度方向进行滤波,滤除梯度方向为水平和垂直的像素点;第二轮根据梯度幅值进行滤波,对图像的各行自适应的计算阈值,滤除梯度幅值过小的像素。接着通过计算像素之间的相似性进行直线检测,最后对直线聚类,检测煤堆左右边缘,计算安息角。
附图说明
图1为本发明方法的流程图;
图2为坡度定义示意图;
图3-图8为不同场景的煤堆应用不同方法检测安息角的检测结果对比;A为原图,B为本发明方法的检测结果,C为Canny算法的检测结果,D为EDline算法检测结果,E为LSD算法检测结果;
具体实施方式
以下结合具体实施例,对本发明进行详细说明。
参考图1,一种基于坡度图像分割的安息角检测方法,具体步骤如下:首先对像素进行两轮滤波,第一轮针对梯度方向进行滤波,滤除梯度方向为水平和垂直的像素点;第二轮根据梯度幅值进行滤波,对图像的各行自适应的计算阈值,滤除梯度幅值过小的像素。接着通过计算像素之间的相似性进行直线检测,最后对直线聚类,检测煤堆左右边缘,计算安息角。
A1、二次滤波
A11、第一步滤波(梯度方向滤波),将所有像素点的梯度方向量化到[0,45,90,135,180]五个方向上,梯度方向为水平或垂直的像素点被滤除。根据煤堆的特点,所有的梯度方向为水平和垂直的点都大概率不属于煤堆而属于环境,因此滤除他们不仅利于后续煤堆边缘提取的加速,还能够降低环境信息对下一步阈值计算的干扰。
A12、第二步滤波(基于局部阈值的梯度幅值滤波),计算图像每个位置的梯度幅值M。
Ix(x,y)=I(x+1,y)-I(x-1,y)
Iy(x,y)=I(x,y+1)-I(x,y-1)
只有当像素点的梯度幅值M超过阈值Thv的时候,它才会被提取出来。这个阈值是自适应的,每行计算一次。它的计算方法如下:
Thv=σv (1)
式中,σv是第v行上所有像素的梯度幅值变化直方图的标准偏差,这里,我们假设梯度幅值的变化是高斯白噪声。
A2、直线检测
虽然使用了自适应的阈值,但是梯度幅值的大小不能作为是否轮廓的唯一判断标准。因此,两轮滤波操作后,噪声和不必要的纹理可能被提取出来,反而一些有用的边缘点失去了。这就是我们进行下面工作的原因。
由于二维灰度图像本身的限制,有的物体之间的灰度差别并不明显,如果单独考虑灰度的变化,就会丢失这部分的轮廓,相反,有的边缘点灰度变化很大,但是只是个单独的点,并不属于一个轮廓,对我们的后续处理没有帮助,我们希望将之舍去。据此,对于滤波后的像素,把相邻且方向类似的像素连接起来,构成直线,以考虑像素间的信息。
首先对“坡度”这一概念进行定义。在我们的方法中,坡度由一条直线上的所有像素点和他们的支撑点组成,如图2所示。图2中箭头一端深色像素点表示直线上的像素点,箭头另一端的浅色像素点表示像素点的支撑点。每个像素点有一个支撑点,将像素的梯度方向量化到[0 45 90 135 180]五个角度后,梯度方向上的相邻点即为该像素的支撑点。
算法分为三步。首先,对于每个像素点,将它上一行与之相邻的像素点标记为可能的候选者。第二步,在该像素点和它的每个候选点之间计算灰度相似度,相似度最大的那个候选点被挑选出来。最后,用几何标准来进行滤波。
A21寻找候选点
通过坡度的定义,我们可以知道坡度可以被看作是一个平面。坡度的构造从图像底部开始,然后向上逐行扫描。然后对于每个像素,检测它上面一行上是否有与其相邻的不为零的像素存在。即,对于第i行上位置为X
1的像素d
i,如果在i-1行上,有一个位置为X
2的像素d
i-1,满足
则像素d
i-1被标记为d
i的备选点。在我们的应用中,考虑到煤堆的实际情况,δ等于1。如果d
i-1没有被标记为任何坡度的备选点,则将由d
i-1产生一个新的坡度。
A22像素间的相似度计算
在我们对坡度的定义中,所有属于同一个坡度上的像素,都应当有类似的灰度特性。像素之间的相似度可以被用来判断备选点是否应该与参考点相连。计算相似度的方法有很多种。到目前为止,最常用的距离衡量方法有SSD和SAD。在我们的应用中,使用归一化的SAD来衡量两个像素间的相似度,且像素点和它对应的支撑点同时参与相似度计算。
坡度的构造原则
坡度的构造严格遵守唯一原则:第一,一个像素点属于且只属于一个坡度;第二,在同一行上,不可能有一个以上的像素点属于同一个坡度。
在参考点的上一行,可能存在不只一个备选点,因此计算出来的相似度会被用来在备选点间进行取舍。只有拥有最大相似度的备选点,才会被选择与参考点相连。另一方面,一个像素点有可能成为不只一个坡度的备选点。换句话说,即使一个备选点被选定与参考点相连,但是它也有可能已经与另一个坡度相连。在这种情况下,也需要通过相似度在两个连接之中作出选择。
A23用几何标准进行直线滤波
为了更准确的提取煤堆边缘,需要移除图像中包含的纹理和噪声。方法之一是对坡度的幅度进行滤波。坡度的幅度是它所包含的所有的像素的梯度幅度的平均值。然而,正如我们前面所说的,坡度的幅度,即灰度的变化不能作为衡量是否边缘的唯一标准。因此,我们需要引入其他的标准来对坡度进行滤波。
这里,我们使用另外两个几何标准,即坡度的长度,以及坡度的扭曲度。因为我们的应用是煤堆边缘检测,因此那些方向变化规律的边缘对后续检测有用的可能性更大。同时,坡度的幅度和长度也很重要。孤立的边缘点,即使它的灰度变化很大,因为被认为代表的是目标的细节或者是远处目标,也是没用的。相反地,一长串连接起来的像素,即使它的灰度变化相对较小,却有很大可能代表了一个有用的轮廓。因此,当一个坡度满足条件1且满足条件2,3中的一个时,它将被提取出来:
条件1:坡度的扭曲度小于一个阈值τo
条件2:坡度的长度大于一个阈值τl1
条件3:坡度的长度大于一个小阈值τl2且坡度的幅度大于一个阈值τa
条件1意味着坡度中的方向允许有变化,但是方向的变化应该是有规律的。假设有一个坡度包含像素d0,d1,…,dn,则此坡度的扭曲度可以用下式计算:
式中,Dir(i)是像素di-1到像素di的方向,可以由两个像素的横坐标之差计算而出。如果我们认为坡度方向有规律的变化意味着所有的Dir(i)都是同一符号,考虑到坡度的定义中δ等于1,则当两个方向间的差值绝对值为1的时候,扭曲度取到最大值,即1/4=0.25。所以阈值τo取0.25。
条件2中,τl1是一个几何阈值,只要坡度的长度大于τl1就认为这个坡度是轮廓。τl1是一个自适应的阈值。对所有坡度的长度做直方图,只保留5%的最长的坡度,对应的坡度长度即为τl1。
条件3保留了那些长度不太长,但是幅度相对较大的坡度。因为我们这一步的分割是为后面的检测服务的,因此我们取τl2值为4,这就意味着所有有用的坡度至少应该包含5个像素。阈值τa为所有行的阈值平均值的3倍。
A3、直线聚类
由于煤堆物料为固体,在自由落体式的堆料过程中,煤堆的边缘不可能是绝对平滑的,这也就意味着煤堆边缘并不是完美的直线,因此在直线检测过程中,煤堆边缘很可能被分成多个直线段,且这些直线的方向并不完全一致,所以需要对检测出的直线进行聚类。
步骤:
A31.根据直线的起点和终点,将之写为y=ax+b的格式,并投影到(a,b)二维空间上,投影点的灰度代表了该直线的长度。考虑到斜率a的分辨率问题,投影的时候将斜率a用反正切换算为角度。
A32.根据煤堆的角度,在[30 60]和[120 150]两个角度范围内分别进行聚类。
A33.在两个聚类中分别计算重心,将重心投影到图像平面,即为煤堆的左右两边
A34.根据煤堆左右两边即可计算顶角,然后根据煤堆截面是等腰三角形的假设即可计算出安息角的估计值。
图3-图8不同场景的煤堆边缘提取效果对比图,A为原图,B为本发明方法的检测结果,C为Canny算法的检测结果,D为EDline算法检测结果,E为LSD算法检测结果。如图所示,Canny算法在提取边缘特征比较全面,但无法准确筛选出目标边缘曲线。EDline算法进行边缘检测,可以排除细小的边缘,绘制出边缘曲线,但无法准确筛选出目标区域的边缘曲线。LSD算法是一种直线检测分割算法,可以提取出边界明显的边缘曲线,细节容易忽略,无法进行筛查找到目标的曲线。本发明根据煤堆特点,创建出煤堆安息角检测方法,在筛出背景边缘的基础上,找到目标区域的边缘模型。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。