net和cn哪個(gè)做網(wǎng)站好哪個(gè)平臺(tái)視頻資源多
文章目錄
- 1 前言
- 2 先上成果
- 3 車道線
- 4 問(wèn)題抽象(建立模型)
- 5 幀掩碼(Frame Mask)
- 6 車道檢測(cè)的圖像預(yù)處理
- 7 圖像閾值化
- 8 霍夫線變換
- 9 實(shí)現(xiàn)車道檢測(cè)
- 9.1 幀掩碼創(chuàng)建
- 9.2 圖像預(yù)處理
- 9.2.1 圖像閾值化
- 9.2.2 霍夫線變換
- 最后
1 前言
🔥 優(yōu)質(zhì)競(jìng)賽項(xiàng)目系列,今天要分享的是
🚩 機(jī)器視覺(jué) 深度學(xué)習(xí) 車道線檢測(cè) - opencv
該項(xiàng)目較為新穎,適合作為競(jìng)賽課題方向,學(xué)長(zhǎng)非常推薦!
🥇學(xué)長(zhǎng)這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點(diǎn):4分
🧿 更多資料, 項(xiàng)目分享:
https://gitee.com/dancheng-senior/postgraduate
2 先上成果
3 車道線
理解車道檢測(cè)的概念
那么什么是車道檢測(cè)?以下是百度百科對(duì)車道的定義:
車道,又稱行車線、車行道,是用在供車輛行經(jīng)的道路。在一般公路和高速公路都有設(shè)置,高速公路對(duì)車道使用帶有法律上的規(guī)則,例如行車道和超車道。
對(duì)其進(jìn)行定義是很重要的,因?yàn)樗刮覀兡軌蚶^續(xù)進(jìn)行車道檢測(cè)概念。我們?cè)诮⒁粋€(gè)系統(tǒng)時(shí)不能有任何含糊不清的地方。
正如我前面提到的,車道檢測(cè)是自動(dòng)駕駛汽車和自動(dòng)駕駛汽車的關(guān)鍵組成部分。這是駕駛場(chǎng)景理解的重要研究課題之一。一旦獲得車道位置,車輛就知道去哪里,并避免撞上其他車道或離開(kāi)道路。這樣可以防止駕駛員/車輛系統(tǒng)偏離車道。
以下是一些隨機(jī)道路圖像(第一行)及其檢測(cè)到的車道(第二行):
4 問(wèn)題抽象(建立模型)
我們希望執(zhí)行的任務(wù)是實(shí)時(shí)檢測(cè)視頻中的車道。我們可以通過(guò)多種方式進(jìn)行車道檢測(cè)。我們可以使用基于學(xué)習(xí)的方法,例如在帶注釋的視頻數(shù)據(jù)集上訓(xùn)練深度學(xué)習(xí)模型,或者使用預(yù)訓(xùn)練好的模型。
然而,也有更簡(jiǎn)單的方法來(lái)執(zhí)行車道檢測(cè)。在這里,學(xué)長(zhǎng)將向你展示如何在不使用任何深入學(xué)習(xí)模型的情況下完成此任務(wù)。
下面是將要處理的視頻的一個(gè)幀:
正如我們?cè)谶@張圖片中看到的,我們有四條車道被白色的車道標(biāo)線隔開(kāi)。所以,要檢測(cè)車道,我們必須檢測(cè)車道兩邊的白色標(biāo)記。這就引出了一個(gè)關(guān)鍵問(wèn)題——我們?nèi)绾螜z測(cè)車道標(biāo)線?
除了車道標(biāo)線之外,場(chǎng)景中還有許多其他對(duì)象。道路上有車輛、路側(cè)護(hù)欄、路燈等,在視頻中,每一幀都會(huì)有場(chǎng)景變化。這很好地反映了真實(shí)的駕駛情況。
因此,在解決車道檢測(cè)問(wèn)題之前,我們必須找到一種方法來(lái)忽略駕駛場(chǎng)景中不需要的對(duì)象。
我們現(xiàn)在能做的一件事就是縮小感興趣的領(lǐng)域。與其使用整個(gè)幀,不如只使用幀的一部分。在下面的圖像中,除了車道的標(biāo)記之外,其他所有內(nèi)容都隱藏了。當(dāng)車輛移動(dòng)時(shí),車道標(biāo)線將或多或少地落在該區(qū)域內(nèi):
5 幀掩碼(Frame Mask)
幀掩碼只是一個(gè)NumPy數(shù)組。
當(dāng)我們想對(duì)圖像應(yīng)用掩碼時(shí),只需將圖像中所需區(qū)域的像素值更改為0、255或任何其他數(shù)字。
下面給出了一個(gè)圖像掩蔽的例子。圖像中某個(gè)區(qū)域的像素值已設(shè)置為0:
這是一種非常簡(jiǎn)單但有效的從圖像中去除不需要的區(qū)域和對(duì)象的方法。
6 車道檢測(cè)的圖像預(yù)處理
我們將首先對(duì)輸入視頻中的所有幀應(yīng)用掩碼。
然后,我們將應(yīng)用圖像閾值化和霍夫線變換來(lái)檢測(cè)車道標(biāo)線。
7 圖像閾值化
在這種方法中,灰度圖像的像素值根據(jù)閾值被指定為表示黑白顏色的兩個(gè)值之一。因此,如果一個(gè)像素的值大于一個(gè)閾值,它被賦予一個(gè)值,否則它被賦予另一個(gè)值。
如上所示,對(duì)蒙版圖像應(yīng)用閾值后,我們只得到輸出圖像中的車道標(biāo)線。現(xiàn)在我們可以通過(guò)霍夫線變換很容易地檢測(cè)出這些標(biāo)記。
8 霍夫線變換
霍夫線變換是一種檢測(cè)任何可以用數(shù)學(xué)方法表示的形狀的方法。
例如,它可以檢測(cè)矩形、圓、三角形或直線等形狀。我們感興趣的是檢測(cè)可以表示為直線的車道標(biāo)線。
在執(zhí)行圖像閾值化后對(duì)圖像應(yīng)用霍夫線變換將提供以下輸出:
9 實(shí)現(xiàn)車道檢測(cè)
是時(shí)候用Python實(shí)現(xiàn)這個(gè)車道檢測(cè)項(xiàng)目了!我推薦使用Google Colab,因?yàn)闃?gòu)建車道檢測(cè)系統(tǒng)需要計(jì)算能力。
首先導(dǎo)入所需的庫(kù):
?
import os
import re
import cv2
import numpy as np
from tqdm import tqdm_notebook
import matplotlib.pyplot as plt
# 獲取幀的文件名
col_frames = os.listdir('frames/')
col_frames.sort(key=lambda f: int(re.sub('\D', '', f)))# 加載幀
col_images=[]
for i in tqdm_notebook(col_frames):img = cv2.imread('frames/'+i)col_images.append(img)
# 指定一個(gè)索引
idx = 457# plot frame
plt.figure(figsize=(10,10))
plt.imshow(col_images[idx][:,:,0], cmap= "gray")
plt.show()
9.1 幀掩碼創(chuàng)建
我們感興趣的區(qū)域是一個(gè)多邊形。我們想掩蓋除了這個(gè)區(qū)域以外的一切。因此,我們首先必須指定多邊形的坐標(biāo),然后使用它來(lái)準(zhǔn)備幀掩碼:
9.2 圖像預(yù)處理
我們必須對(duì)視頻幀執(zhí)行一些圖像預(yù)處理操作來(lái)檢測(cè)所需的車道。預(yù)處理操作包括:
-
圖像閾值化
-
霍夫線變換
9.2.1 圖像閾值化
9.2.2 霍夫線變換
?
lines = cv2.HoughLinesP(thresh, 1, np.pi/180, 30, maxLineGap=200)# 創(chuàng)建原始幀的副本
dmy = col_images[idx][:,:,0].copy()# 霍夫線
for line in lines:x1, y1, x2, y2 = line[0]cv2.line(dmy, (x1, y1), (x2, y2), (255, 0, 0), 3)# 畫(huà)出幀
plt.figure(figsize=(10,10))
plt.imshow(dmy, cmap= "gray")
plt.show()
最后
🧿 更多資料, 項(xiàng)目分享:
https://gitee.com/dancheng-senior/postgraduate