基于FPGA視頻圖像的Canny算法加速器的設(shè)計(jì)
2.2 加速器的地址產(chǎn)生
在系統(tǒng)的連續(xù)處理過(guò)程當(dāng)中,加速器沒(méi)有專門(mén)的等待時(shí)間用來(lái)對(duì)數(shù)據(jù)進(jìn)行讀取和存儲(chǔ),這兩類(lèi)運(yùn)算都是并行進(jìn)行的。因此加速器需要具有自動(dòng)選通的讀/寫(xiě)地址電路。對(duì)于一幅512×512圖像來(lái)說(shuō),從偏移值0開(kāi)始計(jì)數(shù),一次加1,以便于從內(nèi)存中讀一組4個(gè)像素值,把偏移地址和基地址加起來(lái)形成前一行的像素地址,把它加上512/4就形成當(dāng)前行的讀地址,再加上1 024/4就形成了下一行的讀地址。對(duì)于寫(xiě)地址來(lái)說(shuō),從偏移值512/4開(kāi)始計(jì)數(shù),一次加1形成每次的寫(xiě)地址。地址發(fā)生器的部分代碼如下:
3 Canny算法加速設(shè)計(jì)
為了使得整個(gè)算法的計(jì)算速度得到提高,使算法既滿足高速要求也不會(huì)耗費(fèi)大量的硬件資源,本文對(duì)高斯濾波和梯度強(qiáng)度計(jì)算兩個(gè)任務(wù)模塊做了加速設(shè)計(jì)組合,流程圖如圖3所示。本文引用地址:http://butianyuan.cn/article/190119.htm
高斯濾波器采用與Sobel加速器相似的設(shè)計(jì)原理,具有流水線的加速功能。圖中RAM是FPGA中自帶的Block RAM塊,其大小配置為僅存儲(chǔ)當(dāng)前被處理圖像的三行像素值,對(duì)于512×512的8位圖像來(lái)說(shuō)RAM應(yīng)配置為512×3×8 b。因?yàn)楦咚篂V波的存儲(chǔ)和Sobel加速器在讀取的時(shí)候都是每4個(gè)像素點(diǎn)即32 b數(shù)據(jù)來(lái)進(jìn)行,所以配置為32位寬的同時(shí)讀寫(xiě)操作的雙口RAM。
梯度運(yùn)算之后,進(jìn)行非極大值的抑制,在非極大值抑制之前需要計(jì)算梯度的方向。梯度方向的計(jì)算分為四個(gè)方向:水平、垂直、45°方向及135°方向,且每個(gè)方向上都包含兩個(gè)45°的范圍。通過(guò)Ex和Ey的比值及正負(fù)可以確定梯度方向落在上面規(guī)定的四個(gè)方向之一。判斷四個(gè)方向的具體如下:
在FPGA中,直接做除法運(yùn)算是很復(fù)雜的過(guò)程;為了減少資源的開(kāi)銷(xiāo),把式(5)~式(8)中的除法變換成乘法,再做比較來(lái)判斷梯度的方向。對(duì)于tan 22.5°和tan 67.5°做如下處理:
非極大值的抑制在系統(tǒng)中通過(guò)選擇器和比較器來(lái)實(shí)現(xiàn)。根據(jù)輸入的梯度值和梯度方向,用非極大值抑制條件(式(5)~(8))和高低閾值條件對(duì)輸出的數(shù)據(jù)進(jìn)行比較選擇,強(qiáng)邊緣點(diǎn)輸出為255,弱邊緣點(diǎn)輸出為0。由于硬件流水線的特點(diǎn),邊界像素的計(jì)算結(jié)果是無(wú)效的,所以將邊界上的行列都置為0。重復(fù)以上步驟,直到整幅圖像掃描完成,最終得出邊緣圖像。
fpga相關(guān)文章:fpga是什么
評(píng)論