精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

自動駕駛之——初級車道線檢測

ml8z_IV_Technol ? 來源:lq ? 2019-02-04 16:10 ? 次閱讀

在介紹計算機視覺技術前,我想先討論一下這次分享的輸入和輸出。

輸入

一張攝像機拍攝到的道路圖片,圖片中需要包含車道線。如下圖所示。

輸出

圖像坐標系下的左右車道線的直線方程和有效距離。將左右車道線的方程繪制到原始圖像上,應如下圖所示。

在輸入和輸出都定義清楚后,我們就開始使用計算機視覺技術,一步步完成對原始圖像的處理。

原始圖像

認識圖像前,我們需要先回顧一下在初中所學的物理知識——光的三原色,光的三原色分別是紅色(Red)、綠色(Green)和藍色(Blue)。通過不同比例的三原色組合形成不同的可見光色。如下圖所示。

圖片出處:https://zhidao.baidu.com/question/197911511.html

圖像中的每個像素點都是由RGB(紅綠藍)三個顏色通道組成。為了方便描述RGB顏色模型,在計算機中約束了每個通道由暗到亮的范圍是0~255。

當某個像素點的R通道數值為255,G和B通道數值為0時,實際表現出的顏色就是最亮的紅色;當某個像素點的RGB三通道都為255時,所表示的是最亮的白色;當某個像素點的RGB三通道都為0時,就會顯示最暗的黑色。在RGB顏色模型中,不會有比[255,255,255]的組合更亮的顏色了。

根據以上理論基礎,一幅彩色圖像,其實就是由三幅單通道的圖像疊加,如下圖所示。

圖片出處:Udacity無人駕駛工程師

以基于python的OpenCV為例,讀取名為test_img.jpg的圖片到計算機內存中的代碼如下:

import cv2

img = cv2.imread('image_name.jpg')

讀取圖像后,我們可以將圖像看做一個二維數組,每個數組元素中存了三個值,分別是RGB三個通道所對應的數值。

OpenCV定義了,圖像的原點(0,0)在圖片的左上角,橫軸為X,朝右,縱軸為Y,朝下,如下圖所示。

需要注意的是,由于OpenCV的早期開發者習慣于使用BGR順序的顏色模型,因此使用OpenCV的imread()讀到的像素,每個像素的排列是按BGR,而不是常見的RGB,代碼編寫時需要注意。

灰度處理

考慮到處理三個通道的數據比較復雜,我們先將圖像進行灰度化處理,灰度化的過程就是將每個像素點的RGB值統一成同一個值。灰度化后的圖像將由三通道變為單通道,單通道的數據處理起來就會簡單許多。

通常這個值是根據RGB三通道的數值進行加權計算得到。人眼對RGB顏色的敏感度不同,對綠色最敏感,權值較高,對藍色最不敏感,權值較低。

坐標為(x,y)的像素點進行灰度化操作的具體計算公式如下:

調用OpenCV中提供的cvtColor()函數,能夠方便地對圖像進行灰度處理

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 由于使用cv2.imread()讀到的img的數據排列為BGR,因此這里的參數為BGR2GRAY

灰度處理后的圖像如下圖所示:

邊緣提取

為了突出車道線,我們對灰度化后的圖像做邊緣處理。“邊緣”就是圖像中明暗交替較為明顯的區域。車道線通常為白色或黃色,地面通常為灰色或黑色,因此車道線的邊緣處會有很明顯的明暗交替。

常用的邊緣提取算法Canny算法和Sobel算法,它們只是計算方式不同,但實現的功能類似。可以根據實際要處理的圖像,選擇算法。哪種算法達到的效果更好,就選哪種。

以Canny算法為例,選取特定的閾值后,對灰度圖像進行處理,即可得到的邊緣提取的效果圖。

low_threshold = 40

high_threshold = 150

canny_image = cv2.Canny(gray, low_threshold, high_threshold)

感興趣區域選擇

邊緣提取完成后,需要檢測的車道線被凸顯出來了。為了實現自車所在車道的車道線檢測,我們需要將感興趣的區域(Region of Interest)提取出來。提取感興趣區域最簡單的方式就是“截取”。

首先選定一個感興趣區域,比如下圖所示的藍色三角形區域。對每個像素點的坐標值進行遍歷,如果發現當前點的坐標不在三角區域內,則將該點涂“黑”,即將該點的像素值置為0。

為了實現截取功能,可以封裝一下OpenCV的部分函數,定義一個region_of_interest函數:

def region_of_interest(img, vertices):

#定義一個和輸入圖像同樣大小的全黑圖像mask,這個mask也稱掩膜

#掩膜的介紹,可參考:https://www.cnblogs.com/skyfsm/p/6894685.html

mask = np.zeros_like(img)

#根據輸入圖像的通道數,忽略的像素點是多通道的白色,還是單通道的白色

if len(img.shape) > 2:

channel_count = img.shape[2] # i.e. 3 or 4 depending on your image

ignore_mask_color = (255,) * channel_count

else:

ignore_mask_color = 255

#[vertices]中的點組成了多邊形,將在多邊形內的mask像素點保留,

cv2.fillPoly(mask, [vertices], ignore_mask_color)

#與mask做"與"操作,即僅留下多邊形部分的圖像

masked_image = cv2.bitwise_and(img, mask)

return masked_image

源碼出自:https://github.com/udacity/CarND-LaneLines-P1/blob/master/P1.ipynb

封裝完函數后,我們將感興趣的區域輸入,實現邊緣提取后的圖像的截取。

#圖像像素行數 rows = canny_image .shape[0] 540行

#圖像像素列數 cols = canny_image .shape[1] 960列

left_bottom = [0, canny_image .shape[0]]

right_bottom = [canny_image .shape[1], canny_image .shape[0]]

apex = [canny_image .shape[1]/2, 310]

vertices = np.array([ left_bottom, right_bottom, apex ], np.int32)

roi_image = region_of_interest(canny_image, vertices)

截取后的圖像入下圖所示:

霍夫變換

經過灰度處理、邊緣檢測、感興趣區域截取后,我們終于將左右車道線從復雜的圖像中提取出來了。接下來,我們使用霍夫變換來提取圖像中的直線(段)。

霍夫變換是一種特征檢測方法,其原理和推導過程可以參看經典霍夫變換(Hough Transform)https://blog.csdn.net/yuyuntan/article/details/80141392。

在圖像中使用霍夫變換不僅能夠識別圖像中的直線,還能識別出圖像中的圓、橢圓等特征。OpenCV為我們提供了霍夫變換檢測直線的函數,可以通過設置不同的參數,檢測不同長度的線段。由于車道線存在虛線的可能,因此線段的檢測長度不能設置地太長,否則短線段會被忽略掉。

OpenCV的霍夫變換直線檢測函數使用方法如下:

rho = 2 # distance resolution in pixels of the Hough grid

theta = np.pi/180 # angular resolution in radians of the Hough grid

threshold = 15 # minimum number of votes (intersections in Hough grid cell)

min_line_length = 40 #minimum number of pixels making up a line

max_line_gap = 20 # maximum gap in pixels between connectable line segments

# Hough Transform 檢測線段,線段兩個端點的坐標存在lines中

lines = cv2.HoughLinesP(roi_image, rho, theta, threshold, np.array([]),

min_line_length, max_line_gap)

封裝一個繪圖函數,實現把線段繪制在圖像上的功能,以實現線段的可視化

def draw_lines(img, lines, color=[255, 0, 0], thickness=2):

for line in lines:

for x1,y1,x2,y2 in line:

cv2.line(img, (x1, y1), (x2, y2), color, thickness) # 將線段繪制在img上

將得到線段繪制在原始圖像上

import numpy as np

line_image = np.copy(img) # 復制一份原圖,將線段繪制在這幅圖上

draw_lines(line_image, lines, [255, 0, 0], 6)

結果如下圖:

可以看出,雖然右車道線的線段不連續,但已經很接近我們想要的輸出結果了。

數據后處理

霍夫變換得到的一系列線段結果跟我們的輸出結果還是有些差異。為了解決這些差異,需要對我們檢測到的數據做一定的后處理操作。

實現以下兩步后處理,才能真正得到我們的輸出結果。

1.計算左右車道線的直線方程

根據每個線段在圖像坐標系下的斜率,判斷線段為左車道線還是右車道線,并存于不同的變量中。隨后對所有左車道線上的點、所有右車道線上的點做一次最小二乘直線擬合,得到的即為最終的左、右車道線的直線方程。

2.計算左右車道線的上下邊界

考慮到現實世界中左右車道線一般都是平行的,所以可以認為左右車道線上最上和最下的點對應的y值,就是左右車道線的邊界。

基于以上兩步數據后處理的思路,我們重新定義draw_lines()函數,將數據后處理過程寫入該函數中。

def draw_lines(img, lines, color=[255, 0, 0], thickness=2):

left_lines_x = []

left_lines_y = []

right_lines_x = []

right_lines_y = []

line_y_max = 0

line_y_min = 999

for line in lines:

for x1,y1,x2,y2 in line:

if y1 > line_y_max:

line_y_max = y1

if y2 > line_y_max:

line_y_max = y2

if y1 < line_y_min:

line_y_min = y1

if y2 < line_y_min:

line_y_min = y2

k = (y2 - y1)/(x2 - x1)

if k < -0.3:

left_lines_x.append(x1)

left_lines_y.append(y1)

left_lines_x.append(x2)

left_lines_y.append(y2)

elif k > 0.3:

right_lines_x.append(x1)

right_lines_y.append(y1)

right_lines_x.append(x2)

right_lines_y.append(y2)

#最小二乘直線擬合

left_line_k, left_line_b = np.polyfit(left_lines_x, left_lines_y, 1)

right_line_k, right_line_b = np.polyfit(right_lines_x, right_lines_y, 1)

#根據直線方程和最大、最小的y值反算對應的x

cv2.line(img,

(int((line_y_max - left_line_b)/left_line_k), line_y_max),

(int((line_y_min - left_line_b)/left_line_k), line_y_min),

color, thickness)

cv2.line(img,

(int((line_y_max - right_line_b)/right_line_k), line_y_max),

(int((line_y_min - right_line_b)/right_line_k), line_y_min),

color, thickness)

根據對線段的后處理,即可得到符合輸出要求的兩條直線方程的斜率、截距和有效長度。將后處理后的結果繪制在原圖上,如下圖所示:

處理視頻

視頻其實就是一幀幀連續不斷的圖像,使用讀取視頻的庫,將視頻截取成一幀幀圖像,然后使用上面的灰度處理、邊緣提取、感興趣區域選擇、霍夫變換和數據后處理,得到車道線檢測結果,再將圖片結果拼接成視頻,就完成了視頻中的車道線檢測。

視頻可以看出,當汽車在下坡時,車頭會發生俯仰,造成感興趣區域的變化,因此檢測到的有效長度有所變化。可見本算法需要針對車輛顛簸的場景進行優化。

以上就是《初識圖像之初級車道線檢測》的全部內容,關于這個項目的全部內容,可以在優達學城(Udacity)無人駕駛工程師學位首頁試聽,建議讀者親身學習一遍。

在實際編寫車道線檢測代碼的過程中,你會發現,每一步都需要調很多參數,才能滿足后續算法的處理要求。可見,本算法無法應用在不同光照條件的場景中,魯棒性較差;同時,由于霍夫變換檢測直線本身的缺陷,面對彎道場景時,無法很好地將彎道檢測出來。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計算機視覺
    +關注

    關注

    8

    文章

    1696

    瀏覽量

    45928
  • 無人駕駛
    +關注

    關注

    98

    文章

    4033

    瀏覽量

    120304
  • 自動駕駛
    +關注

    關注

    783

    文章

    13687

    瀏覽量

    166154

原文標題:自動駕駛之——初級車道線檢測

文章出處:【微信號:IV_Technology,微信公眾號:智車科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA在自動駕駛領域有哪些應用?

    低,適合用于實現高效的圖像算法,如車道檢測、交通標志識別等。 雷達和LiDAR處理:自動駕駛汽車通常會使用雷達和LiDAR(激光雷達)等多種傳感器來獲取環境信息。FPGA能夠協助完成
    發表于 07-29 17:09

    【mBot申請】自動駕駛

    申請理由:很喜歡硬件功能完善的機器人,這款機器人上面的多種傳感器及器件均用過,超聲波傳感器和巡傳感器還未接觸過,想了解下這種傳感器的靈敏度和精度,而且近年來自動駕駛汽車興起,還希望借此做一款
    發表于 11-30 15:30

    【話題】特斯拉首起自動駕駛致命車禍,自動駕駛的冬天來了?

    `特斯拉首起自動駕駛致命車禍,自動駕駛的冬天來了?“一個致命的事故一定是由多個小的錯誤組成的。”  7月初,特斯拉發表博客敘述了NHTSA(美國國家公路交通安全管理局)正在著手調查第一起Tesla
    發表于 07-05 11:14

    自動駕駛真的會來嗎?

      實際上,按照美國高速公路安全委員會(NHTSA)的5個分級,特斯拉所使用的自動駕駛屬于第2級別的“混合功能自動化”,該級別主要包含能同時提供組合式的自動化功能。比如自動巡航和
    發表于 07-21 09:00

    細說關于自動駕駛那些事兒

    展示了停車場自動駕駛,其中運用了超音波和影像感測技術偵測障礙物、車道和車位等周邊環境,并結合GPS、電子圖資、慣性測量組件(Inertial Measurement Unit,IMU)和輪速計,控制
    發表于 05-15 17:49

    自動駕駛的到來

    的車載處理器仍然將是半導體廠商在汽車電子領域的重點投資及發展方向。中國自動駕駛面臨的挑戰  首先中國不同地域以及城鎮之間在道路基礎設施方面存在差異,包括路標、車道、紅綠燈等設置各有不同。中國特色
    發表于 06-08 15:25

    速騰聚創首次發布LiDAR算法 六大模塊助力自動駕駛

    車道標識檢測、障礙物檢測、動態物體跟蹤、障礙物分類識別等六大功能模塊,有助于自動駕駛車輛立刻獲得LiDAR感知能力。今年4月份,速騰聚創
    發表于 10-13 16:08

    自動駕駛汽車的定位技術

    標識、地圖匹配、GPS、或導航信標進行定位。位置的計算方法包括三角測量法、三邊測量法和模型匹配算法等。從這個角度而言,IMU也是自動駕駛必備的部件。慣性傳感器(IMU)是檢測加速度與旋轉運動的高頻
    發表于 05-09 04:41

    如何讓自動駕駛更加安全?

    最近,國內多個城市開始發放自動駕駛的開放道路測試牌照,意味著自動駕駛的汽車可以在公共道路上進行測試。不過,駕駛安全性仍是社會關注的焦點,美國優步公司進行自動駕駛技術測試發生致命撞擊事故
    發表于 05-13 00:26

    自動駕駛汽車的處理能力怎么樣?

    作在未來20 - 30年中,自動駕駛汽車(AV)將改變我們的駕駛習慣、運輸行業并更廣泛地影響社會。 我們不僅能夠將汽車召喚到我們的家門口并在使用后將其送走,自動駕駛汽車還將挑戰個人擁有汽車的想法,并
    發表于 08-07 07:13

    如何實現車道分割

    深度學習方法實現車道分割之二(自動駕駛車道分割)
    發表于 05-22 10:16

    聯網安全接受度成自動駕駛的關鍵

    仍不能避免零件老舊的問題,使得自動駕駛汽車相關零組件保固賠償措施,將會影響自動駕駛未來商用化的推動時程進度。  
    發表于 08-26 06:45

    自動駕駛控底盤VCU功能介紹

    滿足自動駕駛遠程遙控的控底盤整車控制器VCU1 自動駕駛控底盤VCU功能介紹滿足自動駕駛及遙控駕駛
    發表于 09-07 06:30

    【KV260視覺入門套件試用體驗】八、VITis AI自動駕駛多任務執行MultiTask V3

    是一種模型,旨在同時執行自動駕駛場景中的不同任務,同時實現優異的性能和效率。這些任務包括對象檢測、分割、車道檢測、可行駛區域分割和深度估算,這些都是
    發表于 09-26 16:43

    關于自動駕駛車道檢測與智能告警淺解

    自動駕駛將在未來十年給旅行帶來革命性的變化。目前,自動駕駛應用正在進行各種應用案例的測試,包括乘用車、機器人出租車、自動商業送貨卡車、智能叉車和用于農業的自動拖拉機。
    的頭像 發表于 03-27 09:06 ?2739次閱讀
    關于<b class='flag-5'>自動駕駛</b>的<b class='flag-5'>車道</b><b class='flag-5'>線</b><b class='flag-5'>檢測</b>與智能告警淺解