摘 要:為實(shí)現(xiàn)自動駕駛汽車能精準(zhǔn)定位、檢測且識別出車道線,提出一種基于自適應(yīng)外接形參ROI(Region of Interest)的車道線搜尋檢測算法。首先利用python GUI編程庫Tkinter模塊創(chuàng)建GUI界面,提供ROI形狀選擇及參數(shù)輸入的外接窗口,適應(yīng)不同需求下進(jìn)行車道線的定位、標(biāo)注,無需反復(fù)更新源碼,達(dá)到車道線自動“挖掘”的效果;其次以灰度直方圖雙峰值確定左右車道線的初始位置,利用自適應(yīng)滑動窗口進(jìn)行車道線的搜尋,依據(jù)統(tǒng)計(jì)所屬車道線像素點(diǎn)的窗口覆蓋率來更新、優(yōu)化窗口參數(shù)。實(shí)驗(yàn)仿真證明,該算法不僅簡化了程序,提高了車道線檢測與識別的穩(wěn)定性和準(zhǔn)確性。
關(guān)鍵詞:外接形參ROI 自適應(yīng)滑窗 python GUI編程 Tkinter模塊 窗口覆蓋率
車道線的精準(zhǔn)定位和標(biāo)注是去除噪聲干擾及提高車道線精準(zhǔn)檢測與識別的“快速通道”,但手動對大量圖像或視頻數(shù)據(jù)集進(jìn)行車道線的劃線標(biāo)注,時(shí)間和人力成本消耗巨大。廖干洲[1]等人利用傳統(tǒng)的ROI技術(shù),手動設(shè)定合適的ROI區(qū)域,排除不必要的背景信息,利用Hough變換和最小二乘法進(jìn)行車道線檢測,但不適用于復(fù)雜路況;劉曉楠[2]等人通過逐行計(jì)算每行的灰度平均值來動態(tài)預(yù)測、識別道路路面與天空的分界線,實(shí)現(xiàn)車道線檢測ROI區(qū)域的優(yōu)化,但遇到與路面灰度值差不多的噪聲如樹木陰影等,識別效果便有所下降;考慮到車道線與路面的色值差異越大,其梯度值越大,劉丹萍[3]根據(jù)梯度亮度位置篩除大梯度的干擾邊緣,重定位并縮小ROI位置,利用遞歸神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法模型訓(xùn)練圖像數(shù)據(jù)集,并進(jìn)行檢測。本文提出一種基于自適應(yīng)外接形參ROI的車道線搜尋檢測算法。該算法利用python GUI編程庫Tkiner模塊創(chuàng)建GUI界面,提供ROI形狀[4]選擇及參數(shù)輸入的外接GUI窗口,適應(yīng)不同需求下進(jìn)行車道線的定位、標(biāo)注,達(dá)到自動“挖掘”車道線的效果;其次,獲取標(biāo)注車道線的灰度直方圖,以其雙峰值分別作為左右車道線的初始位置,利用自適應(yīng)滑窗來進(jìn)行車道線的搜尋和參數(shù)優(yōu)化等,效果理想。
1 圖像預(yù)處理
1.1 圖像去畸變
車載視覺傳感器采集的圖像基本都存在不同程度的畸變[5],包括徑向畸變和切向畸變。為確保應(yīng)用于車道線檢測的圖像數(shù)據(jù)集的可靠性、有效性,需要對采集的圖像進(jìn)行去畸變。畸變校正就是利用正常圖像(理想狀態(tài)無畸變)的坐標(biāo)位置去求畸變圖像中的坐標(biāo)位置,取出對應(yīng)位置的像素值,將其賦值給原位置的過程。
本實(shí)驗(yàn)中的棋盤格尺寸為18cm*18cm,用相機(jī)對其從不同角度拍攝20張圖像,像素均為500*500,借助OpenCV平臺,利用python編程實(shí)現(xiàn)棋盤格角點(diǎn)檢測及圖像畸變矯正,其效果如圖1所示。
1.2 灰度直方圖
圖像灰度化[6]即使彩色圖像R(紅)、G(綠)、藍(lán)(B)三個(gè)分量相等的過程,因此,灰度圖像是一種單色圖像,其每個(gè)像素的值表示從0(黑色)到255(白色)共256個(gè)不同灰度級別,圖像灰度化的目的是簡化矩陣,顯著降低圖像的數(shù)據(jù)量,提高運(yùn)算速度。
本文中選用加權(quán)平均法,利用OpenCV中的cv2.COLOR_RGB2GRAY來進(jìn)行圖像灰度化。如圖2(a)為灰度圖,(b)為灰度直方圖所示,若圖像灰度級用表示,統(tǒng)計(jì)256個(gè)像素分別出現(xiàn)的頻次,即為灰度直方圖。
文中灰度直方圖的作用在于兩點(diǎn):一是通過灰度直方圖確定左右車道線的起始位置。圖像灰度圖中車道線偏白,可根據(jù)灰度直方圖中相應(yīng)白色區(qū)域的峰值來定位左右車道線的起始位置,并設(shè)置第一個(gè)滑動窗口,便于后續(xù)的車道線檢測;二是通過灰度直方圖來計(jì)算車道線的檢測概率。設(shè)經(jīng)ROI標(biāo)注區(qū)域內(nèi)車道線灰度直方圖白色像素點(diǎn)的數(shù)量為Q,再經(jīng)滑動窗口檢測并提取的白色像素點(diǎn)數(shù)量為Qn,則檢測效率為Qn/Q。
2 Canny邊緣檢測
Canny邊緣檢測是為了找到不同圖像或者視頻中最優(yōu)邊緣檢測算法,即達(dá)到最優(yōu)檢測、最優(yōu)定位準(zhǔn)則以及檢測點(diǎn)與邊緣點(diǎn)一一對應(yīng),從而降低漏檢真實(shí)邊緣或誤檢非邊緣的概率,使檢測到的邊緣點(diǎn)位置盡最大可能靠近實(shí)際邊緣位置,基于灰度圖像的基礎(chǔ)上,程序中設(shè)置邊緣檢測的高低門限值分別為150、50,借助OpenCV中cv2.Canny ()函數(shù)進(jìn)行邊緣檢測,實(shí)現(xiàn)步驟如下:
(1)高斯濾波:去除圖像的噪聲,文中設(shè)置高斯濾波核blur_ksize=5并利用cv2.GaussianBlur()函數(shù)實(shí)現(xiàn)圖像平滑濾波;(2)圖像梯度:利用水平方向的Sobel算子[7]檢測方向的邊緣,垂直方向的Sobel算子檢測方向的邊緣,獲取圖像的邊緣及其方向;(3)非極大值抑制:即保留在正/負(fù)梯度方向上的局部最大值的像素點(diǎn)來消除邊緣誤檢;(4)雙閾值、滯后技術(shù):通過設(shè)置上下閾值將圖像像素點(diǎn)進(jìn)一步分為強(qiáng)邊緣、弱邊緣及侯選項(xiàng),弱邊緣及候選項(xiàng)若與確定為邊緣的像素點(diǎn)連接,則判別邊緣,起到細(xì)化及連接邊緣的作用。
考慮到Canny/Sobel邊緣檢測會將圖像或者視頻中所有物體的輪廓都檢測出來,間接干擾后續(xù)車道線檢測與識別的效果,因此,在進(jìn)行Canny/Sobel邊緣檢測前后,利用ROI進(jìn)行車道線區(qū)域定位。
3 基于外接形參ROI的車道線自動定位
感興趣區(qū)域[8](Region of Interest,ROI)可以指定圖像或者視頻中需要特別關(guān)注或處理的區(qū)域,以此來減少計(jì)算量,提高對豐富數(shù)據(jù)集的處理效率。在計(jì)算機(jī)視覺中,ROI可以用于目標(biāo)檢測和跟蹤、圖像分割、物體識別與分類及圖像增強(qiáng)等,根據(jù)不同的任務(wù)特征突出指定區(qū)域集中化、可視化的效果,提高算法運(yùn)行的速度以及處理的準(zhǔn)確性。傳統(tǒng)的ROI進(jìn)行車道線區(qū)域定位通常是手動標(biāo)注感興趣的目標(biāo)區(qū)域,且當(dāng)輸入的圖像或者視頻發(fā)生變化時(shí),會根據(jù)不同設(shè)備型號、圖像分辨率等重新打開源碼進(jìn)行參數(shù)的修改、調(diào)整,以便獲取最佳的標(biāo)注效果。本文提出一種基于外接形參法的自動ROI車道線定位算法,顧名思義,即通過外接窗口的形式調(diào)參,同時(shí),借助OpenCV平臺中的copy To()函數(shù)實(shí)現(xiàn)ROI自動區(qū)域定位或標(biāo)注。
外接形參法,即通過鼠標(biāo)對菜單、按鈕等圖形化元素設(shè)置觸發(fā)指令,并從標(biāo)簽、對話框等圖形化顯示容器中獲取人機(jī)對話信息的方法。本文中基于外接形參法的ROI利用python GUI編程庫Tkinter模塊來實(shí)現(xiàn),因?yàn)門kinter作為python GUI工具的一種,傳承了python語法簡潔、易編、易讀的特點(diǎn),支持 Windows、Linux、Mac等平臺的兼容性。如圖3為利用python GUI編程實(shí)現(xiàn)的基于外接形參的ROI算法流程圖。
為了提高車道線檢測的效率和精度,利用外接形參ROI算法進(jìn)行車道線的區(qū)域定位時(shí),需要考慮到以下兩個(gè)要素:一是車載相機(jī)是以前俯視的角度獲取的圖像或視頻,因此ROI形狀的選擇大多數(shù)以三角形或四邊形區(qū)域?yàn)橹鱽怼巴诰颉避嚨谰€;二是因不同任務(wù)需要,圖像特征集中區(qū)域[9]的位置和形狀不盡相同,因此在利用GUI界面進(jìn)行參數(shù)輸入時(shí),適時(shí)調(diào)整數(shù)據(jù)分辨率或者ROI坐標(biāo)位置,以便覆蓋到所有車道線。以常用的三角形或四邊形區(qū)域?yàn)槔?,如?示為利用python GUI編程實(shí)現(xiàn)基于外接形參ROI算法的步驟:
針對不同的場景需要,可以通過增加按鈕和鏈接事件的方法來增加不同形狀的ROI,若需求的ROI形狀過多,窗口不足以覆蓋按鈕或者按鈕太多不美觀,則可在主窗口中添加下拉選擇框進(jìn)行ROI形狀的選擇。如圖4為python GUI編程實(shí)現(xiàn)的三角形ROI和四邊形ROI外接形參的界面效果。
3.2 ROI自動車道線定位和標(biāo)注
除了上述的外接形參法外,還需要實(shí)現(xiàn)車道線區(qū)域的自動提取,該過程主要借助OpenCV與運(yùn)算符和copyTO()函數(shù),設(shè)經(jīng)外接形參設(shè)定的ROI區(qū)域?yàn)镽1,首先,建立與原圖一樣大小的mask圖像,并將所有像素初始化為0,得到一張全黑色的二值圖;其次, 將mask圖中R1區(qū)域的所有像素值設(shè)置為255,得到區(qū)域白色的R1區(qū)域;最后將原圖與mask圖進(jìn)行與運(yùn)算,定位并標(biāo)注到目標(biāo)區(qū)域。如圖5為其實(shí)現(xiàn)原理。
ROI自動定位和標(biāo)注車道線原理即為原圖像image與掩膜mask “與”運(yùn)算得ROI區(qū)域。其中,掩膜mask充當(dāng)位圖的角色,當(dāng)mask像素值非零時(shí),則拷貝,否則不予拷貝,由此,我們可以準(zhǔn)確定位到感興趣區(qū)域并進(jìn)行提取。文中利用python編程對圖像進(jìn)行灰度化、Canny邊緣提取后,周邊樹木甚至天空云朵的輪廓均被清晰提取出來,為了避免這些輪廓對車道線提取、檢測及識別造成干擾,故增加基于外接形參ROI的自動車道線定位及標(biāo)注算法,無需手動標(biāo)注,直接運(yùn)行編譯并保存*.py 程序文件予以實(shí)現(xiàn)如圖6,效果良好。
4 車道線檢測與擬合
Canny邊緣提取算法會將圖像各個(gè)方向、明暗交替位置的邊緣都提取出來,基于外接形參ROI的自動車道線定位算法雖然能直接定位到車道線區(qū)域,但無法排除路面陰影等對車道線檢測與識別造成的影響,因此,文中提出一種自適應(yīng)滑動窗口[10]算法來進(jìn)一步檢測車道線,并利用最小二乘法[11]進(jìn)行車道線擬合。
4.1 自適應(yīng)滑窗
車道線定位:由圖2中灰度直方圖可直觀地看出雙峰的位置,找到雙峰位置對應(yīng)的橫坐標(biāo),即為第一個(gè)滑動窗口下邊線的中點(diǎn),左右車道線的起始位置由此確定。
車道線搜尋:確定左右車道線的起始位置后,利用自適應(yīng)滑窗進(jìn)行車道線搜尋,其主要步驟如下:
(1)參數(shù)定義。以左側(cè)車道線為例,設(shè)左側(cè)車道線第個(gè)矩形窗口四個(gè)角點(diǎn)坐標(biāo)分別為、、、?;瑒哟翱诘膶挾日{(diào)幅初始值為=80,矩形滑窗的數(shù)量=9,則滑動窗口寬度及高度可通過以下公式計(jì)算:
其中,M表示圖像鳥瞰圖的寬度;表示第個(gè)窗口下邊線中點(diǎn)對應(yīng)的橫坐標(biāo)。
(2)窗口搜尋。遍歷圖像中的每個(gè)窗口,利用灰度直方圖統(tǒng)計(jì)窗口內(nèi)非零像素值的數(shù)量,與最小有效像素值進(jìn)行比較,根據(jù)不同的結(jié)果進(jìn)行參數(shù)的計(jì)算并更新優(yōu)化。
若第個(gè)窗口內(nèi)非零像素值個(gè)數(shù)大于或等于最小有效像素值=40時(shí),則記錄第個(gè)窗口內(nèi)所有非零像素值對應(yīng)的橫坐標(biāo),并取均值,將其作為第+1個(gè)窗口下邊線的中點(diǎn),則得到第+1個(gè)窗口四個(gè)角點(diǎn)的位置坐標(biāo)值為:
若第個(gè)窗口內(nèi)非零像素值個(gè)數(shù)小于最小有效像素值=40但非0時(shí),則程序自適應(yīng)調(diào)整寬幅,再利用上述公式計(jì)算:
若第個(gè)窗口內(nèi)非零像素值個(gè)數(shù)為0時(shí),則第+1個(gè)窗口沿用第個(gè)窗口的信息,按窗高進(jìn)行垂直移動。
(3)窗口覆蓋。統(tǒng)計(jì)整個(gè)鳥瞰圖中白色像素點(diǎn)的數(shù)量,統(tǒng)計(jì)個(gè)窗口內(nèi)白色像素點(diǎn)的數(shù)量,設(shè)窗口對車道線的覆蓋率為,則有:
若0.9,則說明n個(gè)滑窗內(nèi)包含的車道線像素點(diǎn)數(shù)占總車道線像素點(diǎn)數(shù)量的90%,默認(rèn)車道線檢測有效;若lt;0.9,則默認(rèn)車道線檢測無效,需重新調(diào)整窗寬進(jìn)行有效檢測,同公式4和公式5。
車道線擬合:由上述自適應(yīng)滑窗檢測出車道線后,利用最小二乘法的第二種定義來擬合車道,使得樣本點(diǎn)與擬合曲線最為接近,即殘差平方和或損失函數(shù)L最小。
4.2 分析與驗(yàn)證
文中仿真實(shí)驗(yàn)是基于Win10 64位操作系統(tǒng)進(jìn)行的,借助OpenCV平臺,利用python及python GUI編程庫對本文中提出的算法進(jìn)行程序編譯?;谕饨有螀OI的車道線定位與標(biāo)注可以直接通過外接GUI界面進(jìn)行參數(shù)輸入,無需反復(fù)修改源代碼;基于自適應(yīng)滑窗的車道線檢測與識別則根據(jù)上一窗口中車道線的覆蓋率來確定下一個(gè)窗口的位置,同時(shí)計(jì)算窗口覆蓋率自動更新、優(yōu)化寬幅等參數(shù),圖7、圖8分別為任意三角形ROI或四邊形ROI結(jié)合自適應(yīng)滑窗對分辨率為1280720的圖像進(jìn)行車道線檢測與識別的效果圖。
5 總結(jié)
本文提出了一種基于自適應(yīng)外接形參ROI的車道線搜尋檢測算法,其中外接形參ROI利用python GUI編程庫創(chuàng)界外接GUI界面,調(diào)用Tkiner模塊創(chuàng)建按鈕和文本輸入框,可根據(jù)任務(wù)需要,任意選擇ROI形狀,無需反復(fù)修改源碼來進(jìn)行參數(shù)的輸入;其次利用自適應(yīng)滑窗是對經(jīng)Canny邊緣提取、ROI框選的車道線進(jìn)一步定位和搜尋,降低其受復(fù)雜工況的影響,提高車道線檢測與識別的效率、準(zhǔn)確性和穩(wěn)定性。實(shí)驗(yàn)證明,該算法簡化了程序輸入,提高了檢測精度。
基金項(xiàng)目:2023年度安徽省科研編制計(jì)劃重點(diǎn)項(xiàng)目“基于OpenCV-Python的智能網(wǎng)聯(lián)汽車車道線識別研究”(2023AH051451);2022年度安徽職業(yè)技術(shù)學(xué)院院級質(zhì)量工程教學(xué)研究重點(diǎn)項(xiàng)目(2022yjjxyj02);2024年度安徽省高校自然科學(xué)研究重點(diǎn)項(xiàng)目(2024AH050886);2023年度安徽省高校自然科學(xué)研究重點(diǎn)項(xiàng)目(2023AH040195);2022年度安徽省科研編制計(jì)劃重點(diǎn)項(xiàng)目“四驅(qū)汽車防滑差速器扭矩智能分配機(jī)理與穩(wěn)定性控制研究”(2022AH052057)。
參考文獻(xiàn):
[1]廖干洲,曾霞,李龍華.基于霍夫變換與最小二乘法的車道線檢測方法[J].機(jī)電工程技術(shù),2024,53(4):111-114.
[2]劉曉楠,陳文進(jìn),劉杰.基于動態(tài)識別ROI區(qū)域的車道線檢測技術(shù)[J].汽車科技,2018(z1):54-58.
[3]劉丹萍.基于ROI自適應(yīng)定位的復(fù)雜場景車道線檢測[J].長春師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2020,39(5):66-70.
[4]鄧海濤,鄧家先,鄧小梅.一種基于EZW的ROI圖像聯(lián)合壓縮加密算法[J].電視技術(shù),2013,37(9):45-51,63.
[5]SHEN, YEHUI, BI, YUNRUI, YANG, ZHEN, etal. Lane line detection and recognition based on dynamic ROI and modified firefly algorithm[J]. International journal of intelligent robotics and applications,2021,5(2):143-155.
[6]王鑫,劉玉超,海丹.基于雙重ROI和變間距掃描的車道線檢測[J].指揮與控制學(xué)報(bào),2017,3(2):154-159.
[7]錢基德,陳斌,錢基業(yè),等.基于感興趣區(qū)域模型的車道線快速檢測算法[J].電子科技大學(xué)學(xué)報(bào),2018,47(3):356-361.
[8]李志遠(yuǎn),王光輝.基于傳統(tǒng)邊緣算子的車道線識別研究[J].現(xiàn)代電子技術(shù),2024,47(7):61-65.
[9]劉鳳,劉浩哲,張文天,等.一種魯棒的基于對抗結(jié)構(gòu)的生物特征ROI提取方法[J].自動化學(xué)報(bào),2023,49(6):1339-1353.
[10]趙峰.基于OpenCV的車道線檢測與識別[J].微型電腦應(yīng)用,2023,39(3):177-181.
[11]張宇,施衛(wèi).基于機(jī)器視覺的車道線檢測算法研究[J].機(jī)電工程技術(shù),2022,51(6):100-103.