快速車道標記檢測算法【附數(shù)據(jù)集與注釋代碼】
來源:深圳市凱茉銳電子科技有限公司2025-06-23
在自動駕駛和智能交通系統(tǒng)中,車道標記識別是關鍵的計算機視覺任務之一。本文將介紹一個基于Halcon的車道標記檢測算法,該算法通過圖像處理技術(shù)快速識別車道標記。
1. 系統(tǒng)初始化和窗口設置
在算法的開始,我們首先需要進行一些系統(tǒng)的初始化操作并設置顯示窗口。這些步驟為后續(xù)的圖像處理和結(jié)果展示奠定了基礎。
dev_update_window ('off')
* 關閉窗口更新
dev_close_window ()
* 關閉窗口
dev_open_window (0, 0, 768, 575, 'black', WindowID)
* 打開一個新的黑色背景窗口,大小為768x575
MinSize := 30
* 最小區(qū)域大小設定為30
get_system ('init_new_image', Information)
* 獲取系統(tǒng)參數(shù),初始化新圖像信息
set_system ('init_new_image', 'false')
* 設置系統(tǒng)參數(shù),禁止初始化新圖像
在上述代碼中,我們通過dev_open_window打開了一個新的窗口,用于展示后續(xù)的圖像處理結(jié)果。窗口背景為黑色,尺寸為768x575。然后,我們設置了一個最小的區(qū)域大小MinSize,并獲取了系統(tǒng)的圖像初始化參數(shù)。
2. 創(chuàng)建網(wǎng)格區(qū)域并裁剪圖像
為了有效識別車道標記,我們首先需要創(chuàng)建一個網(wǎng)格區(qū)域,這樣可以在大范圍內(nèi)搜索車道標記。
gen_grid_region (Grid, MinSize, MinSize, 'lines', 512, 512)
* 生成一個512x512的網(wǎng)格區(qū)域,用于車道檢測
clip_region (Grid, StreetGrid, 130, 10, 450, 502)
* 從生成的網(wǎng)格區(qū)域中裁剪出指定區(qū)域(130, 10, 450, 502),得到街道網(wǎng)格區(qū)域
在這一步中,gen_grid_region函數(shù)生成了一個512x512的網(wǎng)格區(qū)域,網(wǎng)格間距為MinSize。然后,我們用clip_region函數(shù)從網(wǎng)格中裁剪出了一個感興趣的區(qū)域(街道網(wǎng)格區(qū)域),為后續(xù)處理提供了一個明確的目標區(qū)域。
3. 車道標記檢測算法核心步驟
接下來,我們進入車道檢測的核心部分。通過Sobel算子提取圖像的梯度信息,并結(jié)合閾值化技術(shù)來提取車道標記。
for i := 0 to 28 by 1
* 對于每張圖像進行循環(huán),遍歷場景0到28
read_image (ActualImage, 'autobahn/scene_' + (i$'02'))
* 讀取場景圖像(場景編號為i)
reduce_domain (ActualImage, StreetGrid, Mask)
* 使用街道網(wǎng)格區(qū)域?qū)D像進行約束,得到圖像的感興趣區(qū)域(Mask)
sobel_amp (Mask, Gradient, 'sum_abs', 3)
* 對感興趣區(qū)域應用Sobel算子,計算梯度幅值,使用絕對值和方法,窗口大小為3
threshold (Gradient, Points, 20, 255)
* 對梯度幅值進行閾值化處理,保留值在20到255之間的區(qū)域,得到車道邊緣點
dilation_rectangle1 (Points, RegionDilation, MinSize, MinSize)
* 對車道邊緣點進行矩形膨脹,膨脹的大小為MinSize x MinSize
reduce_domain (ActualImage, RegionDilation, StripGray)
* 使用膨脹后的區(qū)域?qū)D像進行約束,得到一個新的圖像區(qū)域(StripGray)
threshold (StripGray, Strip, 190, 255)
* 對處理后的圖像區(qū)域應用閾值化操作,保留值在190到255之間的部分
fill_up (Strip, RegionFillUp)
* 對二值圖像進行填充操作,填充車道區(qū)域
dev_display (ActualImage)
* 顯示當前圖像
dev_display (RegionFillUp)
* 顯示車道填充區(qū)域
endfor
這部分代碼完成了車道標記檢測的主要任務。具體步驟如下:
讀取圖像并約束區(qū)域:通過read_image讀取不同的圖像數(shù)據(jù),然后利用reduce_domain函數(shù)將處理范圍限制在感興趣區(qū)域StreetGrid內(nèi)。
梯度計算和閾值化:使用sobel_amp計算圖像的梯度幅值,之后通過threshold進行閾值化,提取出車道邊緣的像素點。
膨脹操作:通過dilation_rectangle1對提取的車道邊緣點進行膨脹,擴大檢測區(qū)域,確保車道標記的完整性。
再次閾值化和填充:對膨脹后的圖像進行再次閾值化,并用fill_up函數(shù)填充車道區(qū)域,確保標記完整。
4. 顯示結(jié)果與更新窗口
最后,通過dev_display函數(shù)顯示處理后的圖像和車道區(qū)域。
dev_set_line_width (1)
* 將線寬設置回1
dev_update_window ('on')
* 恢復窗口更新
set_system ('init_new_image', Information)
* 恢復圖像初始化的系統(tǒng)參數(shù)
這些代碼段完成了顯示和更新圖像窗口的操作,確保用戶能夠?qū)崟r看到車道檢測的結(jié)果。
5. 算法效果圖
以下是該車道標記檢測算法在處理過程中的效果圖示例:
原始圖像:
檢測到的車道標記:
通過這些效果圖,可以看到算法如何在復雜的道路環(huán)境中成功提取車道標記。
相關資訊
- 2025-07-01
- 2025-06-30
- 2025-06-27
- 2025-06-26
安防攝像頭里的寬動態(tài)功能,實現(xiàn)方式及測量方法
2025-06-25- 2025-06-24