本发明属于计算机视觉与图像处理技术领域,特别涉及一种非均匀光照下快速提取轮廓线的方法。
背景技术:
在一些高速运动的机械控制方面,会用到计算机视觉与图形处理技术,简而言之,就是通过摄像头的获取图像,再对图像进行数据分析从而控制机械运动。这就要求核心处理器的数据处理速度要能匹配得上运动控制系统的速度要求。
现在市面上的摄像头大致分为三类:全彩摄像头、灰度摄像头、二值化摄像头。
在工业控制方面,为了进一步缩减在硬件成本上的支出,如果采用全彩摄像头,需要处理的数据就很大,为了实现系统的高性能,核心的处理器(也就是mcu)的性能就需要提高,需要花更多的钱去购置主频更高、内存更大的处理器,如果数量巨大的话,会提高企业的巨额支出。硬件二值化摄像头由于提取的只有0/1两种信息,能应用的场景非常有限。
而灰度摄像头采集回来的数据丰满度在提高运动控制细腻程度上完全优越于硬件二值化且能相较于全彩摄像头既能节约数据处理的内存开销,并且在控制的细腻程度上并不逊色于全彩摄像头。
技术实现要素:
本发明的目的,在于提供一种非均匀光照下快速提取轮廓线的方法,其算法复杂度低,从而减少处理器处理时间,进而能够采用低成本处理器,提高系统性能,降低硬件成本。
为了达成上述目的,本发明的解决方案是:
一种非均匀光照下快速提取轮廓线的方法,包括如下步骤:
步骤1,采用灰度摄像头采集图像,并将灰度数据进行存储;
步骤2,任选一处为原点,建立x-y方向的直角坐标系;
步骤3,选择提取轮廓线的起始坐标和核的阶数:
步骤4,对起始坐标的点进行膨胀操作和腐蚀操作,用膨胀操作的结果减腐蚀操作的结果,得到核的延伸方向的形态学梯度grad,若grad大于设定值,则得到轮廓线上的第一个点arr[x1][y1];然后找出该点八邻域中满足条件的像素点,作为轮廓线上的第二个点arr[x2][y2];以第p个点arr[xp][yp]为中心,对比其五邻域的像素,找到满足条件的第p 1个点arr[x(p 1)][y(p 1)],p=2,3,…,以此类推,得到所有轮廓点;
步骤5,对步骤4得到的轮廓点经过k次b样条曲线的拟合后得到光滑的轮廓线。
上述步骤3中,选择提取轮廓线的起始坐标的具体方法是:首先将分布集中的像素区域预判为轮廓,然后选择靠近轮廓且与背景环境灰度值相差大的位置作为起始坐标。
上述步骤3中,确定提取轮廓线的核的阶数为二阶。
上述步骤4的具体过程是:
步骤401,确定核的延伸方向,沿该方向将图像与核进行卷积,计算出膨胀的值dilate与腐蚀后的值erode;
步骤402,对膨胀的值dilate与腐蚀后的值erode进行作差,得到核的延伸方向的形态学梯度grad=dilate-erode,若grad大于设定值,则得到轮廓线上的第一个点arr[x1][y1];
步骤403,以步骤402得到的第一个点arr[x1][y1]作为九宫格中心点,对比中心点arr[x1][y1]与其八邻域的8个像素点的梯度值之差,找出满足梯度值大于设定值且与中心点梯度值差值最小的那个像素点,并将该像素点作为轮廓线上的第二个点arr[x2][y2];
步骤404,以步骤403得到的第二个点arr[x2][y2]作为九宫格中心点,对比该中心点与其五邻域的5个像素点的梯度值之差,将梯度值大于设定值且与中心点梯度值差值最小的像素点作为轮廓线上的第三个点arr[x3][y3];所述五邻域是指九宫格中沿核的延伸方向的靠前的两行;
步骤405,以第i个点arr[xi][yi]作为九宫格中心点,重复步骤404,得到第i 1个点arr[xi 1][yi 1],i=3,4,…,直至出现如下两种情况的任一种:
若得到一个闭合的轮廓,即核经过延伸以后,回到arr[x1][y1],则停止工作;若得到的轮廓不是闭合的,但该核沿其方向延伸至终点,即grad小于设定值。
上述步骤5中,b样条曲线的拟合实现过程是:
步骤51,选定b样条函数的次数,再根据公式m=n k 1计算出节点个数m,选定节点参数以数组u[]表示;
步骤52,将轮廓的各个边界坐标代入b样条曲线的拟合公式,再以二维数组的函数关系在图像中以轮廓线显示,得到各个轮廓边界;
步骤53,利用b样条曲线,将各个轮廓的边界进行拟合,得到整体轮廓。
上述步骤52中,b样条曲线的数学表达式为:
其中ni,k(u)是k次b样条基函数,下面为其递归公式:
采用上述方案后,本发明能够有效降低算法的复杂度,在现有专利与文献中,对灰度图进行轮廓线或者边界线提取的方案大多是对整幅图像进行滤波再使用sobel算子或者canny等算子提取边界线最终得到轮廓线(即:全图滤波 算子提取轮廓线),基于180兆主频的核心处理器,一帧在非均匀光照下获取的图像(只有两条黑色直线)经过全图滤波和边界提取,耗时约为15ms,而本发明基于形态学梯度在滤波的过程中提取边界保存于数组中,在同样的背景下完成任务处理器耗时约为7ms。在处理时间上具有极大的优越性。
并且,即使是在全彩摄像头(rgb摄像头)采集回来的图像处理中,形态学梯度的提取轮廓线的方法在算法的时间复杂度上也优于传统的全图滤波联用其他算子提取边界的算法。
附图说明
图1是本发明的流程图;
图2是建立的坐标示意图;
图3是五邻域对比的原理图;
图4是本发明的硬件逻辑框图;
图5是非均匀光照下的场景(灰度);
图6是非均匀光照下采集到的灰度图像;
图7是经本发明技术方案提取轮廓线后的图像。
具体实施方式
以下将结合附图,对本发明的技术方案及有益效果进行详细说明。
在工业控制中,很难做到像手术台的无影灯一样制造一个光照均匀的场景,非均匀光照是一个必然存在的场景。在非均匀光照的情况下,在对图像数据处理有较高时间要求的场景下,如何使用低成本的处理器高效提取边界线,通过降低算法复杂度,减少处理器处理时间,减低企业的硬件成本,本发明很好地平衡了系统性能提高和硬件成本减低两方面的博弈。
如图1所示,本发明提供一种非均匀光照下快速提取轮廓线的方法,包括如下步骤:
步骤1,图像采集:利用逐飞科技公司的灰度摄像头作为传感器,通过32位单片机的dma中断将摄像头采集到的灰度数据传输至单片机rom,存储形式为二维数组;
步骤2,建立坐标:以该幅图像的左下角为原点,建立x方向、y方向的坐标系,如图2所示,其中,方框表示一帧图像的边界。在实际操作中,可以将任意位置作为坐标系的原点。
步骤3,选择提取的起始坐标和核数:
①根据灰度图像轮廓的集中度和分布情况,首先将分布较为集中的像素区域预判为轮廓,然后选择尽量靠近轮廓且与背景环境灰度值相差较大的位置作为进行腐蚀膨胀操作的起始坐标,例如选择图像中心点,并将y轴正方向作为核的延伸,直至找到梯度值符合系统要求的点(此时,已经找到轮廓了)。
②根据该图像在非均匀光照下的图像质量情况选择核的大小,也就是核的阶数,通常采用二阶,因为二阶能够满足提取有效轮廓的要求,同时还能满足mcu高效运行的要求。(阶数提高,会降低mcu运行效率,同时对图像中轮廓提取性能无明显提高,所以二阶是一个均衡各方要求的较为合适的阶数。)
具体来说,如果是动态图像处理,即回传至处理器的一帧图像都是在高速动态变化的,则取图像中间的像素点的坐标值作为初始值,阶数依照所处理的动态图像的统计规律给定,起始坐标和核心都提前在程序的全局变量中指定。
步骤4,在滤波过程中提取轮廓线(即边滤波,边提取边界):
①根据步骤3选定的起始坐标和选定该核的延伸方向,沿此方向将图像与该核进行卷积,计算出膨胀的值dilate与腐蚀后的值erode。对原图进行一次膨胀运算,再对原图进行腐蚀运算,完成滤波。既有的文献中都是采用开运算(对图像进行腐蚀,再对腐蚀过的图像进行膨胀运算)和闭运算(对图像进行膨胀,再对膨胀过的图像进行腐蚀运算)。
简而言之,膨胀的核与腐蚀的核同时滚动过去完成卷积,就完成了滤波。滤波之后转②,进行边界提取。
腐蚀计算公式:
其中,(x,y)中为腐蚀中心坐标,x',y'为腐蚀阶数;element表示核,其数学公式本质为矩阵,element(x',y')≠0表示阶数不为零;src即sourceimage,表示原图像。
膨胀计算公式:
②找到轮廓线的第一个点:对膨胀的值dilate与腐蚀后的值erode进行作差,算出核的延伸方向的形态学梯度grad=dilate-erode,若符合梯度要求,即grad大于所应用系统要求的设定值(多次试验测出,灰度摄像头曝光200,增益64时,设定值在(20,30)区间内,效果最佳),得到轮廓线上的第一个点arr[x1][y1],将其坐标数组保存下来;若不符合梯度要求,则继续寻找下一个点;
形态学梯度:
grad=dilate(src,element)-erode(src,element)
③八邻域对比找到第二个点:找到第一个点之后,以第一个点arr[x1][y1]为九宫格中心点,通过对比中心点arr[x1][y1]与八邻域的8个像素点的梯度值之差(每个像素点都会有个像素值),找出满足梯度值大于系统设定值grad且与中心点梯度值差值最小的那个像素点将其坐标保存在数组中,将该像素点作为轮廓线上的第二个点arr[x2][y2];
④五邻域对比找到第三个点:
如图3所示,按照箭头方向寻找轮廓线时,只需要对比中心的坐标点和斜线区域的两行像素点的梯度差值(因为剩余一行在前面步骤已经被淘汰)。
基于以上分析,从第三个点开始,我们只需要将中心点与五邻域的5个像素点进行比较,降低了处理器的计算压力。
⑤以④中得到的点的坐标为起始点,反复执行步骤④,其余方向的核也如此操作;直至出现如下两种情况的任一种:
若得到一个闭合的轮廓,即核经过延伸以后,回到arr[x1][y1],则停止工作;若得到的轮廓不是闭合的,但该核沿其方向延伸至终点(grad<系统设定值)。
步骤5,b样条拟合:
提取出轮廓的数组后,经过k次b样条曲线的拟合后可以得出更加光滑的轮廓线,能更加清晰地得到物体的轮廓。
有n 1个控制点pi(i=0,1,...,n)和一个节点向量u={u0,u1,…,um},依次连接这些控制点可以构成一个特征多边形,k 1阶(k次)b样条曲线的表达式(2≤k≤n 1),
其中ni,k(u)是k次b样条基函数,也叫调和函数,或者k次规范b样条基函数,下面为其递归公式:
b样条曲线拟合的实现过程是:
①选定b样条函数的次数,再根据公式m=n k 1计算出节点个数m,根据轮廓线的趋势,以及实际要求,选定节点参数以数组u[]表示;(节点参数是0到1之间按照系统性能最优情况给定)
②在步骤4中,我们已经将轮廓的各个边界坐标以二位数组的形式保存,只需将每个点的坐标输入到b样条曲线的拟合公式中,再以二维数组的函数关系在图像中以轮廓线显示,便可见其各个轮廓边界;
③再利用b样条曲线,将各个轮廓的边界进行拟合便可以得到整体轮廓。
在具体实现时,硬件逻辑如图4所示,采用一个7.2v的单电源进行供电,通过mp1854芯片稳压后分流成两路的3.3v对摄像头和单片机进行供电。处理器可以采用恩智浦k66单片机、stm32单片机等,可以有效控制处理器成本。
图5至图7示出了利用本发明提供的技术方案进行形态学处理的图像,可以很明显看到处理效果。
以上实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。
1.一种非均匀光照下快速提取轮廓线的方法,其特征在于包括如下步骤:
步骤1,采用灰度摄像头采集图像,并将灰度数据进行存储;
步骤2,任选一处为原点,建立x-y方向的直角坐标系;
步骤3,选择提取轮廓线的起始坐标和核的阶数:
步骤4,对起始坐标的点进行膨胀操作和腐蚀操作,用膨胀操作的结果减腐蚀操作的结果,得到核的延伸方向的形态学梯度grad,若grad大于设定值,则得到轮廓线上的第一个点arr[x1][y1];然后找出该点八邻域中满足条件的像素点,作为轮廓线上的第二个点arr[x2][y2];以第p个点arr[xp][yp]为中心,对比其五邻域的像素,找到满足条件的第p 1个点arr[x(p 1)][y(p 1)],p=2,3,…,以此类推,得到所有轮廓点;
步骤5,对步骤4得到的轮廓点经过k次b样条曲线的拟合后得到光滑的轮廓线。
2.如权利要求1所述的一种非均匀光照下快速提取轮廓线的方法,其特征在于:所述步骤3中,选择提取轮廓线的起始坐标的具体方法是:首先将分布集中的像素区域预判为轮廓,然后选择靠近轮廓且与背景环境灰度值相差大的位置作为起始坐标。
3.如权利要求1所述的一种非均匀光照下快速提取轮廓线的方法,其特征在于:所述步骤3中,确定提取轮廓线的核的阶数为二阶。
4.如权利要求1所述的一种非均匀光照下快速提取轮廓线的方法,其特征在于:所述步骤4的具体过程是:
步骤401,确定核的延伸方向,沿该方向将图像与核进行卷积,计算出膨胀的值dilate与腐蚀后的值erode;
步骤402,对膨胀的值dilate与腐蚀后的值erode进行作差,得到核的延伸方向的形态学梯度grad=dilate-erode,若grad大于设定值,则得到轮廓线上的第一个点arr[x1][y1];
步骤403,以步骤402得到的第一个点arr[x1][y1]作为九宫格中心点,对比中心点arr[x1][y1]与其八邻域的8个像素点的梯度值之差,找出满足梯度值大于设定值且与中心点梯度值差值最小的那个像素点,并将该像素点作为轮廓线上的第二个点arr[x2][y2];
步骤404,以步骤403得到的第二个点arr[x2][y2]作为九宫格中心点,对比该中心点与其五邻域的5个像素点的梯度值之差,将梯度值大于设定值且与中心点梯度值差值最小的像素点作为轮廓线上的第三个点arr[x3][y3];所述五邻域是指九宫格中沿核的延伸方向的靠前的两行;
步骤405,以第i个点arr[xi][yi]作为九宫格中心点,重复步骤404,得到第i 1个点arr[xi 1][yi 1],i=3,4,…,直至出现如下两种情况的任一种:
若得到一个闭合的轮廓,即核经过延伸以后,回到arr[x1][y1],则停止工作;若得到的轮廓不是闭合的,但该核沿其方向延伸至终点,即grad小于设定值。
5.如权利要求1所述的一种非均匀光照下快速提取轮廓线的方法,其特征在于:所述步骤5中,b样条曲线的拟合实现过程是:
步骤51,选定b样条函数的次数,再根据公式m=n k 1计算出节点个数m,选定节点参数以数组u[]表示;
步骤52,将轮廓的各个边界坐标代入b样条曲线的拟合公式,再以二维数组的函数关系在图像中以轮廓线显示,得到各个轮廓边界;
步骤53,利用b样条曲线,将各个轮廓的边界进行拟合,得到整体轮廓。
6.如权利要求5所述的一种非均匀光照下快速提取轮廓线的方法,其特征在于:所述步骤52中,b样条曲线的数学表达式为:
其中ni,k(u)是k次b样条基函数,下面为其递归公式: