【技術(shù)領(lǐng)域】
本發(fā)明提出了一種用于優(yōu)化圖像直線檢測(cè)結(jié)果的方法,具體涉及一種基于lapjv算法的直線檢測(cè)方法。
背景技術(shù):
在圖像處理領(lǐng)域,直線檢測(cè)是必不可少的一環(huán)?;趀dline的直線檢測(cè)結(jié)果,會(huì)有許多本該在一條直線段的直線在檢測(cè)結(jié)果卻是多條分離的直線段。這樣的結(jié)果對(duì)后續(xù)的圖像處理,比如直線匹配會(huì)有很大的負(fù)面影響。
基于以上技術(shù)問(wèn)題,本發(fā)明提出了基于lapjv算法的直線檢測(cè)優(yōu)化方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種基于lapjv算法的直線檢測(cè)方法,獲取的直線較為準(zhǔn)確,且對(duì)后續(xù)的圖像處理精度有有利影響。
本發(fā)明采用以下技術(shù)方案:
一種基于lapjv算法的直線檢測(cè)方法,包括以下步驟:
(1)提取直線段的起始點(diǎn)和終止點(diǎn)坐標(biāo)以及直線段角度;
(2)篩出不符合要求的直線段;
(3)設(shè)置相似度參數(shù),并計(jì)算保留的每條直線段與其他直線段的相似度,構(gòu)成row×row矩陣;
(4)根據(jù)步驟(3)的結(jié)果利用lapjv算法,獲得最大優(yōu)化情況下的匹配直線段對(duì);
(5)根據(jù)步驟(4)匹配的直線段對(duì),對(duì)直線段進(jìn)行分類;
(6)將不同類別的直線段擬合并返回?cái)M合之后的直線結(jié)果。
進(jìn)一步,步驟(2)的具體方法為:首先,計(jì)算直線段的長(zhǎng)度,將所有直線按照直線長(zhǎng)度從小到大進(jìn)行排序,并設(shè)定與直線段數(shù)量相關(guān)的固定比例因子,篩除直線序號(hào)與直線總數(shù)量比例小于固定比例因子的直線段。
進(jìn)一步,所述的固定比例因子為直線段數(shù)量的五分之一到八分之一。
進(jìn)一步,所述的相似度參數(shù)包括:距離δs,距離相似度σ2,角度差δθ,角度相似度σ1,距離影響力調(diào)節(jié)參數(shù)x1,角度影響力調(diào)節(jié)參數(shù)x2,其中,距離是指:兩條直線圍起來(lái)的不規(guī)則四邊形的面積,角度差為兩條直線角度的相減結(jié)果。
進(jìn)一步,所述的直線段與其他直線段的相似度根據(jù)以下公式計(jì)算:
進(jìn)一步,步驟(4)的具體方法為:
(4.1)將row×row矩陣的上三角取負(fù),下三角去負(fù)無(wú)窮;
(4.2)將步驟(4.1)所得的矩陣?yán)胠apjv算法計(jì)算出匹配的直線段對(duì)的序號(hào)。
進(jìn)一步,步驟(5)中,對(duì)直線段分類的方法為:
分配矩陣assign是一個(gè)1×n的行向量,其中,n表示直線段的數(shù)量,當(dāng)直線段有對(duì)應(yīng)的分配直線時(shí),該行向量的該位值就填寫(xiě)所對(duì)應(yīng)的分配直線的序號(hào);當(dāng)直線沒(méi)有對(duì)應(yīng)的分配直線的時(shí)候,行向量該位的值為0;
設(shè)置一個(gè)變量sp,記錄每一類直線族開(kāi)始的直線序號(hào),設(shè)置一個(gè)中間臨時(shí)變量ep,用來(lái)存放assign的列值,設(shè)置一個(gè)中間變量s,用來(lái)臨時(shí)存放assign中sp列中的數(shù)據(jù),同時(shí)設(shè)置一個(gè)空矩陣resultp,用于存放直線族的信息;
具體方法如下:
(5.1)將i的值賦予sp,同時(shí),設(shè)置ep的值為0,i=1,2,3,……column,其中,column為assign的列數(shù);
(5.2)判斷assign中第sp列中的數(shù)據(jù)是否大于0,如果大于0,則將該sp列中的數(shù)據(jù)賦予ep,同時(shí),將assign中對(duì)應(yīng)sp列的數(shù)據(jù)賦值為-1,并將ep的值賦值給s;
(5.3)判斷s是否大于0,如果s的值大于0,進(jìn)行以下while循環(huán),如果s的值小于0,則返回步驟(5.1),進(jìn)入下一個(gè)循環(huán):
將assign對(duì)應(yīng)s列的值賦值給ep,將sp和s組合成一個(gè)二維行向量[sp,s],并將[sp,s]放入resultp的第m行中(m為resultp的行數(shù)+1,當(dāng)resultp為空矩陣時(shí),resultp的行數(shù)為0),然后將assign對(duì)應(yīng)s列的值賦值為-1,最后將ep的值賦值給s;
(5.4)重復(fù)步驟(5.3)。
進(jìn)一步,步驟(6)的具體方法為:
(6.1)將獲得不同類直線段序號(hào)對(duì)應(yīng)直線的起始點(diǎn)和終止點(diǎn),按固定距離取點(diǎn);
(6.2)利用最小二乘法對(duì)同類直線段的離散點(diǎn)進(jìn)行直線擬合;
(6.3)每個(gè)分類獲得各自的擬合直線。
步驟(6.1)中按固定距離取點(diǎn)指:每一個(gè)直線段按照固定距離分為一系列的離散點(diǎn)。
與現(xiàn)有技術(shù)相比,本發(fā)明至少具有以下有益效果:在本發(fā)明方法中,首選篩除掉不符合要求的直線段,其次,設(shè)置相似度參數(shù),并據(jù)此計(jì)算每條直線段與其他直線段之間的相似度,接著,利用lapjv算法獲取匹配直線段對(duì),再對(duì)直線段進(jìn)行分類,最終擬合直線。根據(jù)本發(fā)明方法獲取的直線較為準(zhǔn)確,且對(duì)后續(xù)的圖像處理精度有有利影響。
【附圖說(shuō)明】
圖1為本發(fā)明方法流程圖。
【具體實(shí)施方式】
本發(fā)明基于lapjv算法,對(duì)edline的直線檢測(cè)結(jié)果進(jìn)行優(yōu)化。當(dāng)edline檢測(cè)完一幅圖像的直線之后,結(jié)果中的直線會(huì)有本應(yīng)在一條直線上的直線段卻未能連接起來(lái)的情況,嚴(yán)重影響直線檢測(cè)結(jié)果在直線匹配中的應(yīng)用。本發(fā)明的輸入是edline的直線檢測(cè)結(jié)果,對(duì)檢測(cè)直線的長(zhǎng)度進(jìn)行排序,依據(jù)排序結(jié)果選取合適的直線長(zhǎng)度作為篩選閾值。計(jì)算所有可能的直線對(duì)的相似度,對(duì)相似度作用廣義線性規(guī)劃,獲得最大優(yōu)化情況下的匹配直線對(duì)。依據(jù)匹配直線對(duì)結(jié)果對(duì)所有直線段進(jìn)行分類。最后通過(guò)最小二乘法將不同類的直線進(jìn)行擬合,獲得最終的優(yōu)化結(jié)果。
本發(fā)明提供的基于lapjv算法的直線檢測(cè)方法,包括以下步驟:
(1)輸入基于edline提取出的直線段信息:包括直線段的起始點(diǎn)和終止點(diǎn)的坐標(biāo),直線段的角度;
(2)依據(jù)直線段長(zhǎng)度篩選閾值,預(yù)先篩掉直線長(zhǎng)度不符合要求的直線段,具體方法為:
(2.1)獲取步驟(1)中直線的起始點(diǎn)和終止點(diǎn)坐標(biāo);
(2.2)依據(jù)步驟(2.1)中直線的坐標(biāo),計(jì)算直線的長(zhǎng)度;
(2.3)將步驟(2.2)中直線的長(zhǎng)度存儲(chǔ);
(2.4)將步驟(2.3)中存儲(chǔ)的直線長(zhǎng)度進(jìn)行排序;
(2.5)依據(jù)步驟(2.4)中的排序結(jié)果,設(shè)定固定比例因子,選取合適的直線段長(zhǎng)度閾值。設(shè)定的固定比例因子為整個(gè)直線段數(shù)量的五分之一至八分之一,在排好序的直線段中,篩除掉最短的五分之一到八分之一的直線段(例如,一共是160條直線段,若固定比例因子設(shè)定為直線段數(shù)量的五分之一,為32,則在所有直線段中,篩除掉最短的32條直線段,直線段長(zhǎng)度閾值為篩除掉最短的32條直線段后,在保留的直線段中,最短的直線段長(zhǎng)度)。
(3)設(shè)定相似度參數(shù):距離,距離相似度參數(shù),角度差,角度相似度參數(shù),距離影響力調(diào)節(jié)參數(shù),角度影響力調(diào)節(jié)參數(shù):距離是指兩條直線圍起來(lái)的不規(guī)則四邊形的面積,在相似度公式中用δs表示;角度差為兩條直線角度的相減結(jié)果,在公式中用δθ表示;角度相似度參數(shù),距離相似度參數(shù),距離影響力調(diào)節(jié)參數(shù),角度影響力調(diào)節(jié)參數(shù)在公式中分別用σ1σ2x1x2表示;
(4)計(jì)算描述直線段對(duì)相似度的上三角矩陣,具體過(guò)程為:
根據(jù)步驟(3)中設(shè)定的相似度參數(shù),計(jì)算每條直線段與其他直線段的相似度similarity:
上式中,x1和x2相當(dāng)于混合高斯模型中的α1和α2,表示樣本集合1類和2類被選中的概率;σ1和σ2相當(dāng)于混合高斯模型中σ1和σ2乘以一個(gè)比例因子,決定了變量頻數(shù)的分布。
所有直線段的相似度構(gòu)成一個(gè)row×row的矩陣,row為直線段的數(shù)量。
相似的兩條直線段稱為直線段對(duì)。
由于直線段對(duì)的相似度具有對(duì)稱性,所以上述row×row矩陣的上三角和下三角是完全相同的。
(5)利用lapjv算法(詳細(xì)的lapjv算法參見(jiàn)1986年發(fā)表在“computing”上的文章,文章標(biāo)題為“ashortestaugementingpathalgorithmfordenseandsparselinearassignmentproblems”,網(wǎng)址:https://link.springer.com/article/10.1007/bf02278710)結(jié)合直線相似度上三角矩陣,獲得最大優(yōu)化情況下的匹配直線段對(duì),具體過(guò)程為:
(5.1)將步驟(4)中row×row矩陣的上三角取負(fù),下三角取負(fù)無(wú)窮;
(5.2)將步驟(5.1)所得的lapjv算法計(jì)算出匹配的直線段對(duì)的序號(hào)。
(6)依據(jù)步驟(5)輸出的匹配直線段對(duì)對(duì)應(yīng)的序號(hào),將直線段進(jìn)行分類,具體方法為:
分配矩陣assign是一個(gè)1×n的行向量,其中,n表示直線個(gè)數(shù)。當(dāng)直線有對(duì)應(yīng)的分配直線的時(shí)候,行向量該位的值就填寫(xiě)所對(duì)應(yīng)的分配直線的序號(hào);當(dāng)直線沒(méi)有對(duì)應(yīng)的分配直線的時(shí)候,行向量該位的值為0。
設(shè)置一個(gè)變量sp,記錄的是每一類直線族開(kāi)始的直線序號(hào);設(shè)置一個(gè)中間臨時(shí)變量ep,用來(lái)存放assign的列值;設(shè)置一個(gè)中間變量s,用來(lái)臨時(shí)存放assign中sp列中的數(shù)據(jù);同時(shí)設(shè)置一個(gè)空矩陣resultp,用于存放直線族的信息。
i作為一個(gè)for循環(huán)計(jì)數(shù)器,值域是1至column,每次循環(huán)i的值加1。
具體過(guò)程如下:
(6.1)將i的值賦予sp,同時(shí),設(shè)置ep的值為0;
(6.2)判斷assign中第sp列中的數(shù)據(jù)是否大于0,如果大于0,則將該sp列中的數(shù)據(jù)賦予ep,同時(shí),將assign中對(duì)應(yīng)sp列的數(shù)據(jù)賦值為-1,并將ep的值賦值給s;
(6.3)判斷s是否大于0,如果s的值大于0,進(jìn)行以下while循環(huán),如果s的值小于0,則返回步驟(6.1),進(jìn)入下一個(gè)循環(huán):
將assign對(duì)應(yīng)s列的值賦值給ep,將sp和s組合成一個(gè)二維行向量[sp,s],并將[sp,s]放入resultp的第m行中(m為resultp的行數(shù)+1,當(dāng)resultp為空矩陣時(shí),resultp的行數(shù)為0),然后將assign對(duì)應(yīng)s列的值賦值為-1,最后將ep的值賦值給s。
(6.4)重復(fù)步驟(6.3)。
經(jīng)過(guò)以上步驟,就可以得出每類直線的分類信息。
(7)將多種直線分類進(jìn)行最小二乘法直線擬合并返回?cái)M合之后的直線結(jié)果,具體過(guò)程為:
(7.1)將獲得不同類直線段序號(hào)對(duì)應(yīng)直線的起始點(diǎn)和終止點(diǎn),按固定距離取點(diǎn)(將每一個(gè)直線段按照固定距離分為一系列的離散點(diǎn));
(7.2)利用最小二乘法對(duì)同類直線段的離散點(diǎn)進(jìn)行直線擬合;
(7.3)每個(gè)分類獲得各自的擬合直線。
實(shí)施例:
將txt中提取的直線段的信息,直線段的端點(diǎn)坐標(biāo),直線段的方向,讀取到矩陣m中;
計(jì)算矩陣m的行數(shù)和列數(shù),并將結(jié)果存儲(chǔ)在rows和cols中;
計(jì)算每條直線段的長(zhǎng)度并存儲(chǔ);
對(duì)存儲(chǔ)的直線段長(zhǎng)度進(jìn)行按從小到大的方法進(jìn)行排序;
取rows/8處的直線長(zhǎng)度作為直線段長(zhǎng)度的篩選閾值;
建立一個(gè)大小為rows*rows,初始值全部為0的矩陣uptri,存儲(chǔ)篩選之后直線段對(duì)的相似度,相似度計(jì)算參數(shù)在本文中的具體數(shù)值如下:
角度相似度參數(shù)20,距離相似度參數(shù)80,距離影響力調(diào)節(jié)參數(shù)0.5,角度影響力調(diào)節(jié)參數(shù)0.5。
將uptri中所有0替換為-inf,然后將uptri所有值取負(fù)。
對(duì)經(jīng)過(guò)上述處理的uptri作用廣義線性規(guī)劃算法,獲得匹配的直線對(duì)assign。
基于assign獲得直線分類。
每隔距離1將不同類別中的直線打散成多個(gè)離散點(diǎn),基于最小二乘法,對(duì)同一類的離散點(diǎn)進(jìn)行擬合,獲得直線優(yōu)化結(jié)果。
以上所述僅為本發(fā)明的一種實(shí)施方法,不是全部或唯一的實(shí)施方式,本領(lǐng)域技術(shù)人員通過(guò)閱讀本發(fā)明說(shuō)明書(shū)而對(duì)本發(fā)明技術(shù)方案采取的任何等效的變換,均為本發(fā)明的權(quán)利要求所涵蓋。