本发明涉及图像处理技术领域,具体来说是一种用于投影交互系统的直线检测方法。
背景技术:
人机交互技术是计算机科学中至关重要的一个领域,其发展历史基本上代表了计算机的发展历史。从最早的大型机上的笨拙的开关系统,到早期键盘和鼠标的出现以及当下流行的触摸屏,人机交互技术的发展速度日新月异。近年来,由于计算机视觉技术的飞速发展,以及新的传感器(比如深度相机Kinect、LeapMotion等)的出现,使得各种便捷式的人机交互方式层出不穷。
利用视觉传感器与投影仪进行组合形成投影交互系统,是一种新的交互方式。该方式能够直接将投影区域变成触摸屏,实现与计算机交互的功能。这种新的交互方式显著提升了在教室和会议室环境中的交互效率,提高了使用者的演讲效果。
标定模块是投影交互系统的核心关键模块。该模块能够得到投影界面与计算机之间的映射关系,其精度直接影响最终的交互体验。在标定模块对摄像机捕获的标定图进行分析,确定标定点的位置是常见的做法,而直线检测则是其中、最常用的技巧。因此直线检测的正确性与效率,对整个交互投影系统只管重要。常规的直线检测方法存在很多问题,如Hough直线检测算法,其存在检测速度慢、容易受到噪声干扰的缺点,并且检测结果中容易出现大量虚假的直线,给应用软件造成严重干扰。
如何开发出一种适用于投影交互系统的直线检测方法已经成为急需解决的技术问题。
技术实现要素:
本发明的目的是为了解决现有技术中的直线检测方法无法满足实际需要的缺陷,提供一种用于投影交互系统的直线检测方法来解决上述问题。
为了实现上述目的,本发明的技术方案如下:
一种用于投影交互系统的直线检测方法,包括以下步骤:
边缘像素点的检测,利用canny边缘检测算法从目标图像中检测出边缘像素点;
边缘像素点的筛选,基于不同的处理方法对多样的边缘线条进行处理,以确定像素点的保留或滤除;
直线拟合操作,遍历目标图像中所有的线条,找到最合适的拼接线条,对直线进行拼接和拟合,以得到直线检测结果;
重复直线的滤除,对这些高度平行且距离较近的直线进行规整,以滤除重复的直线。
所述的边缘像素点的筛选包括以下步骤:
单独线条的处理判断,针对单独线条使用连通域分析算法得到该线条连通域的最小外接矩形,若该最小外接矩形的长边大于长边阈值L1,且短边小于短边阈值L2,则认为该子线段为直线,将整个子线段都将作为直线的候选点进行保留;
若干条线条发生粘连的处理判断,在若干条线条粘连的分叉点处将线条进行打断,对每个子线条进行分析,若发现某个线条属于直线,则作为候选点保留下来;若不是直线的子线条,则进行滤除;
短连通域的处理判断,将连通域对应的最小外接矩形的长边小于长边阈值L1的定义为短连通域,将该线条上的所有点标记为二级候选点;
曲线线条的处理判断,将外接矩形不符合尺寸上的要求且线条上也不包含直线子线条的线条定义为曲线线条,对曲线线条整个线条上的所有点均进行滤除。
所述的直线拟合操作为遍历处理目标图像中所有的线条,其包括以下步骤:
找到目标图像中最长的直线子线段,标记为Lmax;
在Lmax周边的范围内,搜索其他的直线子线段,搜索条件如下:
搜索两条直线子线段的方向夹角差小于10°的直线子线段;
搜索两个端点的欧氏距离小于30个像素的直线子线段;
搜索两条平行直线之间的距离小于10个像素的直线子线段;
将仍未匹配的子线段集合定义为S1;
对S1中的子线段进行遍历,按搜索条件进行搜索,并且计算匹配误差;匹配误差为用来拟合成直线的两个子线段上的所有的像素点到拟合结果的距离的总和;
找到S1中匹配误差最小的子线段,记为Lmin;如果该误差小于2个像素,则将Lmax与Lmin融合为新的直线,标记为Lmax,并且更新记录,滤除Lmin的记录;
如果误差大于2个像素,则不予考虑;
遍历处理目标图像中所有的线条,直到所有直线子线段无法匹配为止。
所述的重复直线的滤除包括以下步骤:
找到长度最长的直线段,记为直线MAXl1;
遍历余下的直线段,如果某条直线与直线MAXl平行且距离小于距离阈值L3,且重叠比例高于重叠阈值L4,则删除当前直线段;
找到余下的直线中最长的直线段,记为MAXl2;
重复42步骤和43步骤,直到所有的重复直线都被滤除。
所述的边缘像素点的筛选步骤和直线拟合操作步骤之间还包括边缘的连接步骤,所述的边缘的连接包括以下步骤:
设定距离阈值,小于该距离阈值的线条均与当前线条结合起来进行连接分析,连接分析原理如下:
若某条直线子线条与当前候选线条的拟合误差小于2个像素,且二者的联合外接矩形的高度小于5个像素,其中拟合误差为参与拟合的像素点的位置到拟合后的线条的距离平均值,则将该直线子线条与当前候选线条连接起来;
若距离在30个像素以内的一个候选线条,与当前直接子线条二者联合之后形成的外接矩形在长度和高度上都满足成为线条的条件,则加以连接,其中:线条的条件为高度小于5个像素,长度大于50个像素。
还包括检测结果的后期验证,将明显异常的直线检测结果滤除掉,其包括以下步骤:
将直线上边缘点像素数目与直线段的长度结合起来计算比值,计算公式如下:
r=N/L,其中N是像素点数目,L是直线段长度;
如果比值低于0.4,则认为是错误检测,直接放弃;若比值高于0.4的直线段,认定为正确的结果;
针对两条相邻的子线段,前一条子线段的终点到当前子线段起点的距离为最大间隔距离,若最大间隔距离超过设定的间隔阈值L5,则滤除该结果;对于最大间隔距离小于间隔阈值L5的直线段予以保留;
从直线段的端点出发,依次记录下每一个像素点位置的亮度值,直到另一个端点位置,得到一条亮度变化曲线;
对该曲线进行分析,观察每一个位置的亮度变化率,形成亮度变化曲线上的梯度值;若整条曲线上,每一个位置梯度值小于10,则说明亮度的变化很小,符合亮度值统一性的,认定为直线;若某个位置梯度值大于60,则说明该位置亮度值发生了剧变,不符合亮度值的统一性,判断不是直线;
在每个像素点与直线垂直的两侧,分别取一个20个像素长度的线条,计算该线条上像素的平均亮度值;对同一侧的每个位置的线条上的平均亮度值进行统一性分析,如果直线上所有像素点两侧的平均亮度值都是统一的,则认为是直线,否则进行滤除。
所述的在若干条线条粘连的分叉点处将线条进行打断方法如下:
对线条对应的连通域上的每一个像素进行分析,出现如下情形则打断:
该像素点与三个以上的像素点相连,为一个分叉或交叉位置,将这个像素点滤除,使得若干个线条完全断裂;
该像素点的线条形成角度的夹角值在0°-160°之内,将该像素点滤除,使得原线条变成两段;
该像素点位置为圆弧线与直线段的相接点,将该像素点滤除,使得原线条变成两段。
所述的长边阈值L1为50个像素,短边阈值L2为5个像素。
所述的距离阈值L3为10个像素;重叠阈值L4为0.5个像素。
所述的间隔阈值L5为200个像素。
有益效果
本发明是一种用于投影交互系统的直线检测方法,与现有技术相比具有受光照干扰少、直线检测正确率高、速度快的优点。
外界光照照射在投影区域之后,导致该区域亮度发生不规则的变化,边缘检测的结果很容易出现断裂的现象。本发明通过边缘的结构和形状进行深层次分析,将距离较近的线条连接起来,因此将光照造成的断裂现象降低到了最少。本发明对直线检测的结果进行后期验证,首先滤除重复直线,然后从直线上的边缘点数目、直线上线条最大间距、直线上像素亮度的均匀性、直线两侧内容的统一性四个方面进行验证,判断检测结果是否正确。这种多角度的考察方法,基本上杜绝了错误直线的出现。同时,本发明对可能拼合的线条从位置、方向、形状上进行分析,提前将无法拼合的线条过滤,从而降低了搜索空间,提高了直线检测的速度。
附图说明
图1为本发明的方法流程图。
具体实施方式
为使对本发明的结构特征及所达成的功效有更进一步的了解与认识,用以较佳的实施例及附图配合详细的说明,说明如下:
在直线检测方法开始之前,投影交互系统会将标定图像通过投影仪投射到墙壁上,然后利用摄像机抓拍此时的场景图像。由于标定图像中存在大量的直线段,因此需要利用直线检测方法进行提取和定位。在得到所有的直线检测结果之后,就可以得到标定点的坐标位置,进而得到映射关系,完成标定。
如图1所示,本发明所述的一种用于投影交互系统的直线检测方法,包括以下步骤:
第一步,边缘像素点的检测。利用canny边缘检测算法从目标图像中检测出边缘像素点。在此采用传统的Canny边缘检测算法完成,Canny边缘检测算法能够检测各种尺度的边缘像素点,并且可以适应一定的光照变化,为目前最为流行的边缘检测算法。在检测结果中,所有的边缘点以白色像素点的方式表达。
第二步,边缘像素点的筛选。基于不同的处理方法对多样的边缘线条进行处理,以确定像素点的保留或滤除。利用canny算子得到的初步检测结果中,可能会存在大量的非直线像素。这些像素必须滤除,否则会对最终的直线检测效果形成严重干扰。边缘线条存在多种情况,它们需要分别用不同的策略加以处理,以决定哪些像素需要保留,哪些像素需要滤除。其具体包括以下步骤:
(1)单独线条的处理判断。针对单独线条使用连通域分析算法得到该线条连通域的最小外接矩形,若该最小外接矩形的长边大于长边阈值L1,且短边小于短边阈值L2,则认为该子线段为直线,将整个子线段都将作为直线的候选点进行保留。在此,长边阈值L1和短边阈值L2根据实际需要和经验来设置,长边阈值L1可以为50个像素,短边阈值L2可以为5个像素。
(2)若干条线条发生粘连的处理判断。当一个连通域比较复杂,由多根线条组合而成的时候,则需要在分叉点将线条进行打断,然后对每个子线条进行分析。即在若干条线条粘连的分叉点处将线条进行打断,对每个子线条进行分析,若发现某个线条属于直线,则作为候选点保留下来;若不是直线的子线条,则进行滤除。
其中,在若干条线条粘连的分叉点处将线条进行打断方法为,对线条对应的连通域(已经进行骨架提取,保证线条的宽度一定是1个像素)上的每一个像素进行分析,出现如下情形则打断:
A、该像素点与三个以上的像素点相连,为一个分叉或交叉位置,将这个像素点滤除,使得若干个线条完全断裂。
B、该像素点的线条形成角度的夹角值在0°-160°之内,将该像素点滤除,使得原线条变成两段。
C、该像素点位置为圆弧线与直线段的相接点,将该像素点滤除,使得原线条变成两段。
(3)短连通域的处理判断。将连通域对应的最小外接矩形的长边小于长边阈值L1的定义为短连通域,将该线条上的所有点标记为二级候选点。
(4)曲线线条的处理判断。将外接矩形不符合尺寸上的要求且线条上也不包含直线子线条的线条定义为曲线线条,其中尺寸上的要求参照长边阈值L1和短边阈值L2即可,对曲线线条整个线条上的所有点均进行滤除。
第三步,直线拟合操作。遍历目标图像中所有的线条,找到最合适的拼接线条,对直线进行拼接和拟合,以得到直线检测结果。本发明中的直线拟合方法,是每个子线段都与周边的其他子线段逐层匹配得到的。这样不仅可以减低搜索空间,节约时间,也可以降低错误结果的概率。图像中的直线子段数目较多时,如果每一个子线段都按照遍历的方式进行搜索,则会严重降低整体算法的性能。直线拟合操作为遍历处理目标图像中所有的线条,其包括以下步骤:
(1)找到目标图像中最长的直线子线段,标记为Lmax。
(2)在Lmax周边的范围内,搜索其他的直线子线段,搜索条件如下:
A、搜索两条直线子线段的方向夹角差小于10°的直线子线段;
B、搜索两个端点的欧氏距离小于30个像素的直线子线段;
C、搜索两条平行直线之间的距离小于10个像素的直线子线段。
(3)将仍未匹配的子线段集合定义为S1,
对S1中的子线段进行遍历,按搜索条件进行搜索,并且计算匹配误差。匹配误差为用来拟合成直线的两个子线段上的所有的像素点到拟合结果的距离的总和。
找到S1中匹配误差最小的子线段,记为Lmin;如果该误差小于2个像素,则将Lmax与Lmin融合为新的直线,标记为Lmax,并且更新记录,滤除Lmin的记录;
如果误差大于2个像素,则不予考虑。
(4)遍历处理目标图像中所有的线条,直到所有直线子线段无法匹配为止。
第四步,重复直线的滤除,对这些高度平行且距离较近的直线进行规整,以滤除重复的直线。很多时候,真实场景中的某条直线位置,可能检测出好几条直线,每条直线的方向都比较接近,距离也很近。其实这些直线都是因为重复检测造成的。为了提高结果的准确性,需要对这些高度平行且距离较近的直线进行规整,以滤除重复的直线。其具体步骤如下:
(1)找到长度最长的直线段,记为直线MAXl1。
(2)遍历余下的直线段,如果某条直线与直线MAXl平行且距离小于距离阈值L3,且重叠比例高于重叠阈值L4,则删除当前直线段。其中:距离阈值L3可以为10个像素,重叠阈值L4可以为0.5个像素。
(3)找到余下的直线中最长的直线段,记为MAXl2。
(4)重复42步骤和43步骤,直到所有的重复直线都被滤除。
为了进一步降低直线检测过程中的漏检,降低错误率,可以对经过筛选以后的线条进行连接,将距离足够近满足连接条件的线条连接起来,以提高质量和效率。为此首先需要设定一个距离阈值,小于该距离阈值的线条都可以跟当前线条结合起来进行分析尝试连接。即在边缘像素点的筛选步骤和直线拟合操作步骤之间还可以加入边缘的连接步骤,边缘的连接包括以下步骤:
设定距离阈值,小于该距离阈值的线条均与当前线条结合起来进行连接分析,连接分析原理如下:
(1)若某条直线子线条与当前候选线条的拟合误差小于2个像素,且二者的联合外接矩形的高度小于5个像素,其中拟合误差为参与拟合的像素点的位置到拟合后的线条的距离平均值,则将该直线子线条与当前候选线条连接起来。
(2)若距离在30个像素以内的一个候选线条,与当前直接子线条二者联合之后形成的外接矩形在长度和高度上都满足成为线条的条件,则加以连接,其中:线条的条件为高度小于5个像素,长度大于50个像素。
为了将明显异常的直线检测结果滤除,还可以在重复直线的滤除步骤后再进行检测结果的后期验证,将明显异常的直线检测结果滤除掉,其包括以下步骤:
(1)Hough直线检测算法得到的检测结果中,很多直线上其实前景像素数目很少,这是明显的错误检测。本专利的方法,为了避免这个问题,将直线上边缘点像素数目与直线段的长度结合起来计算比值。如果比值太低,则认为是错误检测,直接放弃。只有比值较高的直线段,才作为正确的结果。
即将直线上边缘点像素数目与直线段的长度结合起来计算比值,计算公式如下:
r=N/L,其中N是像素点数目,L是直线段长度;
如果比值低于0.4,则认为是错误检测,直接放弃;若比值高于0.4的直线段,认定为正确的结果。
(2)直线段由多条子线段组合而成,则需要考虑其中最大的子线段间隔。子线段间隔是指:两条相邻的子线段,前一条子线段的终点到当前子线段起点的距离。针对两条相邻的子线段,前一条子线段的终点到当前子线段起点的距离定义为最大间隔距离,若最大间隔距离超过设定的间隔阈值L5,则滤除该结果;对于最大间隔距离小于间隔阈值L5的直线段予以保留,其中,间隔阈值L5为200个像素。
(3)通过分析直线点像素值的变化规律来判断检测结果是否正确。但是由于受到外界光照的干扰,直线点的像素值并不是完全一样的,而很可能出现亮度值渐变的现象。因此为了排除这种干扰,需要对直线点的亮度渐变特性进行分析。
从直线段的端点出发,依次记录下每一个像素点位置的亮度值,直到另一个端点位置,得到一条亮度变化曲线。
对该曲线进行分析,观察每一个位置的亮度变化率,形成亮度变化曲线上的梯度值;若整条曲线上,每一个位置梯度值小于10,则说明亮度的变化很小,符合亮度值统一性的,认定为直线;若某个位置梯度值大于60,则说明该位置亮度值发生了剧变,不符合亮度值的统一性,判断不是直线。
(4)考虑直线两侧图像内容的统一性。在每个像素点与直线垂直的两侧,分别取一个20个像素长度的线条,计算该线条上像素的平均亮度值;对同一侧的每个位置的线条上的平均亮度值进行统一性分析,如果直线上所有像素点两侧的平均亮度值都是统一的,则认为是直线,否则进行滤除。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是本发明的原理,在不脱离本发明精神和范围的前提下本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明的范围内。本发明要求的保护范围由所附的权利要求书及其等同物界定。