一种基于LAPJV算法的直线检测方法与流程

文档序号:11584521阅读:1356来源:国知局

【技术领域】

本发明提出了一种用于优化图像直线检测结果的方法,具体涉及一种基于lapjv算法的直线检测方法。



背景技术:

在图像处理领域,直线检测是必不可少的一环。基于edline的直线检测结果,会有许多本该在一条直线段的直线在检测结果却是多条分离的直线段。这样的结果对后续的图像处理,比如直线匹配会有很大的负面影响。

基于以上技术问题,本发明提出了基于lapjv算法的直线检测优化方法。



技术实现要素:

本发明提供了一种基于lapjv算法的直线检测方法,获取的直线较为准确,且对后续的图像处理精度有有利影响。

本发明采用以下技术方案:

一种基于lapjv算法的直线检测方法,包括以下步骤:

(1)提取直线段的起始点和终止点坐标以及直线段角度;

(2)筛出不符合要求的直线段;

(3)设置相似度参数,并计算保留的每条直线段与其他直线段的相似度,构成row×row矩阵;

(4)根据步骤(3)的结果利用lapjv算法,获得最大优化情况下的匹配直线段对;

(5)根据步骤(4)匹配的直线段对,对直线段进行分类;

(6)将不同类别的直线段拟合并返回拟合之后的直线结果。

进一步,步骤(2)的具体方法为:首先,计算直线段的长度,将所有直线按照直线长度从小到大进行排序,并设定与直线段数量相关的固定比例因子,筛除直线序号与直线总数量比例小于固定比例因子的直线段。

进一步,所述的固定比例因子为直线段数量的五分之一到八分之一。

进一步,所述的相似度参数包括:距离δs,距离相似度σ2,角度差δθ,角度相似度σ1,距离影响力调节参数x1,角度影响力调节参数x2,其中,距离是指:两条直线围起来的不规则四边形的面积,角度差为两条直线角度的相减结果。

进一步,所述的直线段与其他直线段的相似度根据以下公式计算:

进一步,步骤(4)的具体方法为:

(4.1)将row×row矩阵的上三角取负,下三角去负无穷;

(4.2)将步骤(4.1)所得的矩阵利用lapjv算法计算出匹配的直线段对的序号。

进一步,步骤(5)中,对直线段分类的方法为:

分配矩阵assign是一个1×n的行向量,其中,n表示直线段的数量,当直线段有对应的分配直线时,该行向量的该位值就填写所对应的分配直线的序号;当直线没有对应的分配直线的时候,行向量该位的值为0;

设置一个变量sp,记录每一类直线族开始的直线序号,设置一个中间临时变量ep,用来存放assign的列值,设置一个中间变量s,用来临时存放assign中sp列中的数据,同时设置一个空矩阵resultp,用于存放直线族的信息;

具体方法如下:

(5.1)将i的值赋予sp,同时,设置ep的值为0,i=1,2,3,……column,其中,column为assign的列数;

(5.2)判断assign中第sp列中的数据是否大于0,如果大于0,则将该sp列中的数据赋予ep,同时,将assign中对应sp列的数据赋值为-1,并将ep的值赋值给s;

(5.3)判断s是否大于0,如果s的值大于0,进行以下while循环,如果s的值小于0,则返回步骤(5.1),进入下一个循环:

将assign对应s列的值赋值给ep,将sp和s组合成一个二维行向量[sp,s],并将[sp,s]放入resultp的第m行中(m为resultp的行数+1,当resultp为空矩阵时,resultp的行数为0),然后将assign对应s列的值赋值为-1,最后将ep的值赋值给s;

(5.4)重复步骤(5.3)。

进一步,步骤(6)的具体方法为:

(6.1)将获得不同类直线段序号对应直线的起始点和终止点,按固定距离取点;

(6.2)利用最小二乘法对同类直线段的离散点进行直线拟合;

(6.3)每个分类获得各自的拟合直线。

步骤(6.1)中按固定距离取点指:每一个直线段按照固定距离分为一系列的离散点。

与现有技术相比,本发明至少具有以下有益效果:在本发明方法中,首选筛除掉不符合要求的直线段,其次,设置相似度参数,并据此计算每条直线段与其他直线段之间的相似度,接着,利用lapjv算法获取匹配直线段对,再对直线段进行分类,最终拟合直线。根据本发明方法获取的直线较为准确,且对后续的图像处理精度有有利影响。

【附图说明】

图1为本发明方法流程图。

【具体实施方式】

本发明基于lapjv算法,对edline的直线检测结果进行优化。当edline检测完一幅图像的直线之后,结果中的直线会有本应在一条直线上的直线段却未能连接起来的情况,严重影响直线检测结果在直线匹配中的应用。本发明的输入是edline的直线检测结果,对检测直线的长度进行排序,依据排序结果选取合适的直线长度作为筛选阈值。计算所有可能的直线对的相似度,对相似度作用广义线性规划,获得最大优化情况下的匹配直线对。依据匹配直线对结果对所有直线段进行分类。最后通过最小二乘法将不同类的直线进行拟合,获得最终的优化结果。

本发明提供的基于lapjv算法的直线检测方法,包括以下步骤:

(1)输入基于edline提取出的直线段信息:包括直线段的起始点和终止点的坐标,直线段的角度;

(2)依据直线段长度筛选阈值,预先筛掉直线长度不符合要求的直线段,具体方法为:

(2.1)获取步骤(1)中直线的起始点和终止点坐标;

(2.2)依据步骤(2.1)中直线的坐标,计算直线的长度;

(2.3)将步骤(2.2)中直线的长度存储;

(2.4)将步骤(2.3)中存储的直线长度进行排序;

(2.5)依据步骤(2.4)中的排序结果,设定固定比例因子,选取合适的直线段长度阈值。设定的固定比例因子为整个直线段数量的五分之一至八分之一,在排好序的直线段中,筛除掉最短的五分之一到八分之一的直线段(例如,一共是160条直线段,若固定比例因子设定为直线段数量的五分之一,为32,则在所有直线段中,筛除掉最短的32条直线段,直线段长度阈值为筛除掉最短的32条直线段后,在保留的直线段中,最短的直线段长度)。

(3)设定相似度参数:距离,距离相似度参数,角度差,角度相似度参数,距离影响力调节参数,角度影响力调节参数:距离是指两条直线围起来的不规则四边形的面积,在相似度公式中用δs表示;角度差为两条直线角度的相减结果,在公式中用δθ表示;角度相似度参数,距离相似度参数,距离影响力调节参数,角度影响力调节参数在公式中分别用σ1σ2x1x2表示;

(4)计算描述直线段对相似度的上三角矩阵,具体过程为:

根据步骤(3)中设定的相似度参数,计算每条直线段与其他直线段的相似度similarity:

上式中,x1和x2相当于混合高斯模型中的α1和α2,表示样本集合1类和2类被选中的概率;σ1和σ2相当于混合高斯模型中σ1和σ2乘以一个比例因子,决定了变量频数的分布。

所有直线段的相似度构成一个row×row的矩阵,row为直线段的数量。

相似的两条直线段称为直线段对。

由于直线段对的相似度具有对称性,所以上述row×row矩阵的上三角和下三角是完全相同的。

(5)利用lapjv算法(详细的lapjv算法参见1986年发表在“computing”上的文章,文章标题为“ashortestaugementingpathalgorithmfordenseandsparselinearassignmentproblems”,网址:https://link.springer.com/article/10.1007/bf02278710)结合直线相似度上三角矩阵,获得最大优化情况下的匹配直线段对,具体过程为:

(5.1)将步骤(4)中row×row矩阵的上三角取负,下三角取负无穷;

(5.2)将步骤(5.1)所得的lapjv算法计算出匹配的直线段对的序号。

(6)依据步骤(5)输出的匹配直线段对对应的序号,将直线段进行分类,具体方法为:

分配矩阵assign是一个1×n的行向量,其中,n表示直线个数。当直线有对应的分配直线的时候,行向量该位的值就填写所对应的分配直线的序号;当直线没有对应的分配直线的时候,行向量该位的值为0。

设置一个变量sp,记录的是每一类直线族开始的直线序号;设置一个中间临时变量ep,用来存放assign的列值;设置一个中间变量s,用来临时存放assign中sp列中的数据;同时设置一个空矩阵resultp,用于存放直线族的信息。

i作为一个for循环计数器,值域是1至column,每次循环i的值加1。

具体过程如下:

(6.1)将i的值赋予sp,同时,设置ep的值为0;

(6.2)判断assign中第sp列中的数据是否大于0,如果大于0,则将该sp列中的数据赋予ep,同时,将assign中对应sp列的数据赋值为-1,并将ep的值赋值给s;

(6.3)判断s是否大于0,如果s的值大于0,进行以下while循环,如果s的值小于0,则返回步骤(6.1),进入下一个循环:

将assign对应s列的值赋值给ep,将sp和s组合成一个二维行向量[sp,s],并将[sp,s]放入resultp的第m行中(m为resultp的行数+1,当resultp为空矩阵时,resultp的行数为0),然后将assign对应s列的值赋值为-1,最后将ep的值赋值给s。

(6.4)重复步骤(6.3)。

经过以上步骤,就可以得出每类直线的分类信息。

(7)将多种直线分类进行最小二乘法直线拟合并返回拟合之后的直线结果,具体过程为:

(7.1)将获得不同类直线段序号对应直线的起始点和终止点,按固定距离取点(将每一个直线段按照固定距离分为一系列的离散点);

(7.2)利用最小二乘法对同类直线段的离散点进行直线拟合;

(7.3)每个分类获得各自的拟合直线。

实施例:

将txt中提取的直线段的信息,直线段的端点坐标,直线段的方向,读取到矩阵m中;

计算矩阵m的行数和列数,并将结果存储在rows和cols中;

计算每条直线段的长度并存储;

对存储的直线段长度进行按从小到大的方法进行排序;

取rows/8处的直线长度作为直线段长度的筛选阈值;

建立一个大小为rows*rows,初始值全部为0的矩阵uptri,存储筛选之后直线段对的相似度,相似度计算参数在本文中的具体数值如下:

角度相似度参数20,距离相似度参数80,距离影响力调节参数0.5,角度影响力调节参数0.5。

将uptri中所有0替换为-inf,然后将uptri所有值取负。

对经过上述处理的uptri作用广义线性规划算法,获得匹配的直线对assign。

基于assign获得直线分类。

每隔距离1将不同类别中的直线打散成多个离散点,基于最小二乘法,对同一类的离散点进行拟合,获得直线优化结果。

以上所述仅为本发明的一种实施方法,不是全部或唯一的实施方式,本领域技术人员通过阅读本发明说明书而对本发明技术方案采取的任何等效的变换,均为本发明的权利要求所涵盖。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1