嵌入式視覺的概念及關(guān)鍵因素
基于視覺的系統(tǒng)在很多行業(yè)和應(yīng)用領(lǐng)域中已變得非常普遍。實際上,我們中的很多人每天就攜著一個嵌入式視覺系統(tǒng),比如在我們的智能手機(jī)中。這些智能設(shè)備不僅能夠捕獲圖像和錄制視頻,而且還能執(zhí)行增強(qiáng)現(xiàn)實的應(yīng)用,這些都展示了嵌入式視覺技術(shù)是如何被普遍地廣為接受。
本文引用地址:http://www.ex-cimer.com/article/201701/343259.htm處理能力、存儲器密度和系統(tǒng)集成度的提升,促進(jìn)了嵌入式視覺在傳統(tǒng)和新興應(yīng)用領(lǐng)域( 圖 1所示實例)的增長。這也使得嵌入式視覺在消費類、產(chǎn)業(yè)和政府領(lǐng)域被廣泛接受,因而將在十年內(nèi)實現(xiàn)顯著增長。表 1 列出了一些嵌入式視覺的高增長領(lǐng)域,其中有一些顯而易見,有些則不是很明顯。
圖 1 常見的嵌入式視覺應(yīng)用。
表 1 預(yù)期的嵌入式視覺高增長領(lǐng)域
什么是嵌入式視覺?
嵌入式視覺系統(tǒng)包含從所選成像傳感器接收光到系統(tǒng)輸出的整個信號鏈。系統(tǒng)輸出是指從圖像中提取的經(jīng)過處理或未經(jīng)處理的圖像或信息,并提供給下游系統(tǒng)。當(dāng)然,嵌入式系統(tǒng)架構(gòu)師負(fù)責(zé)根據(jù)系統(tǒng)要求確保端到端性能。
為此,嵌入式視覺系統(tǒng)架構(gòu)師需要熟悉與傳感器和后處理系統(tǒng)有關(guān)的各種概念和技術(shù)。本文作為高級入門手冊,旨在讓讀者對這些技術(shù)和概念有一個基本了解。
首先需要熟悉電磁波譜以及希望系統(tǒng)運行的光譜域。人眼只能看到 390nm(藍(lán)光)至 700nm(紅光)波長之間的光譜,也就是通常所指的可見光譜;成像設(shè)備憑借所采用的技術(shù),則能捕獲到更寬泛波長的圖像,包括 X 光、紫外線、紅外線以及可見光譜。
在近紅外光譜及以下范圍,我們可以使用電荷耦合器件(CCD)或 CMOS[1](互補(bǔ)金屬氧化物半導(dǎo)體)圖像傳感器 (CIS);到了紅外光譜范圍,需要使用專用的紅外檢測器。紅外光譜范圍之所以需要專用傳感器,部分原因在于芯片成像器(如 CCD 或 CIS)需要的激發(fā)能。這些器件通常需要 1eV 的光子能量來激發(fā)一個電子,然而在紅外范圍,光子能量介于 1.7eV-1.24meV 之間,因此紅外成像器應(yīng)基于 HgCdTe 或 InSb。這些器件需要更低的激發(fā)能量,經(jīng)常與 CMOS 讀出 IC(即 ROIC)配合使用,以控制和讀出傳感器。
最常見的兩種檢測器技術(shù)分別是 CCD 和 CIS
· 電荷耦合器件被視為模擬器件,因此要集成到數(shù)字系統(tǒng)中就需要使用片外 ADC 以及所需模擬電壓電平下的時鐘生成功能。每個像素存儲由光子產(chǎn)生的電荷。大多數(shù)情況下將像素排列成 2D 陣列,組成多個行,每行包含多個像素。讀出 CCD 時通過行傳輸將每行并行傳遞到讀出寄存器,再通過讀出寄存器將每行串行讀出。這個寄存器讀出過程中,電荷轉(zhuǎn)換為電壓。
· CMOS 成像傳感器能實現(xiàn)更緊密集成,使 ADC、偏置和驅(qū)動電路都集成在同一晶片上。這大大降低了系統(tǒng)集成要求,同時也提高了 CIS 設(shè)計的復(fù)雜性。CIS 的核心是有源像素傳感器 (APS),其中每個像素同時包含光電二極管和讀出放大器,因此,與 CCD 不同,CIS 能夠讀出陣列中的任意像素地址。
盡管大多數(shù)嵌入式視覺都采用 CIS 器件,但是 CCD 仍用于非常注重性能的高端科研應(yīng)用領(lǐng)域。本文的要點內(nèi)容適用于這兩種成像技術(shù)。
傳感器考慮因素
選擇正確的傳感器需要了解系統(tǒng)要求,為此,必須從器件的幾個方面加以考慮。
第一個要求是我們必須確定所需的分辨率,也就是每行有多少個像素,檢測器需要多少行。最終應(yīng)用對此起決定作用,例如,科研用的天文學(xué)應(yīng)用可能需要高分辨率的 2D 器件,而工業(yè)檢查成像可能僅需要行掃描方案。
· 行掃描器件在 X 方向上包含單行(有時是幾行)像素。如果通過相機(jī)或目標(biāo)的移動生成 Y 方向上的圖像,通常采用這類器件。它們用于檢查或光學(xué)字符識別 (OCR) 領(lǐng)域。有些領(lǐng)域需要采用時域積分 (TDI) 線掃描傳感器。這類傳感器在 X 方向包含多行,隨著目標(biāo)移動,像素值也從一個向下一個移動,隨著電荷在時間上積分,可實現(xiàn)更靈敏的檢測。不過,TDI 需要在行傳輸與目標(biāo)移動之間進(jìn)行同步,以防出現(xiàn)模糊和圖像缺陷。由于只有幾行需要讀出,因此幀率可以非常高。
· 2D 陣列包含多個行,每行有多個像素,陣列大小是決定傳感器最大幀率的一個因素。通常,為了實現(xiàn)更高的幀速率,2D 器件并行讀出多個像素。2D 器件還能執(zhí)行窗口操作(有時稱為興趣區(qū)域),即只讀出特定的感興趣區(qū)域,以獲得更高幀速率。這類器件可用于眾多領(lǐng)域,而且信息包含在 2D 圖像中,例如高級駕駛員輔助系統(tǒng) (ADAS)、監(jiān)控或科研領(lǐng)域。
確定成像器格式以及所需分辨率之后,我們還必須考慮像素間距。像素間距定義像素的大小,決定能收集多少入射光子產(chǎn)生的電荷。因此,較小的像素間距意味著在積分周期內(nèi)(傳感器暴露在圖像中的時間)收集較少的電荷。如果像素間距較小,意味著捕捉圖像需要更長的積分時間,這會影響傳感器捕捉快速移動圖像的能力,并降低低光拍照性能。
確定傳感器格式后,我們必須考慮使用哪種技術(shù),CCD、CMOS 還是更為專業(yè)的技術(shù)。這里的重要參數(shù)是量子效率 (QE);該參數(shù)是器件通過光子產(chǎn)生電子的效率。通常,我們希望在有用光譜上實現(xiàn)盡可能高的 QE,這對于低光應(yīng)用也具有重要意義。影響器件 QE 的因素有三個:吸收、反射和透射。QE 降低的一個主因是器件結(jié)構(gòu)。器件結(jié)構(gòu)可能導(dǎo)致像素被傳感器中的電路屏蔽,例如金屬線或多晶硅柵極電路等。這些結(jié)構(gòu)會吸收或反射光子,從而降低 QE,因此要選好傳感器。
· 前照式 — 對于這類器件,光子以上面的介紹的傳統(tǒng)方式照射器件的前面,像素可能被遮蔽,QE 相應(yīng)降低。
· 背照式 — 這些器件經(jīng)過后期處理,將器件的后部削薄,以便在后面接收光照,從而不受其他設(shè)計元件的阻擋。薄型背照式器件能實現(xiàn)最佳 QE。
我們還必須考慮圖像傳感器中所允許的噪聲;有三個主要方面需要考慮。
· 器件噪聲 — 這在本質(zhì)上講是暫時的,包括散射噪聲以及輸出放大器和復(fù)位電路產(chǎn)生的噪聲。
· 固定圖形噪聲(FPN) — 呈空間分布,由相同光照強(qiáng)度下像素的不同響應(yīng)引起。FPN 通常由每個像素的不同偏移和增益響應(yīng)引起;偏移部分通常稱為暗信號響應(yīng)非均勻性 (DSNU),增益部分稱為圖像響應(yīng)非均勻性 (PRNU)。有多種方法可以補(bǔ)償 FPN,最常見的方法是輸出信號的相關(guān)雙采樣法。
· 暗電流 — 這由圖像傳感器中的熱噪聲引起,甚至在無光照情況下也會出現(xiàn)。暗信號對最終圖像質(zhì)量的影響取決于幀速率;較高幀速率下影響不大,然而,隨著幀速率降低(如科研應(yīng)用)影響會很明顯。由于暗電流與溫度有關(guān),因此在需要降低暗電流的情況下,通常做法是利用冷卻器件(例如 Peltier)來降低成像器件的工作溫度。
理解了成像器的噪聲模式后,我們就能確定能實現(xiàn)多大的信噪比 (SNR)。
確定器件的噪聲性能后,就可以確定圖像傳感器所需的動態(tài)范圍。動態(tài)范圍代表傳感器捕獲光照強(qiáng)度范圍較大的圖像的能力,單位是 dB 或以比率形式給出。這意味著圖像同時包含高照度區(qū)和暗區(qū)。
傳感器的實際動態(tài)范圍由像素的滿井容量決定,也就是像素飽和前所能承載的電子數(shù)量。將容量除以讀出噪聲,能方便地將比率轉(zhuǎn)換為以 dB 為單位的值。
通常利用光子轉(zhuǎn)換曲線測試法來確定動態(tài)范圍,畫出噪聲與容量的關(guān)系曲線。
如果器件具有數(shù)字輸出,可通過下面的公式利用輸出端比特數(shù)計算該值。
然而,這并不能確保器件可以實現(xiàn)這樣的動態(tài)范圍;只是說明總線寬度所能代表的潛在范圍,而沒有考慮傳感器性能因素。
IO 標(biāo)準(zhǔn)也很重要,不僅用來輸出像素數(shù)據(jù),還用來輸出命令和控制接口。這與幀速率有關(guān),例如 LVCMOS 接口不適合高幀速率應(yīng)用,但可用于簡單的監(jiān)控攝像頭。隨著幀速率、分辨率和每像素比特數(shù)的增加,成像器件的趨勢正朝著采用 LVDS 系列或 SERDES 技術(shù)的專用高速串行鏈路發(fā)展。
現(xiàn)在我們已經(jīng)介紹了圖像傳感器的多個重要方面,另一個尚未考慮的因素是成像器是彩色還是單色傳感器。無論選擇哪種,都取決于應(yīng)用場合。
· 彩色傳感器 — 需要在每個像素上使用貝爾圖形,在一條線上交替變換紅色和綠色,下一條線上交替藍(lán)色和綠色(綠色用得多是因為人眼對綠顏色波長更敏感)。這意味著要對接收到的光子進(jìn)行濾波處理,使每個像素只接收具有所需波長的光子。我們可對圖像進(jìn)行后處理,用不同顏色圍繞像素以重構(gòu)每個像素上的顏色,從而確定像素顏色,而且不會降低圖像分辨率。彩色傳感器會使重構(gòu)和輸出圖像所需的圖像處理鏈變得復(fù)雜化。貝爾圖形確實會導(dǎo)致分辨率降低,但是沒有想象的那么差,通常降幅為 20%。
· 單色 — 由于圖像陣列上沒有貝爾圖形,因此每個像素能接收所有光子。這樣可增大圖像靈敏度,使圖像的讀出更簡單,因為不存在顏色重建所需的去馬賽克效應(yīng)。
經(jīng)選擇我們決定使用 CIS 器件,而實際上這些屬于復(fù)雜的專用片上系統(tǒng)。因此,我們還必須考慮以下關(guān)于讀出模式和積分時間的問題。
· 積分時間 — 這是讀出之前像素的曝光時間。在比較簡單的 CCD 系統(tǒng)上,需要接近電子裝置在器件外執(zhí)行該時序。然而對于 CIS 器件,積分時間可通過命令接口由寄存器來配置,然后 CIS 器件針對常用的兩種讀出模式精確地執(zhí)行積分時間。
· 全局快門模式 — 這種模式下,所有像素同時接受光照,然后讀出。此模式下由于所有像素同時讀出,因此會增大讀出噪聲。如果要對快速運動物體拍攝快照,適合使用該模式。
· 滾動快門模式 — 這種模式下,進(jìn)行逐行曝光和讀出。這種模式的讀出噪聲較小,然而,在捕獲快速運動物體方面不如全局快門模式。
系統(tǒng)開發(fā)
選擇了合適的傳感器之后,在進(jìn)行系統(tǒng)開發(fā)的過程中還需要考慮和解決諸多挑戰(zhàn)。
除了技術(shù)挑戰(zhàn)以外,開發(fā)系統(tǒng)時還會面對時間壓力,確保在既定時限內(nèi)將產(chǎn)品推向市場。我們要根據(jù)時間限制,重點弄清楚開發(fā)過程中的哪部分活動能實現(xiàn)附加價值,然后做出正確選擇,分清哪部分應(yīng)該自己開發(fā)(增值活動),哪部分可以購買商用現(xiàn)成產(chǎn)品 (COTS) 或者分包出去。重點關(guān)注增值活動并利用硬件、軟件和 FPGA 層面的 IP 模塊,是滿足上市時間要求的重要促成因素之一。
除了上市時間要求,嵌入式視覺系統(tǒng)開發(fā)過程中還要經(jīng)??紤]尺寸、重量、功耗和成本 (SWAP-C) 要求。究竟哪種要求占主導(dǎo),取決于具體應(yīng)用領(lǐng)域,例如手持設(shè)備在功耗方面就要比駕駛員輔助系統(tǒng)更為嚴(yán)格。然而,對于高級駕駛員輔助系統(tǒng)來說,由于要生產(chǎn)幾百萬臺,因此方案成本就成了主導(dǎo)因素。
要在尺寸、重量、功耗和成本方面獲得很好的效果,應(yīng)該在傳感器和處理系統(tǒng)中實現(xiàn)更為緊密的系統(tǒng)集成,即使用數(shù)量更少但功能更強(qiáng)的集成組件。
每種應(yīng)用領(lǐng)域都具有不同增值點以及不同的尺寸、重量、功耗和成本考量,因此幾乎所有嵌入式視覺系統(tǒng)都需要我們實現(xiàn)所謂的圖像處理流水線。這種流水線可與所選的傳感器建立接口連接,并且執(zhí)行所需的操作以生成適合進(jìn)一步加工或直接在網(wǎng)絡(luò)上傳輸?shù)膱D像?;镜膱D像處理流水線包含
· 照相機(jī)接口 — 接收來自傳感器的原始圖像
· 顏色濾波陣列 — 重建像素顏色
· 色彩空間轉(zhuǎn)換 — 轉(zhuǎn)換成針對編解碼器的正確色彩空間。
· 輸出格式化 — 與輸出介質(zhì)進(jìn)行接口連接
在圖像處理流水線中對接收的圖像執(zhí)行和應(yīng)用算法。所實現(xiàn)應(yīng)用不同,算法也會不同;不過,有一些常用的圖像處理算法可用來提高對比度,檢測圖像中的特性、目標(biāo)或運動,或者校正模糊圖像。
應(yīng)該在一個框架中開發(fā)這些算法,以便我們以最短時間將產(chǎn)品推向市場,并鼓勵重復(fù)使用,降低非重復(fù)性和重復(fù)性工程成本。有幾種現(xiàn)成的框架我們可以考慮使用。
· OpenVX — 用于開發(fā)圖像處理應(yīng)用的開源應(yīng)用程序。
· OpenCV[1] — 開源計算機(jī)視覺,多個面向?qū)崟r計算機(jī)視覺的庫,基于 C/C++
· OpenCL — 基于 C++ 的開源計算機(jī)語言,用于開發(fā) GPU、FPGA 等器件中常見的并行處理應(yīng)用。
· SDSoC — 賽靈思的一款設(shè)計環(huán)境,借助該環(huán)境開發(fā)人員可在 Zynq 或 UltraScale+ MPSoC 器件的 ARM 處理系統(tǒng)中最初實現(xiàn)用 C/C++ 編寫的算法,分析代碼庫特性以找出性能瓶頸,然后利用賽靈思高層次綜合功能將這些瓶頸轉(zhuǎn)換到硬件支持的 IP 核,并在器件的可編程邏輯 (PL) 部分運行。
采用 FPGA 或 All Programmable SoC 方案時,將這些框架與 HLS 結(jié)合使用,能夠高效開發(fā)出嵌入式視覺應(yīng)用,并通過硬件在閉環(huán)中快速演示。
圖像經(jīng)過處理流水線后,數(shù)據(jù)從系統(tǒng)的輸出方式也很重要,我們有三種選擇。
· 利用視頻圖形陣列 (VGA)、高清多媒體接口 (HDMI)、串行數(shù)字接口 (SDI) 或 DisplayPort 等標(biāo)準(zhǔn)將圖像輸出到顯示器。很多電動車采用觸摸式顯示屏對系統(tǒng)進(jìn)行控制和配置。
· 將圖像或從圖像中提取的信息傳送到另一個系統(tǒng),該系統(tǒng)像云處理應(yīng)用那樣使用圖像或提取出的信息
· 將圖像存儲在非易失存儲介質(zhì)中,供以后訪問。
對于絕大多數(shù)方式而言,在完成成像鏈后,我們都需要確定圖像格式化方式,以便使用。此時,我們需要決定是否使用諸如 H.264(MPEG-4 Part 10 高級視頻編碼)或 H.265(高效率視頻編碼)等行業(yè)標(biāo)準(zhǔn)圖像/視頻壓縮算法對圖像進(jìn)行編碼,這些實現(xiàn)方案通常稱為編解碼器。編解碼器能提高通信和網(wǎng)絡(luò)帶寬的使用效率,或降低實現(xiàn)高保真度所需的存儲空間,因為編碼通常存在較大失真[2]。如果因使用編解碼器導(dǎo)致失真度無法接受,還可以按原始格式發(fā)送和存儲圖像,或者以無損格式進(jìn)行編碼。
大多數(shù)編解碼器所使用的色彩空間都與圖像傳感器輸出的色彩空間(前提是系統(tǒng)使用彩色器件)不同。嵌入式視覺中常用的色彩空間是:
· 紅、綠、藍(lán) — 包含 RGB 信息作為圖像傳感器的輸出,常用作 VGA 等簡單接口的輸出
· YUV — 包含亮度 (Y) 和色度 (U 和 V),該色彩空間用于大多數(shù)編解碼器和一些顯示標(biāo)準(zhǔn)。常用的 YUV 格式為 YUV4:4:4 和 YUV4:2:2。兩種格式的區(qū)別在于:4:4:4 格式下,每像素由 8 位表示,得到 24 位像素。在 4:2:2 格式下,U 值和 V 值在像素之間共享,得到 16 位像素,可節(jié)省存儲空間。
另一個對圖像處理鏈和 SWAP-C 具有很大影響的決策是:大部分圖像處理鏈應(yīng)該在哪實現(xiàn):
· 在邊緣,即在嵌入式視覺系統(tǒng)之內(nèi)。這樣會提高系統(tǒng)的功耗和處理/存儲要求,但能夠?qū)崿F(xiàn)更快的響應(yīng)。在邊緣處理將在大部分嵌入式應(yīng)用(例如高級駕駛員輔助、機(jī)器視覺等)中成為主導(dǎo)。
· 在云中,這需要嵌入式視覺系統(tǒng)捕獲圖像,并且利用網(wǎng)絡(luò)技術(shù)將圖像發(fā)送到云??稍谠浦刑幚淼牡湫蛻?yīng)用包括醫(yī)療成像或科研應(yīng)用。這類應(yīng)用中,處理非常密集,且不需要實時結(jié)果。
為實現(xiàn)處理鏈,處于嵌入式視覺系統(tǒng)核心的處理內(nèi)核不僅要能控制所選的圖像傳感器,還要能接收和實現(xiàn)圖像處理流水線,并通過指定網(wǎng)絡(luò)基礎(chǔ)設(shè)施傳送圖像或發(fā)送到選定的顯示器??紤]到這些嚴(yán)苛要求,因此經(jīng)常要選擇 FPGA,或者越來越多的情況下需要使用 All Programmable 片上系統(tǒng),例如 Zynq 器件。
Zynq 器件將兩個高性能 ARM A9 處理器與 FPGA 架構(gòu)相結(jié)合。這樣使得處理系統(tǒng) (PS) 可用來通過 GigE、PCIe 或 CAN 等接口與主機(jī)系統(tǒng)通信,同時執(zhí)行系統(tǒng)的一般管理和日常事務(wù)。器件的另一半,即可編程邏輯 (PL) 可用來接收和處理圖像,充分利用 FPGA 架構(gòu)的并行處理特性。如果要求通過網(wǎng)絡(luò)基礎(chǔ)設(shè)施傳送圖像,那么可使用 Zynq 中的直接存儲器訪問 (DMA) 控制器高效地將圖像數(shù)據(jù)從 PL 移動到 PS DDR 存儲器。圖像到了 PS DDR 存儲器內(nèi),可利用所選傳輸介質(zhì)的 DMA 控制器進(jìn)一步訪問。
當(dāng)然,一旦圖像處在 PS DDR,高性能 A9 處理器也可提供進(jìn)一步的處理操作。Zynq 架構(gòu)的特點在于還可將處理后的圖像從 PS DDR 移回 PL 中的圖像流水線。
傳感器融合
很多嵌入式視覺系統(tǒng)還要求能夠集成更多傳感器數(shù)據(jù)以更好地感知環(huán)境。這包括使用很多同類傳感器(同類傳感器融合)擴(kuò)大視場,例如高級駕駛員輔助系統(tǒng)的全景功能;或者整合多個不同類型的傳感器(異構(gòu)傳感器融合)提供可見光譜下無法看到的視覺內(nèi)容,例如在常規(guī)圖像傳感器數(shù)據(jù)上疊加紅外信息。
很多情況下,需要將嵌入式視覺應(yīng)用的輸出與其他傳感器數(shù)據(jù)進(jìn)行融合,使產(chǎn)生的圖像包含多個不同傳感器的信息。最簡單的傳感器融合應(yīng)用是將不同頻譜的圖像相結(jié)合,例如可見光與紅外線融合以實現(xiàn)更好的夜視效果。
傳感器融合的另一個更為復(fù)雜的用途是將成像系統(tǒng)、全球?qū)Ш叫l(wèi)星系統(tǒng) (GNSS)、數(shù)字地圖信息以及不同波長下運行的其他傳感器(例如雷達(dá))進(jìn)行融合,以確定另一輛汽車的相對位置,從而實現(xiàn)避撞功能。
由于要將不同系統(tǒng)融合在一起,并提取信息,因此傳感器融合對處理器的要求會非常高。All Programmable 片上系統(tǒng)解決方案能夠與多個傳感器建立接口連接,并行處理信息,增大數(shù)據(jù)吞吐量,因而具有多種顯著優(yōu)勢。
結(jié)論
嵌入式視覺已變得非常普遍,其市場滲透率和應(yīng)用范圍將在下個十年里只增不減。
在傳感器和系統(tǒng)層面,有多個因素必須加以考慮。有多種技術(shù)、框架和器件可用來實現(xiàn)嵌入式視覺系統(tǒng)。
[1] 請見 XAPP 1167 http://china.xilinx.com/support/documentation/application_notes/xapp1167.pdf
[2] 有可能創(chuàng)建無損的編碼應(yīng)用
評論