日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

基于Python的复杂环境中车道线自动检测系统

發布時間:2023/12/20 windows 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Python的复杂环境中车道线自动检测系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正常版:在馬路上尋找車道線

在這個項目中,本文建立了一個計算機視覺算法,用于檢測車道線并創建平均和外推的邊界線。 流程如下:

1)將幀轉換為灰度;

2)為黃色和白色像素創建蒙版;

3)應用高斯平滑;

4)應用Canny邊緣檢測;

5)創建一個額外的遮罩,以專注于車輛前方的“感興趣區域”;

6)將XY空間中的點(即像素)轉換為霍夫空間中的線;

7)霍夫空間中的線相交(即點)的地方,XY空間中存在一條線;

8)使用生成的線的極值,創建兩條平均線s;

9)在整個幀中創建兩條平均線,以實現流暢的視頻播放;10)在每幀上畫線。

從霍夫空間轉換后的原始線

可流暢播放的平均線

工作流程:

1)檢查霍夫返回的每條線,并根據其坡度確定是在左車道還是右車道。因為我們正在對陣列進行“上下顛倒”,所以左側車道的斜率為負,右側車道的正值為;2)極值;3)計算平均值;4)解決b截距;5)用極值求積分;6)流暢的幀和緩存。

從霍夫空間轉換后的原始視頻

可流暢播放的車道線視頻

困難版: 這篇文檔為自動駕駛汽車的車道線檢測和跟蹤提供了強大的解決方案。

步驟如下所示:

1)相機校準;2)失真校正;3)漸變和顏色閾值;4)透視變換;5)車道線搜索和搜索優化;6)繪制車道覆蓋。

相機校準

我們需要在棋盤上存儲對象點的數量或感興趣的位置。 僅考慮不在最外邊緣上的點。 對于此板,X軸上有9列,而7軸上有6行。 我們需要每種組合的(x,y,z)坐標列表(即板上唯一的位置)。 每個z值都是2D圖像,因此將為零。

失真校正

漸變和顏色閾值

對于此項目,我們將使用幾個過濾器來生成二進制(黑白)圖像,我們可以使用該圖像檢測和跟蹤車道線。

1)x和y方向的Sobel漸變;2)漸變幅度;3)漸變方向;4)色彩空間變換和過濾。

原始圖片

Sobel Gradients

Gradient Magnitude

Gradient Direction

飽和通道和紅色通道濾波器

首先,漸變濾鏡會將原始圖像轉換為灰度,并且丟失了許多有用的信息。車道線可以是黃色或白色,我們可以利用它來嘗試定位和跟蹤它們。色相飽和度亮度色彩空間將有所幫助。特別是,HSL圖像的S通道保留了大量有關車道線的信息-尤其是在道路上有陰影時。RGB的紅色通道在創建車道線的二進制圖像方面也做得很好。

HSL圖像

RGB圖像

組合過濾方法

現在,我們可以混合并匹配不同的過濾器方法,每種方法都具有唯一的閾值,以獲取精確的二進制圖像。

我測試了許多不同過濾器的許多按位組合。他們對于圖像整體都產生了不同的結果,但是這種組合在保留黃色車道線的信息方面做得最好,尤其是當距離越來越遠且在陰影下時。我將所有其他濾鏡都留在了里面,因為它們在不同的光照條件下可能會有用。 需要更多測試圖像-尤其是夜間圖像!

看起來還不錯! 它并沒有像我想要的那樣捕捉到遠處的黃色車道線。它顯然會在樹投射的陰影下丟失該信息。

得到一個不變形的行車記錄儀框架

我們可以在此處看到,當陰影距離相機更近/更大時,管道在解決陰影下的線條方面做得更好。 但是,它仍然不完美。

透視變換

檢測車道線

現在,我們對道路的快照已完成轉換,我們準備查找并跟蹤實際的車道。 為此,我們可以識別出大量白色像素區域。 具體來說,我們將使用直方圖將像素分為幾列,并尋找分布中的峰值。

我們可以清楚地看到該直方圖中的車道。 通過設置滑動窗口,我們可以跟蹤由于道路略微彎曲而向左/向右轉向的峰。

下面的功能如下:

1)在圖像底部創建一個搜索窗口,其高度為圖像高度的1/9。

2)將窗口分為左右兩半。

3)通過直方圖找到具有最高值的像素列。

4)使用空白變量在該區域周圍繪制一個框。

5)確定該框中的所有非零像素。如果有足夠的余量,請在下一個窗口平均位置上將框居中。

6)將二次方程式擬合到圖像每一半(左車道和右車道)中標識的所有非零像素。

現在,我們已經找到了車道,我們可以優化搜索區域,以加快流程。

下面的功能如下:

1)?導入多項式。2)在像素邊界內查找非零像素)3.擬合更新多項式以擬合新數據。

在原始圖像上繪制車道

現在我們知道通道在哪里,我們可以將其輸出到實際的視頻提要。 我們將按照以下步驟進行操作:

1)導入多項式;2)在變形后的二進制文件的空白副本上繪制多項式曲線;3)填充曲線之間的多邊形;4)使用反透視變換取消扭曲新圖像;5)將車道圖像疊加在原始幀的頂部。

確定車道曲率

現在我們有了車道,我們將要計算曲率半徑(即,道路彎曲了多少)。 當我們需要創建用于控制汽車轉向和加速的程序時,此信息對于端到端學習過程的后期至關重要。 此過程中最重要的步驟是將我們的測量結果從像素空間轉換為公制。 曲率半徑的公式為:

其中二階多項式f(y)定義為:

請注意,它是f(y)而不是f(x)。 這是因為在車道中,對于任何給定的x可能有多個y值。f(y)的一階和二階導數低于:

產生的形式將在下面的函數中使用:

確定車輛在車道上的位置

了解車輛相對于車道的位置也很重要。 對于此項目,我們假設攝像機安裝在汽車的中央。

圖像處理管道

我們已經構建了管道的所有組件。 現在,我們需要將它們組合成一個可以在視頻鏡頭上運行的管道。 我們將創建一個框架類來跟蹤不同的屬性。 稍后,當我們想要平滑視頻處理時,這將非常有用,就像在第一個項目中一樣。

夜間版: 在馬路上尋找車道線并跟蹤

配置環境

conda create -n env_lane python=3.6

conda activate env_lane

pip install opencv-contrib-python==3.4.9.31 -i Simple Index

pip install matplotlib -i Simple Index

pip install sklearn -i https://mirrors.aliyun.com/pypi/simple/

pip install jupyter -i Simple Index

使用卡爾曼濾波器在夜間環境中進行車道檢測

自動駕駛計算機視覺技術的一個重要里程碑是在道路上尋找車道標記。在這里,我們描述了在夜間環境中檢測車道的過程。

挑戰性

·低光強度·難以調整各種光強度的參數·邊緣檢測不良·陰影,突然的高強度汽車大燈

我們的方法,這些步驟中描述了我們的方法:

1) 我們對每個視頻幀執行伽瑪校正,以設置光強度

2) 從圖像中裁剪出“感興趣的區域”,因此我們只能在ROI部分上查找泳道。它有助于降低計算成本并提高fps。

3) 應用雙邊濾波器消除噪聲并平滑視頻幀,但保留邊緣。

4) 應用HSV濾鏡為固定范圍內的像素創建蒙版

5) 經過這些預處理(伽瑪校正和濾波)后,我們使用Canny邊緣檢測器檢測邊緣。

6) 之后,霍夫變換用于使用上一步中的邊緣檢測線。

7) 使用DBSCAN對檢測到的行進行聚類,因為我們只希望跨通道的行。

8) 卡爾曼濾波用于更好的車道檢測。在這里,我們為車道的聚集線應用了線性估計器,以使其穩定且沒有任何偏移誤差。

伽瑪校正

此處,伽瑪校正用于設置強度值。它使用參數對其進行調整,還可以設置強度級別。伽瑪校正的基本知識在這里。

代碼:-def gamma_correction(RGBimage,Correct_param = 0.35,equalizeHist = False):紅色= RGBimage [:,:,2]綠色= RGBimage [:,:,1]藍色= RGBimage [:,:,0]

感興趣區域

使用以下代碼裁剪每個視頻幀,以僅考慮車道檢測部分。因此,可以避免由于路燈和其他汽車前照燈而突然出現的高照度。這也會稍微提高fps。

代碼:-def region_of_interest(img,vertices):#定義一個與圖像高度/寬度匹配的空白矩陣。mask = np.zeros_like(img)#檢索圖像的顏色通道數。#channel_count = img.shape [2]#用于填充多邊形的顏色match_mask_color = 255#用白色cv2.fillPoly(mask,vertices,(255,255,255))填充多邊形#僅在蒙版像素匹配masked_image = cv2.bitwise_and的情況下返回圖像(img,mask)返回masked_image

雙邊過濾器

雙邊濾波器是用于圖像的非線性,邊緣保留和降噪平滑濾波器。它將每個像素的強度替換為附近像素的強度值的加權平均值。

霍夫變換

在本節中,我們使用了霍夫變換和一些修改,以刪除水平檢測到的線和僅面向車道的線。代碼:def hough_transform(原始,gray_img,閾值,discard_horizontal = 0.4):“”“函數擬合線相交> =閾值白色像素的函數輸入:-原始-我們要在其上畫線的圖像-gray_img-白/黑圖像像素,例如Canny Edge Detection的結果-閾值-如果一條線相交超過閾值白色像素,則將其畫出-throws_horizontal-我們要考慮的線的最小abs導數返回:-image_lines-應用函數的結果- lines_ok-rho和theta“”“線= cv2.HoughLines(gray_img,0.5,np.pi / 360)。

卡爾曼濾波器卡爾曼濾波器是一種算法,該算法使用一段時間內對系統的嘈雜觀測值來估計系統參數(其中一些是不可觀察的)并預測未來的觀測值。它會在每個時間步進行預測,進行測量并根據預測和測量的比較方式進行自我更新。

在這里,LaneTracker類實現用于車道檢測的卡爾曼濾波器。首先,它初始化狀態矩陣和測量矩陣的大小。然后,它計算了轉移矩陣。我們將白高斯噪聲用于我們的系統。使用此噪聲模型,我們已經計算了狀態誤差,并在估算器中使用該測量噪聲生成了預測狀態。卡爾曼濾波器通過將測量誤差和先前狀態相加來平均沿車道檢測到的線的變化。這就是為什么檢測到的車道標記線隨時間推移保持穩定的原因,并且由于其在以前的狀態下仍具有預測特性,因此在非常低的光照條件下,它可以通過記住先前視頻幀中的先前檢測到的車道來檢測車道。代碼:類LaneTracker:def init(self,n_lanes,proc_noise_scale,meas_noise_scale,process_cov_parallel = 0,proc_noise_type ='white'):self.n_lanes = n_lanes self.meas_size = 4 * self.n_lanes self.state_size = self.meas_size * 2 self.contr_size = 0

結論:

對于我們的數據集,該算法執行得很好。對于非常低強度的燈光,它可以使用卡爾曼濾波器檢測車道。檢測到的車道標記非常穩定,對強度和噪聲變化具有魯棒性。

最后,歡迎大家通過微信公眾號聯系我們。

總結

以上是生活随笔為你收集整理的基于Python的复杂环境中车道线自动检测系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。