圖像處理是用計(jì)算機(jī)對圖像進(jìn)行分析,以達(dá)到所需的結(jié)果的一種技術(shù),又稱為影像處理。它是對圖像進(jìn)行操作從而得到自己想要的結(jié)果,它是一個非常廣義的概念,包含圖像增強(qiáng)、圖像復(fù)原、圖像重建、圖像分析、模式識別、計(jì)算機(jī)視覺等N多個應(yīng)用方向。這些應(yīng)用技術(shù)有許多在本質(zhì)上是相通的,但是不同應(yīng)用領(lǐng)域的關(guān)注點(diǎn)往往是不同的。
FPGA做圖像處理的優(yōu)勢
用FPGA做圖像處理最關(guān)鍵的一點(diǎn)優(yōu)勢就是:FPGA能進(jìn)行實(shí)時流水線運(yùn)算,能達(dá)到最高的實(shí)時性。因此在一些對實(shí)時性要求非常高的應(yīng)用領(lǐng)域,做圖像處理基本就只能用FPGA。例如在某些分選設(shè)備中圖像處理基本上用的都是FPGA,因?yàn)樵谙鄼C(jī)中從看到物料圖像到給出執(zhí)行指令之間的延時大概只有幾毫秒,這就要求圖像處理必須很快且延時固定,只有FPGA進(jìn)行的實(shí)時流水線運(yùn)算才能滿足這一要求。
要了解FPGA進(jìn)行圖像處理的優(yōu)勢就必須理解FPGA所能進(jìn)行的實(shí)時流水線運(yùn)算和DSP,GPU等進(jìn)行的圖像處理運(yùn)算有何不同:
DSP,GPU,CPU對圖像的處理基本是以幀為單位的,從相機(jī)采集到的圖像數(shù)據(jù)會先存在內(nèi)存中,然后GPU會讀取內(nèi)存中的圖像數(shù)據(jù)進(jìn)行處理。假如采集圖像的幀率是30幀,那么DSP,GPU要是能在1/30秒內(nèi)完成一幀圖像的處理,那基本上就能算是實(shí)時處理。
而FPGA對圖像進(jìn)行實(shí)時流水線運(yùn)算是以行為單位的。FPGA可以直接和圖像傳感器芯片連接采集圖像數(shù)據(jù)流,如果是RAW格式的還可以通過差值來獲得RGB圖像數(shù)據(jù)。FPGA能進(jìn)行實(shí)時流水線處理的關(guān)鍵是它可以用內(nèi)部的Block Ram緩存若干行的圖像數(shù)據(jù)。Block Ram可以說是類似于CPU里面的Cache,但Cache不是你能完全控制的,而Block Ram是完全可控的,可以用它實(shí)現(xiàn)各種靈活的運(yùn)算處理。這樣FPGA通過緩存若干行圖像數(shù)據(jù)就可以對圖像進(jìn)行實(shí)時處理,數(shù)據(jù)就這樣一邊流過就一邊處理好了,不需要送入DDR緩存了之后再讀出來處理。
FPGA圖像處理之路,從此開始
用FPGA做圖像處理相關(guān)的開發(fā)時,往往我們首先要考慮的是FPGA處理板的性能,因?yàn)樽鰣D像處理是一個十分消耗資源的事情。從網(wǎng)上可以搜索到很多圖像處理FPGA開發(fā)板,有些開發(fā)板上的資源十分豐富,可以滿足我們前期試驗(yàn)的需求。
FPGA在圖像處理方面的主要應(yīng)用于圖像的預(yù)處理階段。
什么是圖像的預(yù)處理?比如圖像的畸變校正,濾波器處理,邊緣檢測、顏色檢測和閾值處理等。這些預(yù)處理都有共同的特征:算法較為簡單,操作重復(fù)性強(qiáng)等。但是,除了預(yù)處理,F(xiàn)PGA就不能做點(diǎn)別的嗎?圖像處理類似一個三層金字塔,分為底層,中間層,高層。
圖像處理金字塔有三層,分別針對的是像素級、特征級和目標(biāo)級。一個成熟的圖像處理應(yīng)用應(yīng)該同時完成這三層。
在像素層,我們可以對圖像做一些變換,目的是增強(qiáng)圖像的有用信息,同時濾波任何不相關(guān)的信息(如噪聲)。然后通過對預(yù)處理后的圖像做分割操作實(shí)現(xiàn)圖像從像素級到特征級的過度,分割操作可以理解為檢測圖像中具有共同性質(zhì)的區(qū)域。針對這些區(qū)域,依據(jù)一個或多個分類法則,將區(qū)域歸類到預(yù)先設(shè)定的特征類型中作為后期識別的數(shù)據(jù)集。此時的數(shù)據(jù)已經(jīng)不僅僅是圖像了,其中包含了豐富的特征信息,如物體的位置等。在金字塔高層,依靠獲取的特征信息,如有必要還可以將這些特征集作為學(xué)習(xí)的訓(xùn)練集來創(chuàng)建專用的模型,借助模型來實(shí)現(xiàn)識別,進(jìn)而用來對實(shí)時采集的圖像進(jìn)行描述。
圖像處理系統(tǒng)設(shè)計(jì)注意點(diǎn)
1. 將算法開發(fā)和FPGA實(shí)現(xiàn)分離。用軟件的圖像處理環(huán)境算法可以進(jìn)行大批量的圖像樣本測試及調(diào)試,再將算法映射到硬件上,這樣大大節(jié)省了硬件調(diào)試周期。
2. 算法的精度。圖像處理的算法中,大部分需要采用浮點(diǎn)數(shù)運(yùn)算,而浮點(diǎn)數(shù)運(yùn)算再FPGA中是非常不劃算的,因此需要轉(zhuǎn)換成定點(diǎn)數(shù)計(jì)算,此時會涉及到浮點(diǎn)運(yùn)算轉(zhuǎn)定點(diǎn)運(yùn)算時精度下降的問題。
3. 結(jié)構(gòu)的合理劃分。這里是指DSP,CPU與FPGA;一般結(jié)構(gòu)規(guī)則:計(jì)算量大的操作如sobel算子、均值濾波可以采用FPGA進(jìn)行,不規(guī)則的動態(tài)可變長度循環(huán)的底層算法由DSP、CPU進(jìn)行;
圖像處理FPGA 設(shè)計(jì)基本方法
1. 陣列結(jié)構(gòu)結(jié)合流水線處理設(shè)計(jì)。例如RGB圖像,包括三組數(shù)據(jù),處理時需要并行三通道后,每個通道進(jìn)行分別的串行流水處理。
2. 緩存設(shè)計(jì)。幀緩存、行緩存、列對齊。
3. 資源。分辨率、處理窗口、對資源影響成倍增加。