由于現場(chǎng)實(shí)時(shí)測量的需要,機器視覺(jué)技術(shù)越來(lái)越多地借助硬件來(lái)完成,如DSP芯片、專(zhuān)用圖像信號處理卡等。但是,DSP做圖像處理也面臨著(zhù)由于數據存儲與處理量大,導致處理速度較慢,系統實(shí)時(shí)性較差的問(wèn)題。本文將FPGA的IP核內置緩存模塊和乒乓讀寫(xiě)結構相結合,實(shí)現了圖像數據的緩存與提取,節省了存儲芯片所占用的片上空間,并且利用圖像預處理重復率高,但算法相對簡(jiǎn)單的特點(diǎn)和FPGA數據并行處理,結合流水線(xiàn)的結構,大大縮短了圖像預處理的時(shí)間,解決了圖像處理實(shí)時(shí)性差的問(wèn)題。 1 系統架構和流程簡(jiǎn)介 本系統采用了FPGA與DSP相結合的架構,綜合了各自的優(yōu)點(diǎn),使系統滿(mǎn)足實(shí)時(shí)性要求的同時(shí),又可以在后續任務(wù)中完成復雜算法的處理。系統的整體架構如圖1所示。 系統上電后,CCD 相機向AD 轉換芯片TVP5150輸入PAL制式模擬圖像信號,TVP5150將模擬信號轉換成數字信號后,以ITU-R BT656格式傳輸到FPGA,FPGA對采集到的ITU-R BT656格式的圖像數據去消隱化后進(jìn)行預處理,處理完之后傳輸到DM642的VP0口,VP0以8位RAW 格式接收圖像數據,并通過(guò)EDMA通道存儲到連接在EMIFA接口上的SDRAM 中。經(jīng)過(guò)DSP的圖像處理后,將SDRAM 中的圖像數據以ITU-R BT656的格式經(jīng)DM642 的VP2 口傳輸到DA 芯片SAA7121,然后SAA7121進(jìn)行DA轉換后,將PAL制式的模擬信號輸出到LCD顯示器上顯示。需要說(shuō)明的是,TVP5150和SAA7121通過(guò)DM642的I2C總線(xiàn)接口配置。 圖1 系統結構框圖 2 FPGA圖像緩存與處理 由于該系統利用FPGA 并行性和高速性來(lái)縮減圖像預處理的時(shí)間,因此,FPGA的圖像緩存和預處理環(huán)節直接影響到系統的實(shí)時(shí)性,是整個(gè)系統的核心部分,也是本文所要介紹的重點(diǎn)。根據圖像預處理的需求和FPGA內部各模塊功能的不同,將其分為4個(gè)部分:去消隱化、濾波、閾值分割和邊緣提取。 2.1 去消隱化 FPGA接收TVP5150傳輸的數字信號為ITUR BT656格式,該格式除了傳輸4∶2∶2的YCbCr視頻數據流外,還包含行、列消隱信號。因此,需要將行列消隱信號剔除掉,以便后期進(jìn)行圖像預處理。 根據BT656的固有結構,編寫(xiě)了Verilog硬件語(yǔ)言程序,用于提取BT656中的720×576個(gè)像素點(diǎn)的有效視頻數據,由于圖像處理過(guò)程只需要檢測亮度信號(Y分量),因此同時(shí)舍去各像素點(diǎn)的色度信號(Cb、Cr分量),僅保留亮度信號作為圖像有效數據。在去消隱化過(guò)程中,每行起始狀態(tài)里,檢測輸入8位數據,如果連續3個(gè)輸入信號滿(mǎn)足FF、00、00結構,則跳入下一個(gè)狀態(tài),判斷下一個(gè)8位輸入XY信號,是否為有效圖像標志信號(80標志該行為偶場(chǎng)圖像數據,C7標志該行為奇場(chǎng)圖像數據),若判斷是,則計數器計數,并采集計數器為偶數時(shí)的數據(即亮度信號),為圖像有效數據,當采集滿(mǎn)720個(gè)圖像有效數據時(shí),狀態(tài)機轉入初始狀態(tài)繼續等待FF、00、00結構,并依此循環(huán)。 2.2 濾波 攝像機采集的圖像存在各類(lèi)噪聲,從而對目標信息的進(jìn)一步處理產(chǎn)生不利影響,因此,獲取圖像后需要對圖像進(jìn)行濾波?紤]到中值濾波在平滑脈沖噪聲方面非常有效,并且可以保護圖像尖銳的邊緣的優(yōu)點(diǎn),我們選用3×3中值濾波作為系統的圖像濾波算法。中值濾波模塊包括3個(gè)子模塊:乒乓結構讀寫(xiě)模塊、3×3陣列生成模塊和中值濾波算子模塊,其流程如圖2所示。 圖2 中值濾波模塊流程圖 2.2.1 乒乓結構讀寫(xiě)模塊 為了節約芯片成本和電路板的片上空間,圖像數據的存儲利用FPGA 上固有的IP核生成雙口RAM 來(lái)緩存。由于圖像數據量較大,而中值濾波只需要持續地提取3×3模塊來(lái)進(jìn)行數據處理,因此,僅需生成4片雙口RAM,每個(gè)用于存儲一行的圖像數據,通過(guò)乒乓讀寫(xiě)結構,便可實(shí)現數據的緩存。 乒乓讀寫(xiě)結構是指將輸入數據流通過(guò)輸入數據選擇單元等時(shí)地將輸入數據分配到兩個(gè)數據緩存區,并且再寫(xiě)入某一個(gè)緩存區的過(guò)程中,從另外一個(gè)緩存區讀出上個(gè)緩存周期寫(xiě)入的數據,依此循環(huán),不斷往復。在本系統中,選用4片1024×8bit的雙口RAM 作為緩存區,在每個(gè)緩存周期,向其中1片雙口RAM 中寫(xiě)入圖像數據,同時(shí),讀控制模塊從另外3片雙口RAM 中讀出前三個(gè)緩存周期已寫(xiě)入的數據,用于生成3×3陣列。當一行數據緩存完成后,寫(xiě)使能信號跳轉到下一個(gè)雙口RAM,繼續進(jìn)行下一行數據寫(xiě)入,讀控制模塊繼續讀取剩余三行所存儲數據。 2.2.2 3×3陣列生成模塊 3×3陣列生成模塊利用了3個(gè)并行的24位移位寄存器,如果讀使能信號有效,則在每個(gè)時(shí)鐘的上升沿,將3個(gè)移位寄存器中的數據左移8位,然后將從3個(gè)雙口RAM 中讀取的數據分別填充各自對應移位寄存器的后8位,在每個(gè)讀取周期內循環(huán),直到讀使能信號置低時(shí)停止,然后等待下一行數據的循環(huán)。這樣,就生成了中值濾波所需要的3×3陣列。需要注意的是,每一幀圖像的第一行和最后一行因為沒(méi)有相應的上下行數據,因此不能提取3×3陣列,所以需要控制信號將該兩行數據的3×3陣列剔除,以滿(mǎn)足圖像處理的準確性。 在雙口RAM 的讀寫(xiě)過(guò)程中,涉及到讀寫(xiě)的時(shí)序問(wèn)題,讀寫(xiě)時(shí)序的控制必須滿(mǎn)足建立和保持時(shí)間的關(guān)系,以滿(mǎn)足圖像數據準確性的要求。在此,設計了一種新型的讀寫(xiě)時(shí)序控制方法,首先,在數據傳輸至寫(xiě)雙口RAM 模塊時(shí),利用一個(gè)與雙口RAM 寫(xiě)時(shí)鐘頻率相同,但是相位相差180°的時(shí)鐘做同步處理,使數據信號和控制信號的上升沿與該時(shí)鐘同步,然后,將同步后的數據信號和控制信號傳輸到雙口RAM 的寫(xiě)數據端口,則可以將觸發(fā)采集的寫(xiě)時(shí)鐘的上升沿,恰好置于數據信號和控制信號的中央部分,以此保證數據寫(xiě)入的穩定性。該讀寫(xiě)時(shí)序控制圖如圖5所示,其中,Clk_W 為寫(xiě)時(shí)鐘,Clk_180°為上文所講的同步時(shí)鐘,Data_in為同步前數據信號,Data_in1為同步后數據信號,由圖可以清楚的顯示,利用這種方法,可以將數據信號穩定的寫(xiě)入雙口RAM 中,減少了時(shí)序設計時(shí)的計算時(shí)間,并且可以節約時(shí)序仿真的步驟,大大節省了開(kāi)發(fā)時(shí)間。 圖3 時(shí)序同步示意圖 2.2.3 中值濾波算子模塊 中值濾波的原理是把圖像中某一點(diǎn)的像素值用該點(diǎn)的一個(gè)鄰域中各點(diǎn)像素值的中值代替,讓該點(diǎn)像素值更加接近真實(shí)值,從而消除孤立的噪聲點(diǎn)的濾波方法。在本系統中,選用3×3中值濾波模塊,其具體算法為將圖像某一點(diǎn)及其周?chē)?個(gè)點(diǎn)的像素按照大小排列順序,取9個(gè)像素值的中間值作為當前點(diǎn)的像素值,依次濾除整幀圖像的雜散信號。 通過(guò)FPGA實(shí)現9個(gè)數大小的排序,為了節省處理時(shí)間和芯片片上資源,利用快速中值濾波算法,結合流水線(xiàn)結構,分級排序來(lái)選取圖像像素的中間值。排序步驟如下:首先對3×3陣列進(jìn)行列排序,然后行排序,最后副對角線(xiàn)排序,得到濾波中值。下圖4為快速中值濾波示意圖,圖中的C代表三輸入排序器,所用比較器為assign結構,可以節約大量比較所用時(shí)間,提高系統的實(shí)時(shí)性。 圖4 快速中值濾波算法示意圖 2.3 閾值分割 由于實(shí)時(shí)圖像系統的刷新頻率較快(BT656格式每秒刷新25幀圖像),每幀圖像之間像素灰度均值差別很小,因此,我們可以利用上一幀圖像的統計值來(lái)計算閾值,為下一幀圖像二值化提供閾值,以適應測試環(huán)境變化所引起的閾值變化,閾值統計采用直方圖的方式。 利用FPGA 的IP 核生成一個(gè)256×9 位的DPRAM,用以作為直方圖的計數器。以該DPRAM 的地址作為圖像的像素值,而以DPRAM的內部存儲值,作為該幀圖像中該像素值的個(gè)數,每讀出一位相應的像素,對應地址的內部寄存器加1,以此完成整幀圖像的像素統計。 整幀圖像像素統計完成以后,按照地址從小到大的順序,依此累加DPRAM 中的值,當累加和不小于整幀圖像像素數的0.7時(shí),該DPRAM 地址,即為直方圖法得到的閾值,然后利用該閾值,為下一幀圖像做閾值分割。 2.4 邊緣檢測 邊緣檢測在圖像處理中占有很重要的地位,好的邊緣檢測,可以提高圖像的定位精度,減少圖像后續處理中的數據量。綜合考慮各種濾波算法的優(yōu)缺點(diǎn),由于Sobel算法對噪聲容抗較大,并且較易在FPGA上實(shí)現,因此,選取Sobel算法作為該系統的邊緣檢測算法。 邊緣檢測模塊類(lèi)似于濾波模塊,同樣也包括3個(gè)主要部分:乒乓結構存儲模塊、3×3陣列生成模塊和Sobel邊緣檢測算子模塊。前兩個(gè)部分不再贅述,本文主要介紹Sobel算子模塊。 該算子包含兩組3×3的矩陣,分別為橫向及縱向,將之與圖像作平面卷積,即可分別得出橫向及縱向的亮度差分近似值。 利用FPGA 在硬件并行結構和流水線(xiàn)結構的特點(diǎn),我們將整個(gè)Sobel算子分為4級,第一、二級分別將首、末行和首、末列按照算子模板參數相加并輸出結果,第三級將上級所得到的行列結果分別相減,第四級比較上級所得兩個(gè)值的絕對值,取絕對值較小的值作為Sobel檢測結果。如此,每個(gè)時(shí)鐘周期每級都執行各自相應的加減法運算,并在下個(gè)時(shí)鐘上升沿將所得數據級級傳遞,即可完成3×3陣列的Sobel算法,該模塊的流水線(xiàn)結構如圖5所示。這樣,在每個(gè)時(shí)鐘周期,都會(huì )輸出1個(gè)Sobel檢測值,即處理每一行圖像數據,僅需要n+4個(gè)時(shí)鐘周期的時(shí)間,處理整幀圖像所需最少時(shí)間為(n+4)×m×T,其中n為每行像素點(diǎn)個(gè)數,m 為行數,T 為時(shí)鐘周期。 圖5 Sobel算法的流水線(xiàn)結構 3 實(shí)驗結果分析 根據系統硬件結構搭建的實(shí)驗平臺,連接各模塊接口,編譯并下載程序,運行系統。在實(shí)驗室環(huán)境下采集圖像,并進(jìn)行濾波和邊緣檢測等處理,在CCS3.3的view/graph菜單下觀(guān)測處理圖像效果圖,實(shí)驗結果與原圖對比如圖6所示。由于實(shí)驗室光線(xiàn)環(huán)境較為穩定,圖像噪聲較少,濾波效果不明顯,但是通過(guò)圖6(c)可以明顯看到圖像邊緣檢測效果較好,可以滿(mǎn)足圖像預處理要求。 針對系統圖像預處理速度的評估,我們以Sobel邊緣檢測算法作為參考。首先利用CCS3.3的計時(shí)函數,運行得到DSP對一幀720×576像素的圖像邊緣提取所用時(shí)間為254.83ms,然后通過(guò)上文所列公式計算FPGA 圖像邊緣提取所用最少時(shí)間為15.445ms。通過(guò)兩種處理方式所用時(shí)間的比較,可以明顯得出FPGA在圖像預處理時(shí)的速度優(yōu)勢,完全可以滿(mǎn)足圖像實(shí)時(shí)處理的要求,具有很強的實(shí)用性。 圖6 圖像處理結果 4 結論 本文設計了一種基于FPGA 為核心的圖像處理系統,實(shí)現了圖像的采集、傳輸、緩儲和預處理,經(jīng)過(guò)試驗證明,處理速度達到了10ms級別,滿(mǎn)足圖像處理實(shí)時(shí)性的要求,有非常廣闊的應用前景。 |