作者:Mehdi Amine
?
從硬件到實(shí)現(xiàn)計(jì)算機(jī)視覺(jué)的系統(tǒng),本文的概述側(cè)重于廣度而非深度。為了平衡這種方法,本文引導(dǎo)讀者閱讀具有指導(dǎo)性的參考文獻(xiàn),并提供了隨時(shí)可以運(yùn)行的源代碼。我們從圖像形成的機(jī)制開(kāi)始。我們涵蓋針孔、透鏡、傳感器(CCD和CMOS)、Bayer濾波器和顏色重建。
然后,我們轉(zhuǎn)到計(jì)算機(jī)視覺(jué)的應(yīng)用上來(lái),檢測(cè)圖像中的車(chē)道線(xiàn)。該方法是基于一套常用的計(jì)算機(jī)視覺(jué)算法。
成像歷史簡(jiǎn)介
拍照就是把3D場(chǎng)景投影到2D平面上。暗箱通過(guò)一個(gè)針孔實(shí)現(xiàn)了這種投影。墻上的一個(gè)小針孔讓光線(xiàn)穿透了黑暗的照相機(jī)室。這個(gè)簡(jiǎn)單的機(jī)制產(chǎn)生了尖銳的投影,使藝術(shù)家能夠在場(chǎng)景的細(xì)節(jié)上畫(huà)出草圖。但是這種方法缺乏亮度,針孔本身不能收集足夠的光。
?
柯歇(Athanasius Kircher) 1645年的著作《大路西與陰影》(Ars Magna Lucis Et Umbrae)中“便攜式”暗箱的雕刻
針孔相機(jī)即使在今天也吸引了廣泛的興趣,它們能夠捕捉到令人驚嘆的圖像,其特點(diǎn)是在任何地方都能使用。缺點(diǎn)還是一樣,圖像很暗,需要很長(zhǎng)的曝光時(shí)間。
?
用針孔相機(jī)拍攝的鄧盧斯城堡的日落,曝光時(shí)間20分鐘,伊萬(wàn)·麥格雷戈
為了解決光線(xiàn)暗淡的問(wèn)題,引入了透鏡。通過(guò)在光圈前放置透鏡,可以聚集更多的光。透鏡還可以修改投影圖像的放大倍率。在過(guò)去,放大需要藝術(shù)家移動(dòng)整個(gè)相機(jī)。如今,在不改變場(chǎng)景和像面之間的距離的情況下,可以通過(guò)移動(dòng)鏡頭的位置來(lái)調(diào)節(jié)放大效果。變焦是移動(dòng)鏡頭來(lái)改變放大倍率的過(guò)程。
即使有了鏡頭,捕捉圖像也需要很長(zhǎng)時(shí)間依靠藝術(shù)家在投影圖像上作畫(huà)。19世紀(jì)30年代,路易斯·達(dá)蓋爾(Louis Daguerre)發(fā)明了膠片,這是攝影史上最重要的發(fā)明之一。這是第一次有可能在物理層上記錄光,不需要依靠藝術(shù)家,只需要按下一個(gè)按鈕,就能記住一個(gè)時(shí)刻。
膠片上涂上鹵化銀。一旦暴露在光線(xiàn)下,鹵化銀就會(huì)轉(zhuǎn)化為金屬銀。轉(zhuǎn)換量取決于膠片上任何特定點(diǎn)的曝光量。為了產(chǎn)生圖像,膠片隨后要經(jīng)過(guò)化學(xué)顯影處理。
黑白底片處理
硅成像探測(cè)器的發(fā)明甚至比膠片的影響更大。同樣的芯片可以用來(lái)捕捉無(wú)限多的圖片,而不再需要化學(xué)照相顯影。它是數(shù)碼相機(jī)所使用的技術(shù),也是我們大多數(shù)人今天隨身攜帶的手機(jī)。
概括地說(shuō),拍照就是將3D場(chǎng)景投影到2D平面上。投影是通過(guò)光圈來(lái)實(shí)現(xiàn)的,通過(guò)透鏡來(lái)收集更多的光線(xiàn)并調(diào)節(jié)放大倍率。2D平面最初是一個(gè)簡(jiǎn)單的平面,藝術(shù)家可以在上面作畫(huà)。后來(lái)它變成了鹵化銀薄膜的表面。最后是硅芯片的表面:圖像傳感器。
為了將接收到的光轉(zhuǎn)換成數(shù)字圖像,大多數(shù)圖像傳感器依賴(lài)于硅原子的特性。當(dāng)一個(gè)具有足夠能量的光子撞擊硅原子時(shí),它會(huì)釋放出電子。在硅晶格(一個(gè)像素)上,光子通量暴露產(chǎn)生電子通量。然后電子通量被轉(zhuǎn)換成電壓。
電荷耦合裝置 CCD
在這種類(lèi)型的圖像傳感器中,光子到電子的轉(zhuǎn)換發(fā)生在每個(gè)像素中。在每個(gè)像素下都有一個(gè)電容儲(chǔ)存釋放的電子。一個(gè)叫做“垂直CCD移位寄存器”的電路連接每列像素的電容。這個(gè)電路可以使電子從一個(gè)像素垂直轉(zhuǎn)移到它正下方的像素上,直到它們到達(dá)最后一行。最后一行由水平CCD移位寄存器連接,該寄存器將電子送到模數(shù)轉(zhuǎn)換器中。
CCD中電子的垂直傳遞采用bucket-brigade法完成。這意味著每一行在獲取其前面一行的電子之前,先將其電子傳遞給下一行。水平轉(zhuǎn)移保持行順序,當(dāng)它們水平移動(dòng)到ADC時(shí),它們被轉(zhuǎn)換為與它們的電子電荷成比例的電壓。
互補(bǔ)金屬氧化物半導(dǎo)體 CMOS
CMOS以不同的方式實(shí)現(xiàn)圖像傳感器。它不是將電子從像素轉(zhuǎn)移到ADC,而是集成了像素級(jí)的電壓轉(zhuǎn)換。
使用CMOS可以單獨(dú)尋址每個(gè)像素以讀取其電壓。這提供了更多的靈活性,因?yàn)樗梢约涌焯囟ㄅd趣區(qū)域的閱讀速度。這種靈活性是以更小的光敏區(qū)域?yàn)榇鷥r(jià)的,因?yàn)樵谙袼丶?jí)集成了更多的組件。為了彌補(bǔ)感光區(qū)域的減少,微透鏡被直接放置在每個(gè)像素的上方。這些微透鏡將光線(xiàn)聚焦在光敏探測(cè)器上。
像素結(jié)構(gòu)
獲取顏色
像素本身能夠捕捉光的強(qiáng)度,但不能捕捉光的波長(zhǎng)。為了捕捉顏色(波長(zhǎng)),最流行的方法是疊加一個(gè)拜耳濾光片陣列。在這種方法中,每個(gè)像素都被一個(gè)紅色、綠色或藍(lán)色的濾光片覆蓋。
圖像傳感器的像素陣列上的彩色濾光片的拜耳排列。每個(gè)2乘2單元格包含兩個(gè)綠色,一個(gè)藍(lán)色和一個(gè)紅色的濾光片。
人類(lèi)對(duì)幾乎所有顏色的感覺(jué)都可以通過(guò)3種波長(zhǎng)產(chǎn)生。捕捉紅色、綠色和藍(lán)色的波長(zhǎng)就足以重現(xiàn)拍攝到的場(chǎng)景的實(shí)際顏色。但就其本身而言,拜耳模式的疊加是不夠的。它產(chǎn)生的圖像看起來(lái)像左邊的:
左邊圖像的像素要么是紅色,要么是綠色,要么是藍(lán)色。注意,圖像看起來(lái)大部分是綠色的。拜耳模式模擬了人類(lèi)視網(wǎng)膜在白天對(duì)綠光最敏感的事實(shí)。因此濾鏡是一半綠色,四分之一紅色,四分之一藍(lán)色。
為了將左邊的圖像轉(zhuǎn)換為右邊的圖像,我們?nèi)∶總€(gè)像素的值,并將其與相鄰像素的值結(jié)合起來(lái)。這個(gè)過(guò)程被稱(chēng)為插值。假設(shè)我們從左邊的圖片中取一個(gè)藍(lán)色的像素。插值是將藍(lán)色值與相鄰像素的紅色和綠色值混合在一起。
計(jì)算機(jī)視覺(jué)
圖像傳感器的應(yīng)用已經(jīng)成為我們生活中的基本組成部分。它們塑造了我們表達(dá)自我和交流的方式,它們開(kāi)辟了科學(xué)和藝術(shù)的跨學(xué)科領(lǐng)域。也許這些領(lǐng)域中最先進(jìn)的是計(jì)算機(jī)視覺(jué)。
研究計(jì)算機(jī)視覺(jué)必須從欣賞使之成為可能的硬件開(kāi)始。我們已經(jīng)簡(jiǎn)要地了解了硬件的歷史、進(jìn)展和主要組件。讓我們來(lái)看一個(gè)使用它的令人興奮的實(shí)際應(yīng)用。
自動(dòng)駕駛中的車(chē)道線(xiàn)檢測(cè)
從2021年5月開(kāi)始,特斯拉開(kāi)始交付不再安裝雷達(dá)的Model 3和Model Y。這些車(chē)型依賴(lài)基于攝像頭的自動(dòng)駕駛系統(tǒng),以相同的安全評(píng)級(jí)提供相同的功能。
特斯拉Vision的主動(dòng)安全功能之一是車(chē)道偏離警告/避免。能夠探測(cè)道路車(chē)道在駕駛中是至關(guān)重要的。我們將研究車(chē)道檢測(cè),并以?xún)煞N不同的方式實(shí)現(xiàn)它。首先使用計(jì)算機(jī)視覺(jué)算法,其次使用空間卷積神經(jīng)網(wǎng)絡(luò)。

第一步是檢測(cè)圖像中最顯著的邊緣。與其相鄰像素亮度對(duì)比較大的區(qū)域被標(biāo)記為邊緣。下面的代碼將圖像轉(zhuǎn)換為灰度,用高斯濾波器進(jìn)行模糊以減少噪聲,并應(yīng)用算法Canny邊緣檢測(cè)。
def?canny(image): ??gray?=?cv2.cvtColor(image,?cv2.COLOR_RGB2GRAY) ??blur?=?cv2.GaussianBlur(gray,?(5,?5),?0) ??canny?=?cv2.Canny(blur,?10,?30) ??return?cannyCanny Edge Detection

經(jīng)過(guò)Canny邊緣檢測(cè)后得到的圖像
這些圖像充滿(mǎn)了我們不需要的信息。我們想專(zhuān)注于前方的道路,所以我們將定義一個(gè)多邊形區(qū)域,以裁剪每個(gè)圖像。定義多邊形的點(diǎn)對(duì)這兩幅圖像來(lái)說(shuō)是不同的。為了找到它們,我們可以繪制圖像并顯示寬度和高度軸。
def?region_of_interest(image): ????height?=?image.shape[0] ????width?=?image.shape[1] ????polygons?=?np.array([[(10,height),?(width,height),?(width,1100),?(630,?670),?(10,?1070)]]) ????mask?=?np.zeros_like(image) ????cv2.fillPoly(mask,?polygons,?255) ????masked_image?=?cv2.bitwise_and(image,?mask) ????return?masked_image
?
?
用于裁剪圖像的多邊形掩碼
感興趣區(qū)域掩碼的結(jié)果
觀(guān)察產(chǎn)生的感興趣區(qū)域,人眼可以很容易地感知線(xiàn)條。這些線(xiàn)實(shí)際上是一系列像素,它們只是計(jì)算機(jī)中的點(diǎn)。我們需要追蹤兩條最能描述點(diǎn)排列的主線(xiàn)。這是使用Hough變換算法完成的。
lines?=?cv2.HoughLinesP(cropped_image,?2,?np.pi/180,?100,?np.array([]),?minLineLength=40,?maxLineGap=5)

在原始圖上加上藍(lán)色線(xiàn)條的結(jié)果
這種方法似乎產(chǎn)生了很好的結(jié)果,但這種實(shí)現(xiàn)遠(yuǎn)非最佳,因?yàn)?
我們必須明確定義每個(gè)情況的興趣區(qū)域。由于透視的變化,應(yīng)用相同的多邊形掩碼來(lái)裁剪ROI是不可能的。
計(jì)算時(shí)間過(guò)慢,開(kāi)車(chē)需要較高的處理速度。
轉(zhuǎn)彎包括彎曲的車(chē)道,這種方法只包括直線(xiàn)。
審核編輯:黃飛
?
評(píng)論