基于SoPC的自感知運動圖像采集系統設計
2.2.2 幀存分時切換機制
Write_FIFO,Read_FIFO1和Read_FIFO2都是16 b位寬,而SDRAM只有16 b的數據位寬,三個FIFO都要訪問SDRAM,這就涉及到相互競爭的問題,在同一時刻只能有一個訪問SDRAM。為此需要設計一個分時切換機制。由于SDRAM的操作時鐘為100 MHz,而采集像素時鐘為25 MHz,經過抽樣后時鐘頻率更是大大降低。在一次采集周期內,SDRAM完全可以和三個FIFO的接口輪流切換,從而不會影響采集的速度。
如圖5所示,其工作過程為:
(1)圖像經格式轉換模塊輸出,寫入Write_FIFO的輸入端口。
(2)當控制電路檢測到Write_FIFO中讀出端的數據量大于256(三個FIFO容量均為512 word)時,產生寫命令,并擁有寫互斥鎖。SDRAM控制器接到命令,以100 MHz時鐘將256個數據寫入SDRAM。
(3)Write_FIFO輸出256個數據后,讀出端的數據量小于256,并且由于Read_FIFO1中初始狀態的輸入端數據小于256,Read_FIFO1擁有讀互斥鎖,產生讀命令,SDRAM控制器接到命令,以100 MHz時鐘將256個數據讀出,并寫入Read_FIFO1。
(4)當Read_FIFO1收到256個數據,其輸入端數據大于256,并且由于Read_FIFO2中初始狀態的數據小于256,Read_FIFO2擁有讀互斥鎖,產生讀命令,SDRAM控制器將256個數據讀出,并寫入Read_FIFO2。
(5)這樣就完成了一次操作,之后就是循環操作。地址信號也是由控制電路產生,每經過一次讀寫,地址增量為256,這樣就可以保持信號的連續性。
(6)Write_FIFO在一定周期內向SDRAM中連續寫入兩幀連續圖像;Read+FIFO1根據SDRAM中的地址讀取其中的一幀圖像數據;而Read_FIFO2讀取另一幀圖像數據。
通過這個機制,三個FIFO中始終都有數據,不會發生讀空、寫滿情況,使得存儲器兩端的數據讀/寫方便,只要在write FIFO的輸入端和Read―FIF01、Read FIFO2的輸出端進行操作就行,在時鐘的上升沿將數據寫入或輸出,實現了異步方式。
3 運動檢測模塊
該模塊采用幀間差分法,其基本原理是將連續的兩幀或幾幀的圖像對應的像素值相減,在環境亮度變化不大的情況下,如果對應像素值相差很小,則認為此處景物是靜止的,如果圖像區域某處的像素值變化很大,可認為這是由于圖像中運動物體引起的。其算法實現簡單,能夠適應各種動態環境,穩定性較好。
設計中對相鄰兩幀圖像的每個像素RGB分量分別取絕對差值。當絕對差值大于閾值時(這里取經驗值16),就認為存在差異,如果做比較的兩個像素的RGB分量只要有一個分量有差異,則令此點的數值為1,這樣就得到一幅320×240像素大小的二值差值圖像。然后傳統處理方法是統計值為1的點的個數,如果其數量超過預設值,就認為兩幅圖像有差異。這種方法設計簡單,但是準確率還不夠高,為此該設計提出了一種改進的算法,引入了圖像處理常用的兩種操作腐蝕和膨脹。腐蝕與膨脹是一對逆運算,如果先腐蝕再膨脹,便構成了開運算。一般來說,開運算能夠去除孤立的小點,毛刺和小橋(即連通兩塊區域的小點)。而總的位置和形狀不變。
對上述二值圖像進行開運算處理,可以消除小顆粒的噪聲的干擾,從而盡可能降低誤判和漏判。
設計流程如圖6所示,通過調用ALTSHIFTTAPS IP核,并利用輸出TAPS,構建一個11×11像素大小的圖塊作為結構元素,然后腐蝕:
(1)用11×11的結構元素,掃描圖像的每一個像素;
(2)用結構元素與其覆蓋的二值圖像做“與”操作;
(3)如果都為1,結果圖像的該像素為1,否則為0。
接著再將上述結果作為第二個ALTSHIFTTAPS的輸入,再次構建11×11個像素的結構元素,然后進行膨脹處理:
(1)用11×ll的結構元素,掃描圖像的每一個像素;
(2)用結構元素與其覆蓋的二值圖像做“或”操作;
(3)如果都為0,結果圖像的該像素為0,否則為1。
最后得到運動判定信號DETECT,并用這個信號控制數據寫入過程,一旦判定信號為1,就啟動后續的圖像存儲過程。
評論