本發(fā)明涉及圖像處理技術(shù),特別涉及立體匹配技術(shù)。
背景技術(shù):
作為計算機視覺的一個很重要分支,雙目立體視覺是由一臺通過移動或者轉(zhuǎn)動視角來拍攝同一幅場景的攝像機或者是模擬雙眼的兩個攝像頭拍攝同一個物體,然后利用立體匹配算法求出兩幅圖像對應像點間的視差,結(jié)合視差圖像與攝像機標定所得參數(shù)求出場景內(nèi)被測物體各點的三維坐標,進而重建出場景的三維結(jié)構(gòu)信息并獲得相應點的深度值,此深度值即為攝像機與被測物體之間的實際距離。一個完整的立體視覺系統(tǒng)一般可以由圖像獲取、攝像機標定、特征提取、立體匹配、深度確定及內(nèi)插重建6個部分組成。立體匹配是雙目立體視覺中最重要、最核心的問題。它解決的是對于同一空間景物上的一點在參考圖像上的投影點如何在匹配圖像上找到其對應點的問題。立體匹配是移動機器人視覺導航領(lǐng)域的關(guān)鍵技術(shù),主要應用領(lǐng)域有:機器人視覺、自動駕駛汽車、測量等領(lǐng)域。
目前大部分立體匹配算法都包括四個步驟:(1)代價計算,(2)代價聚合,(3)視差計算和優(yōu)化,(4)視差求精??傮w來說,立體匹配算法可以分為兩類:局部立體匹配算法和全局立體匹配算法。局部立體匹配算法利用一個窗口內(nèi)的顏色或灰度信息來確定每個點的視差值。而全局立體匹配算法基于平滑性假設(shè),并且利用能量最小化技術(shù)同時確定所有點的視差值。
全局立體匹配算法利用圖像的平滑項和數(shù)據(jù)項兩項約束項求解整體能量的最小值。能夠很好的解決低紋理區(qū)域的誤匹配現(xiàn)象。全局立體匹配算法的代表有圖割法、動態(tài)規(guī)劃算法、置信度傳播算法等。但是算法運算量大,不適合實時系統(tǒng)。
局部立體匹配算法由于每個點僅僅依賴局部信息,通過計算匹配窗口內(nèi)的總匹配代價,利用WTA策略找到最小的匹配代價,來確定視差。若采用固定的小尺寸窗口可以保留紋理和邊緣信息,但視差圖噪聲比較大;而采用固定的大尺寸窗口可對局部的匹配進行平滑,在深度不連續(xù)區(qū)域產(chǎn)生前景膨脹效應,視差圖模糊,邊緣的效果很差。局部立體匹配算法的代表有像素差的絕對值(SAD)、自適應窗口算法、自適應權(quán)重算法等。雖然局部立體匹配算法精度不如全局立體匹配算法,但算法運算量小,適合實時系統(tǒng)。
傳統(tǒng)的局部立體匹配方法:自適應權(quán)重算法利用局部自適應支持權(quán)重計算該中心像素和屬于同一區(qū)域相鄰的像素的概率。由于其復雜度取決于匹配窗口的大小,與窗口的大小成平方關(guān)系,自適應窗口速度慢,不能滿足實時性的要求;固定窗口的立體匹配算法雖然運算速度快,但在低紋理區(qū)域處理效果不好,容易出現(xiàn)前景膨脹效應。
目前,局部立體匹配算法的實時性相對于全局立體匹配算法要高。在局部立體匹配算法中,固定窗口的立體匹配算法雖然算法復雜度低,但存在前景膨脹,深度不連續(xù)區(qū)域視差效果差的問題,而自適應窗口和自適應權(quán)重的立體匹配算法雖然大大減少了深度不連續(xù)區(qū)域的誤匹配,但是復雜度高,不適合實時性要求高的場合。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是,提供一種基于邊緣提取的算法復雜度低,適用于實時系統(tǒng)的快速立體匹配方法。
本發(fā)明為解決上述技術(shù)問題所采用的技術(shù)方案是,基于邊緣的局部立體匹配方法,包括以下步驟:
1)對輸入左右圖像利用局部立體匹配算法計算初始視差圖;
2)對視差圖做格點采樣,對格點做刪除非穩(wěn)定點操作得到穩(wěn)定格點;非穩(wěn)定點為與其周圍的超過設(shè)定數(shù)量的格點的視差值的差值均大于閾值的格點;
3)對輸入左圖像的進行Canny邊緣檢測得到邊緣點,剔除孤立邊緣點,得到穩(wěn)定邊緣點;孤立邊緣點為其八鄰域中所包含的邊緣點個數(shù)小于設(shè)定個數(shù)值的邊緣點;
4)對所有含穩(wěn)定格點的列按列掃描,兩個穩(wěn)定點之間的所有點為列插值點,當任意列方向相鄰兩個穩(wěn)定格點之間沒有穩(wěn)定邊緣點,則這兩個穩(wěn)定格點之間的列插值點的視差值為兩個穩(wěn)定格點視差值的線性插值;當任意列方向相鄰兩個穩(wěn)定格點之間有穩(wěn)定邊緣點,則這兩個穩(wěn)定格點之間的列插值點的視差值為穩(wěn)定格點視差值與穩(wěn)定邊緣點視差值的分段線性插值;
5)將穩(wěn)定格點、列插值點和穩(wěn)定邊緣點作為穩(wěn)定點集合,對圖像按行掃描,穩(wěn)定點集合之外所有非穩(wěn)定點的視差值由其同一行中左右最近的兩個穩(wěn)定點視差值進行線性插值得到。
本發(fā)明在得到初始視差圖后,對視差圖進行格點采樣,并刪除不穩(wěn)定的格點,保留穩(wěn)定的格點,對圖像提取Canny邊緣點,將穩(wěn)定邊緣點和穩(wěn)定格點合并為穩(wěn)定點集合,根據(jù)這些穩(wěn)定點對應的視差對其余點進行插值,得到精確的稠密視差圖。
進一步的,本發(fā)明提供一種利用梯度為匹配代價,采用固定窗口的代價聚合方式計算匹配代價,經(jīng)過左右一致性檢測得到初始視差圖的方法。
本發(fā)明的有益效果是,復雜度低、速度快、精度高的優(yōu)點,適合實時性要求高的場合。
附圖說明
圖1:本發(fā)明的立體匹配流程示意圖。
具體實施方式
本發(fā)明可以分為初始視差計算,穩(wěn)定點插值兩個階段,如圖1所示。
對于初始視差計算具體可以分為以下四個步驟:
基于雙目視覺的一致性約束,對左右視差圖做左右一致性校驗,即在左視差圖和右視差圖中的相同坐標位置視差相同,對遮擋點視差做有效地修正,得到初始視差圖。
步驟一:輸入經(jīng)過校正的左右兩幅圖像,計算左右兩幅圖像的梯度。
步驟二:將梯度作為初始視差計算的匹配代價,對每個像素取固定窗口,窗口內(nèi)的匹配代價聚合得到每個像素的聚合代價。本實施例通過計算左右圖像梯度的絕對誤差和SAD作為匹配代價,以7*7的窗口作為代價聚合區(qū)域,聚合代價CGradient(x,y,d):
N(x,y)是像素點(x,y)處的7*7的窗口,是向右的梯度,是向下的梯度,I1(i,j)是左圖中(i,j)z坐標處的亮度值,I1(i+d,j)是右圖中(i+d,j)坐標處的亮度值。
步驟三:首先以左圖為基準,在右圖中按照贏者通吃WTA(Winner-Take-All)的策略尋找最匹配的點,得到左視差圖,然后以同樣的方式以右圖為基準,在左圖中尋找最匹配的點,得到右視差圖:
計算像素的匹配可信度,如果可信度小于閾值則認為該點視差計算可靠,否則認為不可靠,這里可信度閾值取0.9。以左圖為基準,在右圖搜索匹配點,得到左視差圖;同樣的,以右圖為基準,在左圖搜索匹配點,得到右視差圖。計算可信度:
Confidence=SAD_min/SAD_min2 (2)
其中,Confidence表示可信度,SAD_min表示最小的匹配代價,SAD_min2表示次最小的匹配代價。
步驟四:對左右視差圖逐個像素做左右一致性檢驗LRC,得到初始視差圖。
基于穩(wěn)定點插值,包括以下幾個步驟:
步驟一:對圖像計算格點,行列步長均為5個像素。比如輸入圖像尺寸為320*240,則格點尺寸為64*48。格點的視差值為格點在視差圖對應坐標的視差值,首先對這些格點做篩選,找到穩(wěn)定格點。如果某個格點與其周圍的大多數(shù)格點差異比較大,則被認為是噪聲或者低紋理等原因引起的誤匹配,該點視為非穩(wěn)定點,剩下的格點則為穩(wěn)定格點。這里,對于與其周圍的大多數(shù)格點差異的比較通過預先設(shè)置設(shè)定數(shù)量值與閾值進行比較。本實施例中如果以某個格點為中心的5*5的塊內(nèi)的格點與中心格點視差值都差異比較大,則認為中心點是非穩(wěn)定格點,否則認為是穩(wěn)定格點。
步驟二:對左圖計算Canny邊緣點,通過統(tǒng)計邊緣點的八鄰域中邊緣點個數(shù),若小于2,則認為是孤立點,剔除比較孤立的邊緣點,剩下的即為穩(wěn)定邊緣點。穩(wěn)定邊緣點的視差等于初始視差圖的對應坐標點的視差值。八鄰域為以當前點為中心,上、下、左、右、左上、左下、右上、右下的8個方向的相鄰點;
步驟三:對所有含穩(wěn)定格點的列按列掃描,如果列方向上任意相鄰的兩個穩(wěn)定個點之間沒有穩(wěn)定邊緣點,則這兩個穩(wěn)定點之間的所有點稱為列插值點,其視差值為兩個穩(wěn)定格點視差值的線性插值;如果列方向上相鄰的兩個穩(wěn)定格點之間遇到穩(wěn)定邊緣點,則這兩個穩(wěn)定點之間的所有點稱為列插值點,其視差值為穩(wěn)定格點視差值與穩(wěn)定邊緣點視差值的分段線性插值。
線性插值公式為:
dy=d0+αy*(d1-d0) (3)
其中插值系數(shù)dy為目標點縱坐標為y時的視差值,兩個穩(wěn)定點的縱坐標和視差分別為(y0,d0),(y1,d1)。
步驟四:將穩(wěn)定格點,列插值點和穩(wěn)定邊緣點合并在一起組成穩(wěn)定點集合,并進行視差值插值以獲得稠密的視差圖。對圖像按行掃描,任意行方向相鄰的兩個穩(wěn)定點之間所有像素的視差通過線性插值獲得。
線性插值公式為:
dx=d0+αx*(d1-d0) (4)
其中插值系數(shù)dx為目標點橫坐標為x時的視差值,兩個穩(wěn)定點的橫坐標和視差分別為(x0,d0),(x1,d1)。