91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用于無(wú)人駕駛技術(shù)中的車道線檢測(cè)技術(shù)

ml8z_IV_Technol ? 來(lái)源:cc ? 2019-01-23 10:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在本次分享中,我將以優(yōu)達(dá)學(xué)城(Udacity)無(wú)人駕駛工程師學(xué)位中提供的高級(jí)車道線檢測(cè)項(xiàng)目為例,介紹普適性更好,且更為魯棒的車道線檢測(cè)技術(shù),用于處理那些無(wú)人駕駛中常見的(如路面顏色變化、路邊障礙物陰影等導(dǎo)致的)光線變化劇烈和彎道的場(chǎng)景。

按照慣例,在介紹計(jì)算機(jī)視覺技術(shù)前,我們先討論一下這次分享的輸入和輸出。

輸入

一個(gè)連續(xù)的視頻,視頻中的左車道線為黃色實(shí)線,右車道線為白色虛線。無(wú)人車會(huì)經(jīng)過(guò)路面顏色突變、路邊樹木影子干擾、車道線不清晰和急轉(zhuǎn)彎的路況。

輸出

左、右車道線的三次曲線方程,及其有效距離。最后將車道線圍成的區(qū)域顯示在圖像上,如下圖所示。

輸入和輸出都定義清楚后,我們開始探討高級(jí)車道線檢測(cè)的算法,并對(duì)每幀視頻圖像中的車道線進(jìn)行檢測(cè)。

攝像機(jī)標(biāo)定

相信大家都多少聽說(shuō)過(guò)魚眼相機(jī),最常見的魚眼相機(jī)是輔助駕駛員倒車的后向攝像頭。也有很多攝影愛好者會(huì)使用魚眼相機(jī)拍攝圖像,最終會(huì)有高大上的大片效果,如下圖所示。

圖片來(lái)源:優(yōu)達(dá)學(xué)城(Udacity)無(wú)人駕駛工程師課程

使用魚眼相機(jī)拍攝的圖像雖然高大上,但存在一個(gè)很大的問題——畸變(Distortion)。如上圖所示,走道上的欄桿應(yīng)該是筆直延伸出去的。然而,欄桿在圖像上的成像卻是彎曲的,這就是圖像畸變,畸變會(huì)導(dǎo)致圖像失真。

使用車載攝像機(jī)拍攝出的圖像,雖然沒有魚眼相機(jī)的畸變這么夸張,但是畸變是客觀存在的,只是人眼難以察覺。使用有畸變的圖像做車道線的檢測(cè),檢測(cè)結(jié)果的精度將會(huì)受到影響,因此進(jìn)行圖像處理的第一步工作就是去畸變。

為了解決車載攝像機(jī)圖像的畸變問題,攝像機(jī)標(biāo)定技術(shù)應(yīng)運(yùn)而生。

攝像機(jī)標(biāo)定是通過(guò)對(duì)已知的形狀進(jìn)行拍照,通過(guò)計(jì)算該形狀在真實(shí)世界中位置與在圖像中位置的偏差量(畸變系數(shù)),進(jìn)而用這個(gè)偏差量去修正其他畸變圖像的技術(shù)。

原則上,可以選用任何的已知形狀去校準(zhǔn)攝像機(jī),不過(guò)業(yè)內(nèi)的標(biāo)定方法都是基于棋盤格的。因?yàn)樗邆湟?guī)則的、高對(duì)比度圖案,能非常方便地自動(dòng)化檢測(cè)各個(gè)棋盤格的交點(diǎn),十分適合標(biāo)定攝像機(jī)的標(biāo)定工作。如下圖所示為標(biāo)準(zhǔn)的10x7(7行10列)的棋盤格。

OpenCV庫(kù)為攝像機(jī)標(biāo)定提供了函數(shù)cv2.findChessboardCorners(),它能自動(dòng)地檢測(cè)棋盤格內(nèi)4個(gè)棋盤格的交點(diǎn)(2白2黑的交接點(diǎn))。我們只需要輸入攝像機(jī)拍攝的完整棋盤格圖像和交點(diǎn)在橫縱向上的數(shù)量即可。隨后我們可以使用函數(shù)cv2.drawChessboardCorners()繪制出檢測(cè)的結(jié)果。

棋盤格原圖如下所示:

圖片出處:https://github.com/udacity/CarND-Advanced-Lane-Lines/blob/master/camera_cal/calibration2.jpg

使用OpenCV自動(dòng)交點(diǎn)檢測(cè)的結(jié)果如下:

獲取交點(diǎn)的檢測(cè)結(jié)果后,使用函數(shù)cv2.calibrateCamera()即可得到相機(jī)的畸變系數(shù)。

為了使攝像機(jī)標(biāo)定得到的畸變系數(shù)更加準(zhǔn)確,我們使用車載攝像機(jī)從不同的角度拍攝20張棋盤格,將所有的交點(diǎn)檢測(cè)結(jié)果保存,再進(jìn)行畸變系數(shù)的的計(jì)算。

我們將讀入圖片、預(yù)處理圖片、檢測(cè)交點(diǎn)、標(biāo)定相機(jī)的一系列操作,封裝成一個(gè)函數(shù),如下所示:

# Step 1 : Calculate camera distortion coefficientsdef getCameraCalibrationCoefficients(chessboardname, nx, ny): # prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0) objp = np.zeros((ny * nx, 3), np.float32) objp[:,:2] = np.mgrid[0:nx, 0:ny].T.reshape(-1,2) # Arrays to store object points and image points from all the images. objpoints = [] # 3d points in real world space imgpoints = [] # 2d points in image plane. images = glob.glob(chessboardname) if len(images) > 0: print("images num for calibration : ", len(images)) else: print("No image for calibration.") return ret_count = 0 for idx, fname in enumerate(images): img = cv2.imread(fname) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_size = (img.shape[1], img.shape[0]) # Finde the chessboard corners ret, corners = cv2.findChessboardCorners(gray, (nx, ny), None) # If found, add object points, image points if ret == True: ret_count += 1 objpoints.append(objp) imgpoints.append(corners) ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img_size, None, None) print('Do calibration successfully') return ret, mtx, dist, rvecs, tvecs

需要標(biāo)定的一系列圖片如下圖所示:

圖片出處:https://github.com/udacity/CarND-Advanced-Lane-Lines/tree/master/camera_cal

調(diào)用之前封裝好的函數(shù),獲取畸變參數(shù)。

nx = 9 ny = 6 ret, mtx, dist, rvecs, tvecs = getCameraCalibrationCoefficients('camera_cal/calibration*.jpg', nx, ny)

隨后,使用OpenCV提供的函數(shù)cv2.undistort(),傳入剛剛計(jì)算得到的畸變參數(shù),即可將畸變的圖像進(jìn)行畸變修正處理。

# Step 2 : Undistort image def undistortImage(distortImage, mtx, dist): return cv2.undistort(distortImage, mtx, dist, None, mtx)

以畸變的棋盤格圖像為例,進(jìn)行畸變修正處理

# Read distorted chessboard image test_distort_image = cv2.imread('./camera_cal/calibration4.jpg') # Do undistortion test_undistort_image = undistortImage(test_distort_image, mtx, dist)

畸變圖像如下圖所示:

圖像出處:https://github.com/udacity/CarND-Advanced-Lane-Lines/blob/master/camera_cal/calibration4.jpg

復(fù)原后的圖像如下圖所示:

同理,我們將攝像機(jī)拍攝到的實(shí)際路況進(jìn)行畸變修正處理。

test_distort_image = cv2.imread('test_images/straight_lines1.jpg') # Do undistortion test_undistort_image = undistortImage(test_distort_image, mtx, dist)

原始畸變圖像如下所示:

圖片出處:https://github.com/udacity/CarND-Advanced-Lane-Lines/blob/master/test_images/straight_lines1.jpg

畸變修正后的圖像如下所示:

可以看到離鏡頭更近的左側(cè)、右側(cè)和下側(cè)的圖像比遠(yuǎn)處的畸變修正更明顯。

篩選圖像

從我們作為輸入的視頻可以看出,車輛會(huì)經(jīng)歷顛簸、車道線不清晰、路面顏色突變,路邊障礙物陰影干擾等復(fù)雜工況。因此,需要將這些復(fù)雜的場(chǎng)景篩選出來(lái),確保后續(xù)的算法能夠在這些復(fù)雜場(chǎng)景中正確地檢測(cè)出車道線。

使用以下代碼將視頻中的圖像數(shù)據(jù)提取,進(jìn)行畸變修正處理后,存儲(chǔ)在名為original_image的文件夾中,以供挑選。

video_input = 'project_video.mp4' cap = cv2.VideoCapture(video_input) count = 1 while(True): ret, image = cap.read() if ret: undistort_image = undistortImage(image, mtx, dist) cv2.imwrite('original_image/' + str(count) + '.jpg', undistort_image) count += 1 else: break cap.release()

在original_image文件夾中,挑選出以下6個(gè)場(chǎng)景進(jìn)行檢測(cè)。這6個(gè)場(chǎng)景既包含了視頻中常見的正常直道、正常彎道工況,也包含了具有挑戰(zhàn)性的陰影、明暗劇烈變化的工況。如下圖所示:

無(wú)陰影、顏色無(wú)明暗變換的直道

無(wú)陰影、顏色無(wú)明暗變換的彎道

有小面積陰影、顏色由暗到亮的直道

無(wú)陰影、道路標(biāo)志線不清晰的彎道

有大面積陰影、顏色由暗到亮的彎道

有大面積陰影、顏色由亮到暗的彎道

如果后續(xù)的高級(jí)車道線檢測(cè)算法能夠完美處理以上六種工況,那將算法應(yīng)用到視頻中,也會(huì)得到完美的車道線檢測(cè)效果。

透視變換

在完成圖像的畸變修正后,就要將注意力轉(zhuǎn)移到車道線。與《無(wú)人駕駛技術(shù)入門(十四)| 初識(shí)圖像之初級(jí)車道線檢測(cè)》中技術(shù)類似,這里需要定義一個(gè)感興趣區(qū)域。很顯然,我們的感興趣區(qū)域就是車輛正前方的這個(gè)車道。為了獲取感興趣區(qū)域,我們需要對(duì)自車正前方的道路使用一種叫做透視變換的技術(shù)。

“透視”是圖像成像時(shí),物體距離攝像機(jī)越遠(yuǎn),看起來(lái)越小的一種現(xiàn)象。在真實(shí)世界中,左右互相平行的車道線,會(huì)在圖像的最遠(yuǎn)處交匯成一個(gè)點(diǎn)。這個(gè)現(xiàn)象就是“透視成像”的原理造成的。

以立在路邊的交通標(biāo)志牌為例,它在攝像機(jī)所拍攝的圖像中的成像結(jié)果一般如下下圖所示:

圖片來(lái)源:優(yōu)達(dá)學(xué)城(Udacity)無(wú)人駕駛工程師課程

在這幅圖像上,原本應(yīng)該是正八邊形的標(biāo)志牌,成像成為一個(gè)不規(guī)則的八邊形。

通過(guò)使用透視變換技術(shù),可以將不規(guī)則的八邊形投影成規(guī)則的正八邊形。應(yīng)用透視變換后的結(jié)果對(duì)比如吐下:

圖片來(lái)源:優(yōu)達(dá)學(xué)城(Udacity)無(wú)人駕駛工程師課程

透視變換的原理:首先新建一幅跟左圖同樣大小的右圖,隨后在做圖中選擇標(biāo)志牌位于兩側(cè)的四個(gè)點(diǎn)(如圖中的紅點(diǎn)),記錄這4個(gè)點(diǎn)的坐標(biāo),我們稱這4個(gè)點(diǎn)為src_points。圖中的4個(gè)點(diǎn)組成的是一個(gè)平行四邊形。

由先驗(yàn)知識(shí)可知,左圖中4個(gè)點(diǎn)所圍成的平行四邊形,在現(xiàn)實(shí)世界中是一個(gè)長(zhǎng)方形,因此在右邊的圖中,選擇一個(gè)合適的位置,選擇一個(gè)長(zhǎng)方形區(qū)域,這個(gè)長(zhǎng)方形的4個(gè)端點(diǎn)一一對(duì)應(yīng)著原圖中的src_points,我們稱新的這4個(gè)點(diǎn)為dst_points。

得到src_points,dst_points后,我們就可以使用OpenCV中計(jì)算投影矩陣的函數(shù)cv2.getPerspectiveTransform(src_points, dst_points)算出src_points到dst_points的投影矩陣和投影變換后的圖像了。

使用OpenCV庫(kù)實(shí)現(xiàn)透視變換的代碼如下:

# Step 3 : Warp image based on src_points and dst_points # The type of src_points & dst_points should be like # np.float32([ [0,0], [100,200], [200, 300], [300,400]]) def warpImage(image, src_points, dst_points): image_size = (image.shape[1], image.shape[0]) # rows = img.shape[0] 720 # cols = img.shape[1] 1280 M = cv2.getPerspectiveTransform(src, dst) Minv = cv2.getPerspectiveTransform(dst, src) warped_image = cv2.warpPerspective(image, M,image_size, flags=cv2.INTER_LINEAR) return warped_image, M, Minv

同理,對(duì)于畸變修正過(guò)的道路圖像,我們同樣使用相同的方法,將我們感興趣的區(qū)域做透視變換。

如下圖所示,我們選用一張?jiān)谥本€道路上行駛的圖像,沿著左右車道線的邊緣,選擇一個(gè)梯形區(qū)域,這個(gè)區(qū)域在真實(shí)的道路中應(yīng)該是一個(gè)長(zhǎng)方形,因此我們選擇將這個(gè)梯形區(qū)域投影成為一個(gè)長(zhǎng)方形,在右圖橫坐標(biāo)的合適位置設(shè)置長(zhǎng)方形的4個(gè)端點(diǎn)。最終的投影結(jié)果就像“鳥瞰圖”一樣。

圖片出處:https://github.com/udacity/CarND-Advanced-Lane-Lines/tree/master/examples/warped_straight_lines.jpg

使用以下代碼,通過(guò)不斷調(diào)整src和dst的值,確保在直線道路上,能夠調(diào)試出滿意的透視變換圖像。

test_distort_image = cv2.imread('test_images/test4.jpg')# 畸變修正test_undistort_image = undistortImage(test_distort_image, mtx, dist)# 左圖梯形區(qū)域的四個(gè)端點(diǎn)src = np.float32([[580, 460], [700, 460], [1096, 720], [200, 720]])# 右圖矩形區(qū)域的四個(gè)端點(diǎn)dst = np.float32([[300, 0], [950, 0], [950, 720], [300, 720])test_warp_image, M, Minv = warpImage(test_undistort_image, src, dst)

最終,我們把篩選出的6幅圖統(tǒng)一應(yīng)用調(diào)整好的src、dst做透視變換,結(jié)果如下:

無(wú)陰影、顏色無(wú)明暗變換的直道

無(wú)陰影、顏色無(wú)明暗變換的彎道

有小面積陰影、顏色由暗到亮的直道

無(wú)陰影、道路標(biāo)志線不清晰的彎道

有大面積陰影、顏色由暗到亮的彎道

有大面積陰影、顏色由亮到暗的彎道

可以看到,越靠圖片下方的圖像越清晰,越上方的圖像越模糊。這是因?yàn)樵竭h(yuǎn)的地方,左圖中的像素點(diǎn)越少。而無(wú)論是遠(yuǎn)處還是近處,需要在右圖中填充的像素點(diǎn)數(shù)量是一樣的。左圖近處有足夠多的點(diǎn)去填充右圖,而左圖遠(yuǎn)處的點(diǎn)有限,只能通過(guò)插值的方式創(chuàng)造“假的”像素點(diǎn)進(jìn)行填充,所以就不那么清晰了。

提取車道線

在《無(wú)人駕駛技術(shù)入門(十四)| 初識(shí)圖像之初級(jí)車道線檢測(cè)》中,我們介紹了通過(guò)Canny邊緣提取算法獲取車道線待選點(diǎn)的方法,隨后使用霍夫直線變換進(jìn)行了車道線的檢測(cè)。在這里,我們也嘗試使用邊緣提取的方法進(jìn)行車道線提取。

需要注意的是,Canny邊緣提取算法會(huì)將圖像中各個(gè)方向、明暗交替位置的邊緣都提取出來(lái),很明顯,Canny邊緣提取算法在處理有樹木陰影的道路時(shí),會(huì)將樹木影子的輪廓也提取出來(lái),這是我們不愿意看到的。

因此我們選用Sobel邊緣提取算法。Sobel相比于Canny的優(yōu)秀之處在于,它可以選擇橫向或縱向的邊緣進(jìn)行提取。從投影變換后的圖像可以看出,我們關(guān)心的正是車道線在橫向上的邊緣突變。

封裝一下OpenCV提供的cv2.Sobel()函數(shù),將進(jìn)行邊緣提取后的圖像做二進(jìn)制圖的轉(zhuǎn)化,即提取到邊緣的像素點(diǎn)顯示為白色(值為1),未提取到邊緣的像素點(diǎn)顯示為黑色(值為0)。

def absSobelThreshold(img, orient='x', thresh_min=30, thresh_max=100): # Convert to grayscale gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) # Apply x or y gradient with the OpenCV Sobel() function # and take the absolute value if orient == 'x': abs_sobel = np.absolute(cv2.Sobel(gray, cv2.CV_64F, 1, 0)) if orient == 'y': abs_sobel = np.absolute(cv2.Sobel(gray, cv2.CV_64F, 0, 1)) # Rescale back to 8 bit integer scaled_sobel = np.uint8(255*abs_sobel/np.max(abs_sobel)) # Create a copy and apply the threshold binary_output = np.zeros_like(scaled_sobel) # Here I'm using inclusive (>=, <=) thresholds, but exclusive is ok too ? ?binary_output[(scaled_sobel >= thresh_min) & (scaled_sobel <= thresh_max)] = 1 ? ?# Return the result ? ?return binary_output

使用同一組閾值對(duì)以上6幅做過(guò)投影變換的圖像進(jìn)行x方向的邊緣提取,可以得到如下結(jié)果:

無(wú)陰影、顏色無(wú)明暗變換的直道

無(wú)陰影、顏色無(wú)明暗變換的彎道

有小面積陰影、顏色由暗到亮的直道

無(wú)陰影、道路標(biāo)志線不清晰的彎道

有大面積陰影、顏色由暗到亮的彎道

有大面積陰影、顏色由亮到暗的彎道

由以上結(jié)果可以看出,在明暗交替明顯的路面上,如圖1和圖2,橫向的Sobel邊緣提取算法在提取車道線的表現(xiàn)上還不錯(cuò)。不過(guò)一旦道路的明暗交替不那么明顯了,如圖3和圖4的白色路面區(qū)域,很難提取到有效的車道線待選點(diǎn)。當(dāng)面對(duì)有樹木陰影覆蓋的區(qū)域時(shí),如圖5和圖6,雖然能提取出車道線的大致輪廓,但會(huì)同時(shí)引入的噪聲,給后續(xù)處理帶來(lái)麻煩。

因此,橫向的Sobel邊緣提取算法,無(wú)法很好地處理路面陰影、明暗交替的道路工況。

無(wú)法使用邊緣提取的方法提取車道線后,我們開始將顏色空間作為突破口。

在以上6個(gè)場(chǎng)景中,雖然路面明暗交替,而且偶爾會(huì)有陰影覆蓋,但黃色和白色的車道線是一直都存在的。因此,我們?nèi)绻軐D中的黃色和白色分割出來(lái),然后將兩種顏色組合在一幅圖上,就能夠得到一個(gè)比較好的處理結(jié)果。

一幅圖像除了用RGB(紅綠藍(lán))三個(gè)顏色通道表示以外,還可以使用HSL(H色相、S飽和度、L亮度)和Lab(L亮度、a紅綠通道、b藍(lán)黃)模型來(lái)描述圖像,三通道的值與實(shí)際的成像顏色如下圖所示。

圖片出處:https://blog.csdn.net/wsp_1138886114/article/details/80660014

我們可以根據(jù)HSL模型中的L(亮度)通道來(lái)分割出圖像中的白色車道線,同時(shí)可以根據(jù)Lab模型中的b(藍(lán)黃)通道來(lái)分割出圖像中的黃色車道線,再將兩次的分割結(jié)果,去合集,疊加到一幅圖上,就能得到兩條完整的車道線了。

使用OpenCV提供的cv2.cvtColor()接口,將RGB通道的圖,轉(zhuǎn)為HLS通道的圖,隨后對(duì)L通道進(jìn)行分割處理,提取圖像中白色的車道線。封裝成代碼如下:

def hlsLSelect(img, thresh=(220, 255)): hls = cv2.cvtColor(img, cv2.COLOR_BGR2HLS) l_channel = hls[:,:,1] l_channel = l_channel*(255/np.max(l_channel)) binary_output = np.zeros_like(l_channel) binary_output[(l_channel > thresh[0]) & (l_channel <= thresh[1])] = 1 ? ?return binary_output

使用同一組閾值對(duì)以上6種工況進(jìn)行處理,處理結(jié)果如下圖所示。

無(wú)陰影、顏色無(wú)明暗變換的直道

無(wú)陰影、顏色無(wú)明暗變換的彎道

有小面積陰影、顏色由暗到亮的直道

無(wú)陰影、道路標(biāo)志線不清晰的彎道

有大面積陰影、顏色由暗到亮的彎道

有大面積陰影、顏色由亮到暗的彎道

使用OpenCV提供的cv2.cvtColor()接口,將RGB通道的圖,轉(zhuǎn)為L(zhǎng)ab通道的圖,隨后對(duì)b通道進(jìn)行分割處理,提取圖像中黃色的車道線。封裝成代碼如下:

def labBSelect(img, thresh=(195, 255)): # 1) Convert to LAB color space lab = cv2.cvtColor(img, cv2.COLOR_BGR2Lab) lab_b = lab[:,:,2] # don't normalize if there are no yellows in the image if np.max(lab_b) > 100: lab_b = lab_b*(255/np.max(lab_b)) # 2) Apply a threshold to the L channel binary_output = np.zeros_like(lab_b) binary_output[((lab_b > thresh[0]) & (lab_b <= thresh[1]))] = 1 ? ?# 3) Return a binary image of threshold result ? ?return binary_output

使用同一組閾值對(duì)以上6種工況進(jìn)行處理,處理結(jié)果如下圖所示。

無(wú)陰影、顏色無(wú)明暗變換的直道

無(wú)陰影、顏色無(wú)明暗變換的彎道

有小面積陰影、顏色由暗到亮的直道

無(wú)陰影、道路標(biāo)志線不清晰的彎道

有大面積陰影、顏色由暗到亮的彎道

有大面積陰影、顏色由亮到暗的彎道

根據(jù)以上試驗(yàn)可知,L通道能夠較好地分割出圖像中的白色車道線,b通道能夠較好地分割出圖像中的黃色車道線。即使面對(duì)樹木陰影和路面顏色突變的場(chǎng)景,也能盡可能少地引入噪聲。

最后,我們使用以下代碼,將兩個(gè)通道分割的圖像合并

hlsL_binary = hlsLSelect(test_warp_image) labB_binary = labBSelect(test_warp_image) combined_binary = np.zeros_like(hlsL_binary) combined_binary[(hlsL_binary == 1) | (labB_binary == 1)] = 1

最終合并的效果如下圖所示:

無(wú)陰影、顏色無(wú)明暗變換的直道

無(wú)陰影、顏色無(wú)明暗變換的彎道

有小面積陰影、顏色由亮到暗的直道

無(wú)陰影、道路標(biāo)志線不清晰的彎道

有大面積陰影、顏色由暗到亮的彎道

有大面積陰影、顏色由亮到暗的彎道

以上僅僅是車道線提取的方法之一。除了可以通過(guò)HSL和Lab顏色通道,這種基于規(guī)則的方法,分割出車道線外,還可以使用基于深度學(xué)習(xí)的方法。它們目的都是為了能夠穩(wěn)定地將車道線從圖像中分割出來(lái)。

檢測(cè)車道線

在檢測(cè)車道線前,需要粗定位車道線的位置。為了方便理解,這里引入一個(gè)概念——直方圖。

以下面這幅包含噪點(diǎn)的圖像為例,進(jìn)行直方圖的介紹。

圖片出處:優(yōu)達(dá)學(xué)城(Udacity)無(wú)人駕駛工程師學(xué)位

我們知道,我們處理的圖像的分辨率為1280*720,即720行,1280列。如果我將每一列的白色的點(diǎn)數(shù)量進(jìn)行統(tǒng)計(jì),即可得到1280個(gè)值。將這1280個(gè)值繪制在一個(gè)坐標(biāo)系中,橫坐標(biāo)為1-1280,縱坐標(biāo)表示每列中白色點(diǎn)的數(shù)量,那么這幅圖就是“直方圖”,如下圖所示:

圖片出處:優(yōu)達(dá)學(xué)城(Udacity)無(wú)人駕駛工程師學(xué)位

將兩幅圖疊加,效果如下:

圖片出處:優(yōu)達(dá)學(xué)城(Udacity)無(wú)人駕駛工程師學(xué)位

找到直方圖左半邊最大值所對(duì)應(yīng)的列數(shù),即為左車道線所在的大致位置;找到直方圖右半邊最大值所對(duì)應(yīng)的列數(shù),即為右車道線所在的大致位置。

使用直方圖找左右車道線大致位置的代碼如下,其中l(wèi)eftx_base和rightx_base即為左右車道線所在列的大致位置。

# Take a histogram of the bottom half of the image histogram = np.sum(combined_binary[combined_binary.shape[0]//2:,:], axis=0) # Create an output image to draw on and visualize the result out_img = np.dstack((combined_binary, combined_binary, combined_binary)) # Find the peak of the left and right halves of the histogram # These will be the starting point for the left and right lines midpoint = np.int(histogram.shape[0]//2) leftx_base = np.argmax(histogram[:midpoint]) rightx_base = np.argmax(histogram[midpoint:]) + midpoint

確定了左右車道線的大致位置后,使用一種叫做“滑動(dòng)窗口”的技術(shù),在圖中對(duì)左右車道線的點(diǎn)進(jìn)行搜索。先看一個(gè)介紹"滑動(dòng)窗口"原理的視頻(視頻大小1.18M)。

滑動(dòng)窗口原理

首先根據(jù)前面介紹的直方圖方法,找到左右車道線的大致位置,將這兩個(gè)大致位置作為起始點(diǎn)。定義一個(gè)矩形區(qū)域,稱之為“窗口”(圖中棕色的部分),分別以兩個(gè)起始點(diǎn)作為窗口的下邊線中點(diǎn),存儲(chǔ)所有在方塊中的白色點(diǎn)的橫坐標(biāo)。

隨后對(duì)存儲(chǔ)的橫坐標(biāo)取均值,將該均值所在的列以及第一個(gè)”窗口“的上邊緣所在的位置,作為下一個(gè)“窗口”的下邊線中點(diǎn),繼續(xù)搜索。

以此往復(fù),直到把所有的行都搜索完畢

所有落在窗口(圖中棕色區(qū)域)中的白點(diǎn),即為左右車道線的待選點(diǎn),如下圖藍(lán)色和紅色所示。隨后將藍(lán)色點(diǎn)和紅色點(diǎn)做三次曲線擬合,即可得到車道線的曲線方程。

使用直方圖、滑動(dòng)窗口檢測(cè)車道線的代碼如下:

# Step 5 : Detect lane lines through moving window def find_lane_pixels(binary_warped, nwindows, margin, minpix): # Take a histogram of the bottom half of the image histogram = np.sum(binary_warped[binary_warped.shape[0]//2:,:], axis=0) # Create an output image to draw on and visualize the result out_img = np.dstack((binary_warped, binary_warped, binary_warped)) # Find the peak of the left and right halves of the histogram # These will be the starting point for the left and right lines midpoint = np.int(histogram.shape[0]//2) leftx_base = np.argmax(histogram[:midpoint]) rightx_base = np.argmax(histogram[midpoint:]) + midpoint # Set height of windows - based on nwindows above and image shape window_height = np.int(binary_warped.shape[0]//nwindows) # Identify the x and y positions of all nonzero pixels in the image nonzero = binary_warped.nonzero() nonzeroy = np.array(nonzero[0]) nonzerox = np.array(nonzero[1]) # Current positions to be updated later for each window in nwindows leftx_current = leftx_base rightx_current = rightx_base # Create empty lists to receive left and right lane pixel indices left_lane_inds = [] right_lane_inds = [] # Step through the windows one by one for window in range(nwindows): # Identify window boundaries in x and y (and right and left) win_y_low = binary_warped.shape[0] - (window+1)*window_height win_y_high = binary_warped.shape[0] - window*window_height win_xleft_low = leftx_current - margin win_xleft_high = leftx_current + margin win_xright_low = rightx_current - margin win_xright_high = rightx_current + margin # Draw the windows on the visualization image cv2.rectangle(out_img,(win_xleft_low,win_y_low), (win_xleft_high,win_y_high),(0,255,0), 2) cv2.rectangle(out_img,(win_xright_low,win_y_low), (win_xright_high,win_y_high),(0,255,0), 2) # Identify the nonzero pixels in x and y within the window # good_left_inds = ((nonzeroy >= win_y_low) & (nonzeroy < win_y_high) & ? ? ? ?(nonzerox >= win_xleft_low) & (nonzerox < win_xleft_high)).nonzero()[0] ? ? ? ?good_right_inds = ((nonzeroy >= win_y_low) & (nonzeroy < win_y_high) & ? ? ? ?(nonzerox >= win_xright_low) & (nonzerox < win_xright_high)).nonzero()[0] ? ? ? ? ? ? ? ?# Append these indices to the lists ? ? ? ?left_lane_inds.append(good_left_inds) ? ? ? ?right_lane_inds.append(good_right_inds) ? ? ? ? ? ? ? ?# If you found > minpix pixels, recenter next window on their mean position if len(good_left_inds) > minpix: leftx_current = np.int(np.mean(nonzerox[good_left_inds])) if len(good_right_inds) > minpix: rightx_current = np.int(np.mean(nonzerox[good_right_inds])) # Concatenate the arrays of indices (previously was a list of lists of pixels) try: left_lane_inds = np.concatenate(left_lane_inds) right_lane_inds = np.concatenate(right_lane_inds) except ValueError: # Avoids an error if the above is not implemented fully pass # Extract left and right line pixel positions leftx = nonzerox[left_lane_inds] lefty = nonzeroy[left_lane_inds] rightx = nonzerox[right_lane_inds] righty = nonzeroy[right_lane_inds] return leftx, lefty, rightx, righty, out_img def fit_polynomial(binary_warped, nwindows=9, margin=100, minpix=50): # Find our lane pixels first leftx, lefty, rightx, righty, out_img = find_lane_pixels( binary_warped, nwindows, margin, minpix) # Fit a second order polynomial to each using `np.polyfit` left_fit = np.polyfit(lefty, leftx, 2) right_fit = np.polyfit(righty, rightx, 2) # Generate x and y values for plotting ploty = np.linspace(0, binary_warped.shape[0]-1, binary_warped.shape[0] ) try: left_fitx = left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2] right_fitx = right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2] except TypeError: # Avoids an error if `left` and `right_fit` are still none or incorrect print('The function failed to fit a line!') left_fitx = 1*ploty**2 + 1*ploty right_fitx = 1*ploty**2 + 1*ploty ## Visualization ## # Colors in the left and right lane regions out_img[lefty, leftx] = [255, 0, 0] out_img[righty, rightx] = [0, 0, 255] # Plots the left and right polynomials on the lane lines #plt.plot(left_fitx, ploty, color='yellow') #plt.plot(right_fitx, ploty, color='yellow') return out_img, left_fit, right_fit, ploty

對(duì)以上6種工況進(jìn)行車道線檢測(cè),處理結(jié)果如下圖所示。

無(wú)陰影、顏色無(wú)明暗變換的直道

無(wú)陰影、顏色無(wú)明暗變換的彎道

有小面積陰影、顏色由暗到亮的直道

無(wú)陰影、道路標(biāo)志線不清晰的彎道

有大面積陰影、顏色由暗到亮的彎道

有大面積陰影、顏色由亮到暗的彎道

跟蹤車道線

視頻數(shù)據(jù)是連續(xù)的圖片,基于連續(xù)兩幀圖像中的車道線不會(huì)突變的先驗(yàn)知識(shí),我們可以使用上一幀檢測(cè)到的車道線結(jié)果,作為下一幀圖像處理的輸入,搜索上一幀車道線檢測(cè)結(jié)果附近的點(diǎn),這樣不僅可以減少計(jì)算量,而且得到的車道線結(jié)果也更穩(wěn)定,如下圖所示。

圖片出處:優(yōu)達(dá)學(xué)城(Udacity)無(wú)人駕駛工程師學(xué)位

圖中的細(xì)黃線為上一幀檢測(cè)到的車道線結(jié)果,綠色陰影區(qū)域?yàn)榧?xì)黃線橫向擴(kuò)展的一個(gè)區(qū)域,通過(guò)搜索該區(qū)域內(nèi)的白點(diǎn)坐標(biāo),即可快速確定當(dāng)前幀中左右車道線的待選點(diǎn)。

使用上一幀的車道線檢測(cè)結(jié)果進(jìn)行車道線跟蹤的代碼如下:

# Step 6 : Track lane lines based the latest lane line result def fit_poly(img_shape, leftx, lefty, rightx, righty): ### TO-DO: Fit a second order polynomial to each with np.polyfit() ### left_fit = np.polyfit(lefty, leftx, 2) right_fit = np.polyfit(righty, rightx, 2) # Generate x and y values for plotting ploty = np.linspace(0, img_shape[0]-1, img_shape[0]) ### TO-DO: Calc both polynomials using ploty, left_fit and right_fit ### left_fitx = left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2] right_fitx = right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2] return left_fitx, right_fitx, ploty, left_fit, right_fit def search_around_poly(binary_warped, left_fit, right_fit): # HYPERPARAMETER # Choose the width of the margin around the previous polynomial to search # The quiz grader expects 100 here, but feel free to tune on your own! margin = 60 # Grab activated pixels nonzero = binary_warped.nonzero() nonzeroy = np.array(nonzero[0]) nonzerox = np.array(nonzero[1]) ### TO-DO: Set the area of search based on activated x-values ### ### within the +/- margin of our polynomial function ### ### Hint: consider the window areas for the similarly named variables ### ### in the previous quiz, but change the windows to our new search area ### left_lane_inds = ((nonzerox > (left_fit[0]*(nonzeroy**2) + left_fit[1]*nonzeroy + left_fit[2] - margin)) & (nonzerox < (left_fit[0]*(nonzeroy**2) + ? ? ? ? ? ? ? ? ? ?left_fit[1]*nonzeroy + left_fit[2] + margin))) ? ?right_lane_inds = ((nonzerox > (right_fit[0]*(nonzeroy**2) + right_fit[1]*nonzeroy + right_fit[2] - margin)) & (nonzerox < (right_fit[0]*(nonzeroy**2) + ? ? ? ? ? ? ? ? ? ?right_fit[1]*nonzeroy + right_fit[2] + margin))) ? ? ? ?# Again, extract left and right line pixel positions ? ?leftx = nonzerox[left_lane_inds] ? ?lefty = nonzeroy[left_lane_inds] ? ?rightx = nonzerox[right_lane_inds] ? ?righty = nonzeroy[right_lane_inds] ? ?# Fit new polynomials ? ?left_fitx, right_fitx, ploty, left_fit, right_fit = fit_poly(binary_warped.shape, leftx, lefty, rightx, righty) ? ? ? ?## Visualization ## ? ?# Create an image to draw on and an image to show the selection window ? ?out_img = np.dstack((binary_warped, binary_warped, binary_warped))*255 ? ?window_img = np.zeros_like(out_img) ? ?# Color in left and right line pixels ? ?out_img[nonzeroy[left_lane_inds], nonzerox[left_lane_inds]] = [255, 0, 0] ? ?out_img[nonzeroy[right_lane_inds], nonzerox[right_lane_inds]] = [0, 0, 255] ? ?# Generate a polygon to illustrate the search window area ? ?# And recast the x and y points into usable format for cv2.fillPoly() ? ?left_line_window1 = np.array([np.transpose(np.vstack([left_fitx-margin, ploty]))]) ? ?left_line_window2 = np.array([np.flipud(np.transpose(np.vstack([left_fitx+margin, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ploty])))]) ? ?left_line_pts = np.hstack((left_line_window1, left_line_window2)) ? ?right_line_window1 = np.array([np.transpose(np.vstack([right_fitx-margin, ploty]))]) ? ?right_line_window2 = np.array([np.flipud(np.transpose(np.vstack([right_fitx+margin, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ploty])))]) ? ?right_line_pts = np.hstack((right_line_window1, right_line_window2)) ? ?# Draw the lane onto the warped blank image ? ?cv2.fillPoly(window_img, np.int_([left_line_pts]), (0,255, 0)) ? ?cv2.fillPoly(window_img, np.int_([right_line_pts]), (0,255, 0)) ? ?result = cv2.addWeighted(out_img, 1, window_img, 0.3, 0) ? ? ? ?# Plot the polynomial lines onto the image ? ?#plt.plot(left_fitx, ploty, color='yellow') ? ?#plt.plot(right_fitx, ploty, color='yellow') ? ?## End visualization steps ## ? ? ? ?return result, left_fit, right_fit, ploty

對(duì)以上6種工況進(jìn)行車道線跟蹤,處理結(jié)果如下圖所示。

無(wú)陰影、顏色無(wú)明暗變換的直道

無(wú)陰影、顏色無(wú)明暗變換的彎道

有小面積陰影、顏色由暗到亮的直道

無(wú)陰影、道路標(biāo)志線不清晰的彎道

有大面積陰影、顏色由暗到亮的彎道

有大面積陰影、顏色由亮到暗的彎道

以上,我們就完成了在透視變換結(jié)果上的車道線檢測(cè)和跟蹤。

逆投影到原圖

我們?cè)谟?jì)算透視變換矩陣時(shí)計(jì)算了兩個(gè)矩陣M和Minv,使用M能夠?qū)崿F(xiàn)透視變換,使用Minv能夠?qū)崿F(xiàn)逆透視變換。

M = cv2.getPerspectiveTransform(src, dst) Minv = cv2.getPerspectiveTransform(dst, src)

我們將兩條車道線所圍成的區(qū)域涂成綠色,并將結(jié)果繪制在“鳥瞰圖”上后,使用逆透視變換矩陣反投到原圖上,即可實(shí)現(xiàn)在原圖上的可視化效果。代碼如下:

# Step 7 : Draw lane line result on undistorted image def drawing(undist, bin_warped, color_warp, left_fitx, right_fitx): # Create an image to draw the lines on warp_zero = np.zeros_like(bin_warped).astype(np.uint8) color_warp = np.dstack((warp_zero, warp_zero, warp_zero)) # Recast the x and y points into usable format for cv2.fillPoly() pts_left = np.array([np.transpose(np.vstack([left_fitx, ploty]))]) pts_right = np.array([np.flipud(np.transpose(np.vstack([right_fitx, ploty])))]) pts = np.hstack((pts_left, pts_right)) # Draw the lane onto the warped blank image cv2.fillPoly(color_warp, np.int_([pts]), (0,255, 0)) # Warp the blank back to original image space using inverse perspective matrix (Minv) newwarp = cv2.warpPerspective(color_warp, Minv, (undist.shape[1], undist.shape[0])) # Combine the result with the original image result = cv2.addWeighted(undist, 1, newwarp, 0.3, 0) return result

以上6個(gè)場(chǎng)景的左右車道線繪制結(jié)果如下所示:

無(wú)陰影、顏色無(wú)明暗變換的直道

無(wú)陰影、顏色無(wú)明暗變換的彎道

有小面積陰影、顏色由暗到亮的直道

無(wú)陰影、道路標(biāo)志線不清晰的彎道

有大面積陰影、顏色由暗到亮的彎道

有大面積陰影、顏色由亮到暗的彎道

處理視頻

在一步步完成攝像機(jī)標(biāo)定、圖像畸變校正、透視變換、提取車道線、檢測(cè)車道線、跟蹤車道線后,我們?cè)趫D像上實(shí)現(xiàn)了復(fù)雜環(huán)境下的車道線檢測(cè)算法?,F(xiàn)在我們將視頻轉(zhuǎn)化為圖片,然后一幀幀地對(duì)視頻數(shù)據(jù)進(jìn)行處理,然后將車道線檢測(cè)結(jié)果存為另一段視頻。

高級(jí)車道線檢測(cè)算法效果

視頻中左上角出現(xiàn)的道路曲率和車道偏離量的計(jì)算都是獲取車道線曲線方程后的具體應(yīng)用,這里不做詳細(xì)討論。

結(jié)語(yǔ)

以上就是《再識(shí)圖像之高級(jí)車道線檢測(cè)》的全部?jī)?nèi)容,本次分享中介紹的攝像機(jī)標(biāo)定、投影變換、顏色通道、滑動(dòng)窗口等技術(shù),在計(jì)算機(jī)視覺領(lǐng)域均得到了廣泛應(yīng)用。

處理復(fù)雜道路場(chǎng)景下的視頻數(shù)據(jù)是一項(xiàng)及其艱巨的任務(wù)。僅以提取車道線的過(guò)程為例,使用設(shè)定規(guī)則的方式提取車道線,雖然能夠處理項(xiàng)目視頻中的場(chǎng)景,但面對(duì)變化更為惡劣的場(chǎng)景時(shí),還是無(wú)能為力?,F(xiàn)階段解決該問題的方法就是通過(guò)深度學(xué)習(xí)的方法,拿足夠多的標(biāo)注數(shù)據(jù)去訓(xùn)練模型,才能盡可能多地達(dá)到穩(wěn)定的檢測(cè)效果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 無(wú)人駕駛
    +關(guān)注

    關(guān)注

    100

    文章

    4297

    瀏覽量

    126839

原文標(biāo)題:無(wú)人駕駛技術(shù)入門 —— 再識(shí)圖像之高級(jí)車道線檢測(cè)

文章出處:【微信號(hào):IV_Technology,微信公眾號(hào):智車科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    驅(qū)動(dòng)無(wú)人駕駛出租車的核心技術(shù)與實(shí)現(xiàn)挑戰(zhàn)

    自動(dòng)駕駛汽車早已不是新鮮話題,近幾年它正逐漸在交通行業(yè)落地。無(wú)人駕駛出租車(即自動(dòng)駕駛出租車)吸引了汽車制造商的廣泛關(guān)注,相關(guān)研發(fā)投入已突破千億美元。[1]盡管投入巨資,但目前尚未有任何L4級(jí)
    的頭像 發(fā)表于 01-23 09:32 ?409次閱讀

    佑駕創(chuàng)新助力低速無(wú)人駕駛行業(yè)高質(zhì)量發(fā)展

    12月19日,2025低速無(wú)人駕駛行業(yè)發(fā)展年會(huì)在武漢啟幕,佑駕創(chuàng)新(2431.HK)作為自動(dòng)駕駛企業(yè)代表受邀參會(huì)。在這場(chǎng)匯聚行業(yè)智慧的盛會(huì)上,公司參與編撰的《2025-2026年無(wú)人配送車技術(shù)
    的頭像 發(fā)表于 12-24 15:37 ?413次閱讀

    LiDAR線圈如何驅(qū)動(dòng)無(wú)人駕駛技術(shù)

    激光雷達(dá)(LiDAR)傳感器線圈是自動(dòng)駕駛系統(tǒng)的關(guān)鍵部件之一,近年來(lái)隨著智能駕駛技術(shù)的快速發(fā)展,其重要性日益凸顯。在比亞迪“智駕天神之眼”這類前沿系統(tǒng)
    的頭像 發(fā)表于 11-30 14:45 ?673次閱讀

    虹科洞察 | 車載以太網(wǎng)在礦山無(wú)人駕駛的應(yīng)用前景探析

    車載以太網(wǎng)在礦山無(wú)人駕駛的應(yīng)用前景在物流車隊(duì)跨省運(yùn)輸?shù)姆泵Ω咚偕?,在露天礦鏟運(yùn)機(jī)晝夜作業(yè)的粉塵環(huán)境,無(wú)人駕駛設(shè)備的每一次精準(zhǔn)決策、每一組協(xié)同動(dòng)作,都依賴穩(wěn)定高效的「通信中樞」。車載
    的頭像 發(fā)表于 11-28 11:03 ?373次閱讀
    虹科洞察 | 車載以太網(wǎng)在礦山<b class='flag-5'>無(wú)人駕駛</b><b class='flag-5'>中</b>的應(yīng)用前景探析

    礦卡無(wú)人駕駛從理論到落地的全過(guò)程記錄(轉(zhuǎn)載)

    去年8月份,我跟著公司團(tuán)隊(duì)去內(nèi)蒙古一個(gè)露天煤礦做無(wú)人駕駛改造項(xiàng)目,那是我第一次真正接觸礦卡無(wú)人駕駛這個(gè)領(lǐng)域。說(shuō)實(shí)話,現(xiàn)場(chǎng)的震撼感比想象強(qiáng)烈得多——幾十噸重的巨型礦卡,在沒有駕駛員的情
    的頭像 發(fā)表于 11-21 14:53 ?1145次閱讀
    礦卡<b class='flag-5'>無(wú)人駕駛</b>從理論到落地的全過(guò)程記錄(轉(zhuǎn)載)

    2025無(wú)人駕駛技術(shù)細(xì)節(jié)及發(fā)展趨勢(shì)|(星創(chuàng)易聯(lián)細(xì)節(jié)解析)

    2025年了 。 讓我們 拋開那些華麗的PPT和煽情的新聞稿,看看無(wú)人駕駛技術(shù)的真實(shí)現(xiàn)狀到底如何。畢竟,技術(shù)不會(huì)因?yàn)楹翱谔?hào)而突破,現(xiàn)實(shí)也不會(huì)因?yàn)橘Y本追捧而改變。 感知系統(tǒng):堆傳感器就能解決問題? 目前的
    的頭像 發(fā)表于 09-26 15:17 ?548次閱讀
    2025<b class='flag-5'>無(wú)人駕駛</b><b class='flag-5'>技術(shù)</b>細(xì)節(jié)及發(fā)展趨勢(shì)|(星創(chuàng)易聯(lián)細(xì)節(jié)解析)

    無(wú)人駕駛:智能決策與精準(zhǔn)執(zhí)行的融合

    無(wú)人駕駛核心操控技術(shù):智能決策與精準(zhǔn)執(zhí)行的融合 無(wú)人駕駛的核心操控系統(tǒng)是車輛實(shí)現(xiàn)自主駕駛的“大腦”與“四肢”,其技術(shù)核心在于通過(guò)感知、決策、
    的頭像 發(fā)表于 09-19 14:03 ?740次閱讀

    低空物流:無(wú)人機(jī)開啟未來(lái)配送新篇章

    ,解決“最后一公里”配送難題 02齊發(fā)力 中國(guó)在低空物流領(lǐng)域已走上快車道,政策、技術(shù)和企業(yè)三駕馬車齊發(fā)力: 政策加持:2023年《無(wú)人駕駛航空器飛行管理暫行條例》為低空物流松綁,深圳、上海、成都
    發(fā)表于 07-04 10:42

    智行者科技無(wú)人駕駛小巴落地海南

    。這條串聯(lián)城市地標(biāo)的示范線路,正是智行者以"無(wú)人駕駛大腦"重塑日常公共出行的縮影——通過(guò)高效、安全、可持續(xù)的無(wú)人駕駛小巴,為智能出行注入全新動(dòng)能。
    的頭像 發(fā)表于 06-11 10:34 ?1598次閱讀

    什么是低速無(wú)人駕駛,讓你一分鐘秒懂 #無(wú)人駕駛 #5g無(wú)人駕駛 #低速無(wú)人駕駛

    無(wú)人駕駛
    星創(chuàng)易聯(lián)
    發(fā)布于 :2025年06月05日 15:27:49

    無(wú)人駕駛技術(shù)未來(lái)在哪里?低速才是突破口

    ? 無(wú)人駕駛技術(shù)這幾年從實(shí)驗(yàn)室迅速走向現(xiàn)實(shí)。在大眾印象,無(wú)人駕駛常被等同于在城市道路上自由穿梭的智能汽車,但實(shí)際率先實(shí)現(xiàn)商業(yè)化落地的,是低速無(wú)人駕
    的頭像 發(fā)表于 05-23 15:38 ?795次閱讀
    <b class='flag-5'>無(wú)人駕駛</b><b class='flag-5'>技術(shù)</b>未來(lái)在哪里?低速才是突破口

    易控智駕無(wú)人駕駛技術(shù)再次取得新突破

    近日,易控智駕無(wú)人駕駛技術(shù)再次取得新突破,“混編+混行”技術(shù)已在國(guó)內(nèi)多個(gè)礦區(qū)成功落地并常態(tài)化“下人”運(yùn)行,成為目前行業(yè)內(nèi)唯一實(shí)現(xiàn)無(wú)人礦卡與人工礦卡在“裝載區(qū)混裝+道路混行+卸載區(qū)混卸”
    的頭像 發(fā)表于 05-09 15:44 ?1660次閱讀

    智行者無(wú)人駕駛技術(shù)助力應(yīng)急救援智能化升級(jí)

    草原火災(zāi)具有火勢(shì)蔓延快、救援環(huán)境復(fù)雜、人工滅火風(fēng)險(xiǎn)高等特點(diǎn),傳統(tǒng)消防設(shè)備往往難以高效應(yīng)對(duì)。草原無(wú)人滅火車通過(guò)融合無(wú)人駕駛、高精度感知與智能決策技術(shù),可快速進(jìn)入火場(chǎng)核心區(qū)域執(zhí)行滅火任務(wù),顯著提升救援效率并保障人員安全。
    的頭像 發(fā)表于 05-08 15:36 ?1076次閱讀

    派歌銳無(wú)人駕駛車輛束:智能駕駛的神經(jīng)網(wǎng)絡(luò)

    派歌銳是專業(yè)的新能源束解決方案提供商,為無(wú)人駕駛車輛提供穩(wěn)定可靠的束解決方案
    的頭像 發(fā)表于 04-25 17:21 ?815次閱讀

    無(wú)人駕駛解決方案包含哪些方面?感知、決策與控制

    ?在人工智能與物聯(lián)網(wǎng)技術(shù)飛速發(fā)展的今天,無(wú)人駕駛已經(jīng)從實(shí)驗(yàn)室走向現(xiàn)實(shí)應(yīng)用場(chǎng)景。然而,一個(gè)真正成熟的無(wú)人駕駛解決方案絕非單純依靠幾項(xiàng)核心技術(shù)就能實(shí)現(xiàn),而是需要構(gòu)建一個(gè)涵蓋硬件設(shè)施、軟件系
    的頭像 發(fā)表于 04-14 10:21 ?1791次閱讀
    <b class='flag-5'>無(wú)人駕駛</b>解決方案包含哪些方面?感知、決策與控制