這是自動(dòng)駕駛的系列文章。
自動(dòng)駕駛的第一步是什么呢?當(dāng)然,是識(shí)別當(dāng)前環(huán)境,具體來(lái)說(shuō)就是識(shí)別自己的正確道路-車道線,入下圖所示
1 轉(zhuǎn)為灰度圖
彩色的圖是沒(méi)法識(shí)別出車道線的,所以我們需要把他轉(zhuǎn)化為黑白的圖像,入下圖所示
大家知道,我們的圖像都是由RGB三原色組成的,分別是0-255,所以,我們只要對(duì)非白色的做出處理,把他變成黑色即可,用偽碼表示
loop 讀取圖像中的每一個(gè)像素 像素RGB < 閥值 #純白是255,255,255 該像素 = 黑色end loop
2 將車道線疊加原圖
當(dāng)然,簡(jiǎn)簡(jiǎn)單單的識(shí)別出道路是不行的,我們還需要在原圖中疊加道路,如上圖所示,主要是一些裁剪合并之類的動(dòng)作了。
3 邊緣發(fā)現(xiàn)
之前的車道線都是白的,所以挺好做的,但是很不幸的是,車道并非都是白的,我們很可能遇到其它顏色的,而且有時(shí)候并不完整,如下圖所示,所以我們需要其它的方法,比如說(shuō)“邊緣發(fā)現(xiàn)”
python提供了一個(gè)包,openCV,我們可以使用這個(gè)包來(lái)協(xié)助開(kāi)發(fā),在開(kāi)發(fā)過(guò)程中還需要進(jìn)行一些處理,其偽碼如下
1 將整個(gè)圖像轉(zhuǎn)為灰度圖,畢竟不需要那么多豐富的顏色2 進(jìn)行簡(jiǎn)單的高斯模糊:GaussianBlur,以減少照片噪聲和細(xì)節(jié)3 進(jìn)行邊緣發(fā)現(xiàn)
最終我們會(huì)得出如下圖所示的結(jié)果
4 使用Hough Transform辨別車道線
進(jìn)行邊緣發(fā)現(xiàn)之后識(shí)別出車道線,如何識(shí)別車道線呢?車道線實(shí)際上在圖像中表現(xiàn)為一條直線,所以我們的目標(biāo)就是識(shí)別出長(zhǎng)直線,所以,我們的目標(biāo)就是識(shí)別出長(zhǎng)直線的模式。
我們會(huì)用到一種叫做Hough Transform的方法,它是在1962有Hough發(fā)明的,它會(huì)把 y=mx+b映射成 b=xm+y,將直線變換成點(diǎn),然后進(jìn)行識(shí)別,如下圖所示,車道線是一條路
然后把這條路映射成點(diǎn)
以方便識(shí)別
進(jìn)行Hough Transfom后會(huì)變成這個(gè)樣子
而后我們進(jìn)行優(yōu)化,好了后會(huì)變成這樣
這樣,我們就成功的識(shí)別出了車道線
(完)