像素行與像素窗口
一幅圖像是由一個個像素點(diǎn)構(gòu)成的,對于一幅480*272大小的圖片來說,其寬度是480,高度是272。在使用FPGA進(jìn)行圖像處理時,最關(guān)鍵的就是使用FPGA內(nèi)部的存儲資源對像素行進(jìn)行緩存與變換。由于在圖像處理過程中,經(jīng)常會使用到卷積,因此需要對圖像進(jìn)行開窗,然后將開窗得到的局部圖像與卷積核進(jìn)行卷積,從而完成處理。
圖像數(shù)據(jù)一般按照一定的格式和時序進(jìn)行傳輸,在我進(jìn)行實(shí)驗(yàn)的時候,處理圖像時,讓其以VGA的時序來進(jìn)行工作,這樣能夠?yàn)槲姨幚硇芯彺嫣峁┍憷?/p>
基于FIFO的行緩存結(jié)構(gòu)
在FPGA中對圖像的一行數(shù)據(jù)進(jìn)行緩存時,可以采用FIFO這一結(jié)構(gòu),如上圖所示,新一行圖像數(shù)據(jù)流入到FIFO1中,F(xiàn)IFO1中會對圖像數(shù)據(jù)進(jìn)行緩存,當(dāng)FIFO1中緩存有一行圖像數(shù)據(jù)時,在下一行圖像數(shù)據(jù)來臨的時候,將FIFO1中緩存的圖像數(shù)據(jù)讀出,并傳遞給下一個FIFO,于此同時,將新一行的圖像數(shù)據(jù)緩存到FIFO1中,這樣就能完成多行圖像的緩存。
若要緩存多行圖像,下面的菊花鏈?zhǔn)降慕Y(jié)果更能夠直觀地表現(xiàn)圖像數(shù)據(jù)地流向。
新輸入地圖像緩存到FIFO1當(dāng)中,當(dāng)FIFO中緩存有一行數(shù)據(jù)的時候,下一個輸入像素來臨的時候,會將數(shù)據(jù)從本FIFO中讀出,并給到下一個FIFO,來形成類似于一個流水線的結(jié)構(gòu)。
上面的圖中,就是實(shí)現(xiàn)一個5X5大小的窗口的一個結(jié)構(gòu)圖。
代碼設(shè)計(jì)
實(shí)現(xiàn)一個可以生成任意尺寸大小的開窗的模塊,需要注意參數(shù)的使用,可以通過調(diào)節(jié)KSZ來調(diào)整窗口的大小。最終將窗口中的圖像像素,轉(zhuǎn)換成一個一維的數(shù)據(jù)輸出給到下一個模塊。
在設(shè)計(jì)的時候,對于FIFO要選擇精準(zhǔn)計(jì)數(shù)模式,這樣才能讓流水正常工作起來。
在代碼中通過generate語句來實(shí)現(xiàn)多個line_buffer的例化,line buffer的個數(shù)可以根據(jù)卷積窗口的大小來選擇,例如3X3大小的卷積窗口需要緩存兩行,5X5大小的卷積窗口需要緩存4行,可以通過設(shè)置參數(shù)來選擇要例化多少個line_buffer。
時序設(shè)計(jì)
在設(shè)計(jì)FIFO的菊花鏈結(jié)構(gòu)時,需要根據(jù)當(dāng)前FIFO中存儲的數(shù)據(jù)個數(shù)來判斷,這時候使用到精準(zhǔn)計(jì)數(shù)模式,可以反應(yīng)FIFO中的存儲的數(shù)據(jù)。當(dāng)FIFO中存儲有一行數(shù)據(jù)的時候,使能pop_en信號,表示當(dāng)前可以將數(shù)據(jù)從FIFO中讀出。
在將數(shù)據(jù)寫入到FIFO中的時候,需要對數(shù)據(jù)進(jìn)行擴(kuò)充,也即需要對輸入的圖像的邊界補(bǔ)充數(shù)據(jù),因?yàn)檫M(jìn)行卷積之后的圖像將會比原始圖像數(shù)據(jù)尺寸減少,因此在形成卷積窗口時,將圖像擴(kuò)充,能夠讓圖像處理完成之后,保持原來的尺寸,只是會在邊界出現(xiàn)黑邊。
win_buf這個模塊的最終輸出,就是一個矩陣內(nèi)的所有像素,組成一個信號輸出到外部,供進(jìn)行卷積的處理。
仿真驗(yàn)證
輸入的第三行數(shù)據(jù)的前三個數(shù)據(jù)是:0x00,0x78,0x7c
輸入的第二行數(shù)據(jù)的前三個數(shù)據(jù)是:0x00,0x7d,0x7d
輸入的第一行數(shù)據(jù)的前三個數(shù)據(jù)是:0x00,0x7e,0x7f
輸出的第一個矩陣的值是:0x0078_7c00_7d7d_007e_7f
輸入行數(shù)據(jù)第一個數(shù)據(jù)是0x00這是因?yàn)閿U(kuò)充了邊界的原因。
可以看到,設(shè)置KSZ為3,可以得到一個位寬為72bit的輸出數(shù)據(jù),該數(shù)據(jù)包含了一個窗口中的9個數(shù)據(jù)。
5X5開窗
設(shè)置開窗大小為5x5之后,也可以看到輸出信號的位寬變?yōu)榱?*25=200bit,也就是一個5X5大小的矩陣中的數(shù)據(jù)。
輸入的第5行數(shù)據(jù)的前5個數(shù)據(jù)是:0x00,0x00,0x7e,0x7c,0x7f
輸入的第4行數(shù)據(jù)的前5個數(shù)據(jù)是:0x00,0x00,0x7e,0x7e,0x7e,
輸入的第3行數(shù)據(jù)的前5個數(shù)據(jù)是:0x00,0x00,0x78,0x7c,0x7c
輸入的第2行數(shù)據(jù)的前5個數(shù)據(jù)是:0x00,0x00,0x7d,0x7d,0x7a
輸入的第1行數(shù)據(jù)的前5個數(shù)據(jù)是:0x00,0x00,0x7e,0x7f,0x7d
從輸出結(jié)果看,輸出的矩陣數(shù)據(jù),剛好是這5行的前5數(shù)據(jù),并且前兩個數(shù)據(jù)是0x00,這是因?yàn)樵诿恳恍星懊嫜a(bǔ)充了兩個0的原因。
經(jīng)過測試,這種開窗算子是能夠完成任意此村的開窗的。
實(shí)際應(yīng)用
在實(shí)際應(yīng)用中,我也將這個模塊正確地使用上了,完成了一個3x3的sobel算子和5x5的均值濾波。
原始圖像
3x3 Sobel
審核編輯 :李倩
-
FPGA
+關(guān)注
關(guān)注
1630文章
21801瀏覽量
606360 -
圖像處理
+關(guān)注
關(guān)注
27文章
1304瀏覽量
56911
原文標(biāo)題:FPGA學(xué)習(xí)-圖像處理基礎(chǔ)實(shí)現(xiàn)緩存卷積窗口
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
使用SCL編寫FIFO功能塊
![使用SCL編寫<b class='flag-5'>FIFO</b>功能塊](https://file1.elecfans.com/web3/M00/07/94/wKgZPGeoEvOAW2mUAAAggtjlSP8572.png)
FPGA圖像處理基礎(chǔ)----實(shí)現(xiàn)緩存卷積窗口
![<b class='flag-5'>FPGA</b>圖像處理基礎(chǔ)----實(shí)現(xiàn)<b class='flag-5'>緩存</b>卷積窗口](https://file1.elecfans.com/web3/M00/07/6A/wKgZO2elc6WADVYYAAARmaYZFIo446.png)
FIFO IP核的使用教程
![<b class='flag-5'>FIFO</b> IP核的使用教程](https://file1.elecfans.com/web3/M00/04/B1/wKgZO2d3P2uAblqKAAAtoGm7-54931.png)
HTTP緩存頭的使用 本地緩存與遠(yuǎn)程緩存的區(qū)別
緩存之美——如何選擇合適的本地緩存?
![<b class='flag-5'>緩存</b>之美——如何選擇合適的本地<b class='flag-5'>緩存</b>?](https://file1.elecfans.com//web2/M00/0C/47/wKgaomcyxP6Adt0qAABfE5AgeRg699.png)
FIFO Generator的Xilinx官方手冊
![<b class='flag-5'>FIFO</b> Generator的Xilinx官方手冊](https://file1.elecfans.com/web1/M00/F4/CF/wKgaoWcyw0uAFsglAAAmkjNjX48160.png)
詳解FPGA的基本結(jié)構(gòu)
![詳解<b class='flag-5'>FPGA</b>的基本<b class='flag-5'>結(jié)構(gòu)</b>](https://file1.elecfans.com/web1/M00/F3/B4/wKgZoWcbXIyAb327AAAwW_9Aqco842.png)
FIFO的深度應(yīng)該怎么計(jì)算
![<b class='flag-5'>FIFO</b>的深度應(yīng)該怎么計(jì)算](https://file1.elecfans.com/web2/M00/0B/1F/wKgaomcbRw6AYR7aAAA5PisLH4s903.png)
FPGA加速深度學(xué)習(xí)模型的案例
Efinity FIFO IP仿真問題 -v1
![Efinity <b class='flag-5'>FIFO</b> IP仿真問題 -v1](https://file1.elecfans.com/web2/M00/0A/C7/wKgaomcVzXSAJAskAAAY6WDHRZE641.png)
FPGA設(shè)計(jì)經(jīng)驗(yàn)之圖像處理
同步FIFO和異步FIFO區(qū)別介紹
![同步<b class='flag-5'>FIFO</b>和異步<b class='flag-5'>FIFO</b>區(qū)別介紹](https://file1.elecfans.com/web2/M00/EB/91/wKgZomZetI6ACXETAAAiwkYcoTM829.png)
關(guān)于同步FIFO和異步FIFO的基礎(chǔ)知識總結(jié)
![關(guān)于同步<b class='flag-5'>FIFO</b>和異步<b class='flag-5'>FIFO</b>的基礎(chǔ)知識總結(jié)](https://file1.elecfans.com/web2/M00/C8/75/wKgaomYU33WAeJNeAAAiwkYcoTM175.png)
評論