<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 汽車電子 > 設計應用 > 泊車輔助系統中的車位線自動檢測與識別

          泊車輔助系統中的車位線自動檢測與識別

          作者: 時間:2018-09-04 來源:網絡 收藏

          摘要 針對目前系統中的問題,建立了基于360°全景鳥瞰圖像的全自動車位線檢測與識別模型,考慮到光照對圖像處理結果的影響,先對圖像進行了預處理,然后采用一種基于中值的邊緣檢測技術,并通過,再根據車位線特征的先驗知識對結果進行限制和優(yōu)化,實現了車位線的識別。同時對實際采集到的圖像進行驗證,結果識別率達到94.2%,證明了該方法的有效性和魯棒性。

          本文引用地址:http://www.ex-cimer.com/article/201809/388393.htm

          關鍵詞 ;;;

          近年來隨著對系統需求的快速增長,提出了多種車位定位的方法,這些方法大致可分為4類:基于用戶界面的、基于設施的、基于空閑位的和基于車位線的方法。與其他方法相比,基于車位線的方法有以下優(yōu)勢:(1)可以與基于用戶界面的方法結合使用來減少由于司機重復操作帶來的不便,而這是基于用戶界面方法的主要缺陷。(2)不同于基于空閑位的方法,它能更準確地定位停車位,因為其定位過程不依賴于相鄰汽車的停放姿勢而僅依賴于車位線。(3)它也可以有效地應用于傾斜車位的情況。由于傳感器的局限性,運用超聲波傳感器基于空閑位的方法在傾斜車位的情況下會失效。(4)與應用雙目或者運動聲波的基于空閑位的方法相比,它通?;ㄙM少量時間。(5)它不需要額外的傳感器,例如立體攝像頭、掃描激光雷達或者短波雷達,而是運用后視攝像頭。

          基于車位線的方法可以分為半自動和全自動的方法。與全自動的方法相比,半自動的方法可能產生更可靠的結果,而且花費更少的計算資源,因為它有來自人的額外信息。Jung等人提出了一種方法,這種方法需要司機在預停車位內標記一個點,然后利用方向梯度來進行識別。實驗驗證這種方法只適用一種類型的車位。為克服此缺陷,提出了另外一種方法,可以識別各種類型的車位,但需要用戶更多的配合。這種方法需要用戶輸入車位兩端點的初始位置,構成了車位的入口?;谶@些初始位置,采用人工神經網絡和遺傳算法進行車位的識別。

          另外,全自動的方法也得到了發(fā)展。XU等人提出了一種基于顏色分割技術的的方法識別車位線,這種方法只能識別紅色車位線,而且基于顏色信息的方法已經被證明對光照變化是敏感的。Tanaka等人提出了一種對邊緣片段運用RANSAC檢測一組直線來識別車位線。由于這種方法高度依賴于直線檢測,其性能會因為部分污損而下降。Jung等人提出的方法將各種類型的車位線模型化為一種分層樹結構,基于這種結構完成自動識別。

          但是,以上提出的方法都涉及到閾值,所以都會存在圖像處理領域一個普遍的問題,即閾值設置過高,重要信息就可能被遺漏;閾值設置過低,干擾信息又會被看的重要,因此一個適用于所有圖像的普適閾值難以給出,所以針對以上問題,本文采用了自適應的思想,包括自適應直方圖均衡化、自適應二值化、邊緣檢測,以滿足應用的需要,實驗證明這些算法都是有效的。

          本文提出的方法可分為以下幾個過程:對汽車前、后、左、右4個攝像頭采集到的圖像進行重建形成全景圖像;圖像預處理,包括直方圖均衡化,二值化以及形態(tài)學處理;Canny邊緣檢測以及Hough變換,然后在參數空間中利用車位線特征的先驗信息對結果進行優(yōu)化,最終得出識別結果。具體算法流程如圖1所示。

          1 圖像預處理

          通過加裝在汽車車身前、后、左、右的4個魚眼攝像頭,同時采集車輛四周的影像,經過魚眼圖像矯正,鳥瞰變換和拼接后,形成一幅車輛4周的360°全景俯視圖,如圖2所示。

          由此得到的原圖像不可避免地會受到光照、噪聲等的影響,因為前期處理的質量直接影響到后期識別的效果,所以為消除圖像中無關的信息,恢復有用的真實信息,增強有關信息的可檢測性和最大限度地簡化數據,從而改進特征抽取、圖像分割、匹配和識別的可靠性,需要對圖像進行預處理,主要分為以下幾個步驟。

          1.1 自適應直方圖均衡化

          首先將原彩色轉化為灰度圖像,考慮到光照影響導致灰度分布不均,需要對灰度圖像進行直方圖均衡化。直方圖均衡化的基本思想是對原始圖像中的像素作某種映射變換,使變換后的圖像灰度概率密度是均勻分布的,即變換后圖像是一幅灰度級均勻分布的圖像,這意味著圖像灰度的動態(tài)范圍得到了增加,從而可提高圖像的對比度。但是傳統的直方圖均衡化中灰度變換函數運算與像素所處的位置無關,這種全局性處理的算法,具有算法簡單、計算速度快等優(yōu)點,但由于其對所有像素點都做同樣的處理,忽略了圖像的局部特征,這就導致經過直方圖均衡的圖像將丟失有用信息,給圖像的去噪處理及邊緣檢測帶來損失。因此本文采用對比度受限自適應直方圖均衡法(CLAHE),通過限制局部直方圖的高度來限制局部對比度的增強幅度,從而限制噪聲的放大及局部對比度的過增強。如圖3所示為分別對原灰度圖像進行直方圖均衡化和CLAHE后的效果,可以看到CLAHE的效果明顯優(yōu)于傳統的直方圖均衡效果。

          1.2 自適應二值化

          對圖像進行直方圖均衡化處理后,為便于后期處理,需要對圖像進行分割操作,達到目標和背景分離的目的。圖像分割的關鍵是選取恰當的閾值,閾值選取的恰當與否直接影響到感興趣信息的提取。這里采用局部自適應閾值,它是根據像素鄰域塊的像素值分布來確定該像素位置上的二值化閾值。這樣做的優(yōu)點在于,每個像素位置處的二值化閾值不是固定不變的,而是由其周圍鄰域像素的分布來決定的。亮度較高圖像區(qū)域的二值化閾值通常會較高,而亮度較低的圖像區(qū)域的二值化閾值則會相適應地變小。不同亮度、對比度、紋理的局部圖像區(qū)域將會擁有相對應的局部二值化閾值。圖4顯示了采用該方法后的結果。

          1.3 形態(tài)學處理

          可以看到,在圖像分割完成后,不免存在著一些二值噪點,為此,考慮利用形態(tài)學對圖像進行處理。對二值圖像進行形態(tài)學處理的基本思想是運用一個預先定義好的簡單結構元素去探測圖像,看這個結構元素能否填放在該圖像內部,并驗證填放結構元素方法的有效性。最基本的形態(tài)學運算是腐蝕和膨脹,二者互為對偶運算。腐蝕是將區(qū)域的內邊界點變?yōu)楸尘?,使邊界向內部收縮,在這個過程中,小且無意義的物體將被消除;而膨脹則是將區(qū)域的外邊界點變?yōu)閷ο簏c,使邊界向外部擴張。

          為利用結構元素B膨脹集合A,可將B相對原點旋轉180°,得到-B,再利用-B對AC進行腐蝕,腐蝕結果的補集就是所求的結果。

          對輸入圖像進行先腐蝕后膨脹,具有平滑功能,通常用于消除小對象物、在纖細點處分離物體、平滑較大物體邊界的同時并不明顯改變其體積,且圖像細節(jié)得以保留。圖5是經過先腐蝕后膨脹得到的結果,可以看到經過形態(tài)學處理后的二值化圖像已經濾掉了部分噪點,便于下一步的識別處理。

          2 Hough變換檢測車位線

          2.1 基于中值的自適應Canny邊緣檢測

          邊緣是圖像特征的一個重要屬性,蘊含了大量的信息,能勾勒出目標物體,因此邊緣檢測技術是圖像處理中一類重要的分析方法。Can ny算子是最常用的邊緣檢測方法。Canny算法的步驟可歸納為:

          (1)去噪。因為Canny邊緣檢測算子對于未經處理的原始圖像中的噪聲是敏感的,所以它采用高斯模板與原始圖像作卷積,得到的結果與原始圖像相比,有輕微的模糊。這樣,單獨的一個噪聲像素在經過高斯平滑的圖像上變得基本沒有影響。

          (2)查找圖像的亮度梯度。圖像的一個邊緣可能指向不同的方向,所以Canny算法運用4個模板分別檢測去噪圖像中的垂直、水平、對角線邊緣。利用邊緣檢測算子(如Roberts,Prewitt,Sobel)分別計算出水平和垂直方向的一階導數Gx和Gy由此可以得到邊緣的梯度和方向

          (3)跟蹤圖像邊緣,選擇滯后閾值。較大的亮度梯度更有可能被認為是邊緣,但在多種情況下,指定一個閾值來確定某個梯度是否為邊緣是不可能的,因此Canny采用了滯后閾值。

          滯后閾值需要高低兩個閾值。假設圖像中的重要邊緣都是連續(xù)曲線,這樣可以跟蹤給定曲線中模糊的部分,并丟掉一些雖然產生了大的梯度但沒有組成曲線的噪聲像素。所以從一個較大的閾值開始,這將標識出那些確信的邊緣。從真正的邊緣開始,并利用前面導出的方向信息,在圖像中跟蹤整個的邊緣。在邊緣跟蹤時采用低閾值,這樣就可以跟蹤曲線的模糊部分直至回到起點。

          這個過程一旦完成,就可得到一個二值圖像,其中的每個點表示是否是一個邊緣點。

          與使用一個閾值相比,Canny邊緣檢測算法使用兩個閾值使得操作更加靈活,但還是存在的普遍問題,閾值設置過高,重要信息就可能被漏掉;閾值設置過低,干擾信息又會被看的重要。難以給出適用于所有圖像的通用閾值問題。

          采用的解決方法首先是計算圖像的中值median,然后根據以下公式為高閾值high_thresh和低閾值low_thresh賦值,調用Canny邊緣檢測算法對圖像進行邊緣檢測。

          high_thresh=0.66×median;

          low_thresh=0.33×median; (4)

          圖6和圖7分別顯示了經典Canny邊緣檢測和基于中值的Canny邊緣檢測結果,其中圖6是經過手動調整到最佳結果產生的圖像,圖7是利用自動設定閾值得到的結果,從中可以看出基于中值的Canny邊緣檢測算法可以實現自動邊緣檢測的目的。

          2.2 Hough變換

          霍夫變換(Hough Transform)是一種檢測直線和解析曲線的有效方法。它把二值圖像變換到Hough參數空間,利用參數空間極值點的檢測來實現目標的檢測?;舴蜃儞Q不但可以用于檢測圖像中的直線,還可以擴展到任意曲線的識別,多為圓和橢圓。

          運用兩個坐標空間之間的變換,霍夫變換將在一個空間中具有相同形狀的曲線映射到另一個坐標空間的一個點上形成峰值,因此,霍夫變換把曲線的檢測問題轉換到參數空間中對點的檢測問題,通過在參數空間里進行簡單的累加統計完成檢測任務。

          考慮直角坐標系中的一點(x0,y0),經過該點直線的一般方程可以寫為

          ρ=x0cosθ+y0sinθ (5)

          參數ρ和θ可以唯一地確定一條直線,這在ρ-θ空間內是一條正弦曲線。若將x—y平面內同一條直線的點列變換到ρ-θ空間,則所以正弦曲線都經過一點(ρ’,θ’),所以正弦曲線在ρ-θ空間其他各處都不相交。因此,X—Y平面內一條直線上的無數點變換到ρ—θ空間內時,經過(ρ’,θ’)的次數為無窮,經過其他各處次數都為1。也就是說,Hough變換將X—Y平面內的一條直線映射到了ρ—θ空間中的一個點。因此,Hough變換把直線檢測問題轉換到參數空間里對點的檢測問題,通過在參數空間里進行簡單的累加統計完成檢測任務。

          圖8為將Hough變換應用到邊緣檢測圖中得到的初始結果。

          可以看到,由以上過程得到的結果存在偽車位線,需要進一步對結果進行優(yōu)化。注意到,在進行邊緣檢測后每條車位線都是雙邊緣的,另外,這兩個邊緣是相互平行的且具有固定的寬度和近似相等的長度,而且它們都反應了同一條車位線,因此為了減少計算量,可以計算一個邊緣,而非兩個邊緣,在這里取兩條邊緣線的平均值作為實際的車位線?;谝陨舷闰炋卣鲗Τ跏甲R別結果進行條件限制及優(yōu)化,得到如圖9所示的最終識別結果。

          3 實驗結果及分析

          系統的硬件部分主要由魚眼攝像頭、圖像處理單元和顯示屏組成。由于車身內部空間有限,圖像處理單元無法由PC機完成,因此在本系統中,設計使用DSP來完成視頻圖像的處理。軟件部分,以Visual Studio 2008為開發(fā)環(huán)境,并調用OpenCV庫來完成算法的實現。實驗選取了200張不同情況下的車位圖像對算法進行了驗證,并在相同的情況下將本文的方法與傳統的Hough方法進行了對比,實驗中采用召回率和識別率來對算法的效率進行估計,其定義分別如下。

          從實驗可以看出,本文提出的基于自適應思想的車位線檢測與識別方法具有較高的精確度和魯棒性。

          4 結束語

          隨著停車難的問題日益嚴峻,泊車輔助系統的應用越來越廣泛,本文提出了一種綜合運用自適應邊緣檢測和Hough變換等算法進行自動識別車位線的方法。通過實際采集到的圖像對算法進行驗證,并與傳統方法進行了對比,驗證了本文所提方法的高精度和高魯棒性。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();