双线性插值实现图像放大算法 matlab,FPGA/verilog实现双线性插值图像放大
Verilog實(shí)現(xiàn)基于雙線性插值算法的圖像放大IP設(shè)計(jì)
本文主要介紹一下verilog實(shí)現(xiàn)基于雙線性插值算法的圖像放大IP的實(shí)現(xiàn)思路,最終利用該方法實(shí)現(xiàn)了實(shí)時(shí)的圖像放大處理。關(guān)于雙線性插值的原理,網(wǎng)上有很多講解的特別好的帖子,本文就不再贅述原理部分,而是重點(diǎn)根據(jù)該原理設(shè)計(jì)硬件實(shí)現(xiàn)方案。
背景
隨著各種處理平臺(tái)的計(jì)算能力的逐步提升,人們?cè)诟鱾€(gè)領(lǐng)域?qū)τ谝曨l圖像的清晰度以及分辨率要求越來越高,然而有時(shí)在數(shù)據(jù)源端并不能直接獲得高分辨率的視頻或圖像,這時(shí)候往往希望可以將獲取的視頻或者圖像進(jìn)行放大后在輸出給后端或者直接用于顯示,(1) 比如在紅外領(lǐng)域,由于目前的紅外傳感器的分辨率都比較低,為了得到高分辨率圖像經(jīng)常會(huì)使用圖像放大方法進(jìn)行處理;(2) 在某些視頻圖像處理應(yīng)用中,希望可以將原始圖像的中的部分區(qū)域放大到全幅面輸出,這也需要用到圖像放大處理。
目前在圖像放大算法方面,較為常用的傳統(tǒng)方法包括最鄰近插值、雙線性插值、雙三次插值、多項(xiàng)插值等等,近年來基于深度學(xué)習(xí)/神經(jīng)網(wǎng)絡(luò)的圖像放大方法取得了更好的效果,這些方法在基于PC的平臺(tái)都比較容易實(shí)現(xiàn)。然而對(duì)于硬件應(yīng)用領(lǐng)域(FPGA或IC),仍然是傳統(tǒng)方法所占比重較大,傳統(tǒng)方法中最鄰近插值算法計(jì)算量最小,但是這種方法得到放大圖像中經(jīng)常會(huì)存在很嚴(yán)重的鋸齒,而雙線性插值方法的計(jì)算量稍大一些,但是圖像放大效果也較最鄰近插值提升很多,而對(duì)于雙三次插值、多項(xiàng)插值等算法,效果比較好但是計(jì)算很復(fù)雜,因此本文的重點(diǎn)是基于雙線性插值算法設(shè)計(jì)圖像放大IP,可以應(yīng)用于IC或者FPGA實(shí)現(xiàn)實(shí)時(shí)的視頻放大處理,在文章的最后,介紹了本IP消耗的資源以及功能仿真結(jié)果。
本文設(shè)計(jì)的圖像放大IP的規(guī)格
輸出分辨率:1920*1080,實(shí)現(xiàn)實(shí)時(shí)處理
輸入分辨率:可調(diào)節(jié)(處理時(shí)鐘頻率與源數(shù)據(jù)像素時(shí)鐘頻率的比例限制了放大的倍數(shù))
視頻放大原理:基于雙線性插值方法
所需存儲(chǔ)資源:需要存儲(chǔ)三行原始圖像數(shù)據(jù),無需緩存整幀圖像
硬件方案架構(gòu)圖
為了更加清晰的表示本IP的整體架構(gòu),利用vivado軟件將本ip的源代碼進(jìn)行了綜合,IP頂層架構(gòu)圖如下所示:
子模塊功能介紹
input_buffer模塊:
接收前端輸入的原始視頻數(shù)據(jù)(clk是源數(shù)據(jù)像素時(shí)鐘信號(hào)),然后完成跨時(shí)鐘域處理,以clk_proc(時(shí)鐘頻率高于clk信號(hào))高速處理時(shí)鐘信號(hào)輸出數(shù)據(jù)到buffer_ctrl模塊中。該模塊的主要功能就是實(shí)現(xiàn)跨時(shí)鐘域處理,當(dāng)buffer_ctrl模塊準(zhǔn)備好(ready信號(hào)拉高)接收數(shù)據(jù)時(shí),將數(shù)據(jù)以clk_proc時(shí)鐘發(fā)送到buffer_ctrl模塊。
buffer_ctrl模塊:
實(shí)現(xiàn)源數(shù)據(jù)的緩存,以便于后續(xù)進(jìn)行雙線性插值計(jì)算過程使用。該模塊主要是實(shí)現(xiàn)數(shù)據(jù)緩存,以及實(shí)現(xiàn)數(shù)據(jù)緩存的控制。當(dāng)該模塊準(zhǔn)備好接收數(shù)據(jù)時(shí),接收前端input_buffer模塊發(fā)送過來的數(shù)據(jù)并將數(shù)據(jù)進(jìn)行緩存,同時(shí)根據(jù)緩存的數(shù)據(jù)情況,控制后端的scaler_ip模塊開始工作,當(dāng)后端的scaler_ip模塊開始工作時(shí),從本模塊中讀取緩存的數(shù)據(jù)用于計(jì)算放大圖像。
scaler_ip模塊:
該模塊的功能就是利用雙線性插值方法實(shí)現(xiàn)圖像插值放大,當(dāng)前端buffer_ctrl模塊使能scaler_en_o信號(hào)后,本模塊開始工作,從前端buffer_ctrl模塊中讀取緩存的數(shù)據(jù),然后計(jì)算每個(gè)數(shù)據(jù)對(duì)應(yīng)的權(quán)重系數(shù),最終利用四個(gè)像素點(diǎn)的原始灰度值以及每個(gè)像素點(diǎn)對(duì)應(yīng)的權(quán)重系數(shù),利用雙線性插值算法計(jì)算得到最終的插值放大圖像,并將插值結(jié)果輸出。
功能仿真結(jié)果
功能仿真波形:
---------------------
作者:bysg312
來源:CSDN
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的双线性插值实现图像放大算法 matlab,FPGA/verilog实现双线性插值图像放大的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象编程是什么意思
- 下一篇: 【老生谈算法】matlab实现图像放大算