FPGA開發——圖像處理(包括MT9V034等攝像頭學習筆記)

一、開發遇到的問題

1.畫面抖動問題(暫時總結這麼多)

  • 畫面出現大規模抖動可能是因爲代碼的bug,比如pclk時鐘和FPGA時鐘不協調,緩存代碼有問題等等;
  • 如果代碼調整了始終有問題,而且畫面雖然抖動,但移動攝像頭畫面依然有明顯的輪廓變化,可能就是硬件的問題,比如攝像頭和FPGA間的數據線受周圍元件磁場干擾(可用錫紙包裹線材),杜邦線質量太差(沒辦法,換一紮吧)

二、像素顏色模式

         彩色圖像通常由三種顏色組合生成,最常用的就是紅綠藍(RGB)三色。但是基於成本的考慮,大多數芯片在單像素位置上只會有單一顏色感應器。最普遍使用到的色彩濾波陣列(CFA)爲Bayer陣列。Bayer陣列中50%像素爲綠色,紅色和藍色各佔25%。這主要是因爲人眼對綠色最敏感。MT9V034採用的Bayer陣列如圖所示

                                           

        即每個像素點只有RGB中的一種,若要在VGA顯示彩色圖像中,須將Bayer陣列轉化爲RGB格式,再將每個像素的RGB數據拆分賦值給VGA顯示引腳的VGA_R[ ],VGA_G[ ],VGA_B[ ]。

三、FPGA圖像處理方法

             圖像在採集和傳輸的過程中,通常會產生噪聲,使圖像質量降低,影響後續處理。因此須對圖像進行一些圖像濾波、圖像增強等預處理。爲改善圖像質量,去除噪聲通常會對圖像進行濾波處理 ,這樣既能去除噪聲,又能保持圖像細節。

     1、圖像增強

                兩大方法:空間域方法和時間域方法(以後再詳述)

     2、圖像濾波

           (1)平滑空間濾波器

           (2)中值濾波算法

     3、圖像邊緣檢測

        邊緣指圖像局部強度變化最顯著的部分。邊緣主要存在與目標與目標、目標與背景、區域與區域(不同色彩)之間,邊緣檢測是圖像分割、紋理特徵和形狀等圖像分析的基礎。

     

     4、圖像目標提取算法

           (1)相鄰幀差法

         對相鄰的兩幀圖像求差,將圖像中的目標位置和形狀顯示出來,差分後的圖像不爲零的即爲目標。在兩幀圖像中,灰度值沒有變化的部分被剪掉,主要是背景和一些小部分目標。

         由檢出的部分大致可以確定運動目標的位置,但是該方法的確定是當物體的位移較小時,難以確定目標的運動方向並且在目標的內部產生空洞。 

           (2)光流法

           (3)背景幀差法

        此方法選取一副圖像作爲背景圖像,用採集到的圖像與背景圖像差分,在背景圖像選取合適的時候,能比較準確地分割出目標物體。   速度快,易於實現,並能提供完整的運動區域信息。

        具體原理圖:

       

如上圖,首先將背景圖像和當前圖像進行差分,得到兩幅圖像的背景差圖像(從存儲器中提取出亮度分量得到灰度圖像,經過圖像的中值濾波等處理後,進入圖像檢測算法模塊;然後只需將兩幅圖像中對應的像素相減後再取絕對值即可得到背景差圖像),採用直方圖統計的方法來確定圖像的 二值化閾值(閾值一般設定爲G分量的平均值),最後對圖像進行二值化處理,提取出目標的輪廓。 

       求背景差 VHDL代碼實現:

        5、注意點

             (1)視頻輸入設備的採樣頻率和FPGA的晶振頻率通常不一樣,因此會產生異步時鐘域的問題,因此可以先將採集的圖像數據存入到FIFO中,然後再存進SRAM中。

              (2)不同時鐘域之間會產生亞穩態情況:當信號通過兩個時鐘域的交界處時,將會分別由兩個時鐘來控制信號的值,此時如果兩時鐘信號的敏感延非常接近,將出現數據信號不穩定的情況。

三、圖像數據存儲

         從攝像頭採集的數據先進入FIFO緩衝器中,存滿一行的數據後,再由SRAM控制器讀取到SRAM中。注意:採集的視頻圖像數據是隔行掃描的,即先傳奇數場再傳偶數場,爲了後續圖像處理的方便操作,須將兩場數據合併爲完整的一幀圖像。具體方法:先將奇數場的數據以隔行的方式存在SRAM中,即奇數場的第一行存在SRAM的第一行,第二行存在SRAM的第三行,與第一行相隔一行的地址空間,直到行數據全都發送完畢,然後開始存放偶數場,第一行放在第二行等等。

       內部控制器controller根據異步FIFO的滿空狀態來使能SRAM控制器,當FIFO滿狀態有效空狀態無效時,SRAM開始從FIFO中讀取數據。

       使用FIFO的目的:避免亞穩態。由於採集頻率和FPGA的時鐘頻率不同,爲異步時序電路。且數據經FIFO後時鐘信號統一爲系統時鐘。

         異步FIFOzho中包含:寫地址產生,讀地址產生和一個雙口RAM。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章