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