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