本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,特別涉及一種基于FPGA的圖像縮放處理方法及裝置。
背景技術(shù):
隨著對圖像數(shù)據(jù)質(zhì)量要求越來越高,需要對圖像數(shù)據(jù)進(jìn)行縮放處理,目前圖像數(shù)據(jù)縮放領(lǐng)域,縮放的算法多種多樣,但歸根到底都是通過對原圖像數(shù)據(jù)進(jìn)行插值實現(xiàn)的,主要的插值算法有:最近鄰插值算法、雙線性插值算法和立方卷積插值算法?;诓逯邓惴▽崿F(xiàn)的難易程度和最終的縮放效果來綜合考慮,目前圖像數(shù)據(jù)縮放大多數(shù)采用的是雙線性插值算法。
在利用FPGA(Field-Programmable Gate Array,現(xiàn)場可編程門陣列)通過雙線性插值算法進(jìn)行圖像數(shù)據(jù)縮放時,目前需要用外部存儲器,如SDRAM(Synchronous Dynamic Random Access Memory,同步動態(tài)隨機存儲器),這樣一方面增加了硬件成本,增加布線難度,另一方面,需要從外部存儲器中讀取數(shù)據(jù),增加FPGA控制邏輯,降低FPGA邏輯速度,從而降低數(shù)據(jù)讀取速度,影響圖像數(shù)據(jù)縮放效率,即圖像數(shù)據(jù)縮放效率低等。
技術(shù)實現(xiàn)要素:
基于此,有必要針對增加成本以及縮放效率低的問題,提供一種減小成本且提高縮放效率的基于FPGA的圖像縮放處理方法及裝置。
一種基于FPGA的圖像縮放處理方法,包括如下步驟:
獲取原圖像數(shù)據(jù),并以預(yù)設(shè)放入速度將所述原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存;
以與所述預(yù)設(shè)放入速度對應(yīng)的讀取速度從所述內(nèi)部緩存中讀取原圖像數(shù)據(jù),并根據(jù)插值算法以及讀取的原圖像數(shù)據(jù),進(jìn)行插值計算,獲得圖像插值數(shù)據(jù);
根據(jù)所述圖像插值數(shù)據(jù),獲得縮放后的圖像數(shù)據(jù)。
一種基于FPGA的圖像縮放處理裝置,包括:
存放模塊,用于獲取原圖像數(shù)據(jù),并以預(yù)設(shè)放入速度將所述原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存;
圖像插值數(shù)據(jù)獲取模塊,用于以與所述預(yù)設(shè)放入速度對應(yīng)的讀取速度從所述內(nèi)部緩存中讀取原圖像數(shù)據(jù),并根據(jù)插值算法以及讀取的原圖像數(shù)據(jù),進(jìn)行插值計算,獲得圖像插值數(shù)據(jù);
縮放后的圖像數(shù)據(jù)獲取模塊,用于根據(jù)所述圖像插值數(shù)據(jù),獲得縮放后的圖像數(shù)據(jù)。
上述基于FPGA的圖像縮放處理方法及裝置,獲取原圖像數(shù)據(jù),并以預(yù)設(shè)放入速度將原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存,以與預(yù)設(shè)放入速度對應(yīng)的讀取速度從內(nèi)部緩存中讀取原圖像數(shù)據(jù),并根據(jù)插值算法以及讀取的原圖像數(shù)據(jù),進(jìn)行插值計算,獲得圖像插值數(shù)據(jù),根據(jù)圖像插值數(shù)據(jù),獲得縮放后的圖像數(shù)據(jù)。由于將原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存中緩存,無需利用外部存儲器來存儲,減少硬件成本,且后續(xù)讀取原圖像數(shù)據(jù)時可從FPGA內(nèi)部緩存中進(jìn)行讀取,無需再從外部存儲器中讀取,加快數(shù)據(jù)讀取速度,從而可提高整體圖像縮放效率。另外,以與預(yù)設(shè)放入速度對應(yīng)的讀取速度從內(nèi)部緩存中讀取原圖像數(shù)據(jù),即以合理地讀取速度對原圖像數(shù)據(jù)進(jìn)行讀取,可確保讀取的速度避免由于讀取速度太慢導(dǎo)致數(shù)據(jù)丟失,提高縮放處理效率。
附圖說明
圖1為一實施例的基于FPGA的圖像縮放處理方法的流程圖;
圖2為另一實施例的基于FPGA的圖像縮放處理方法的流程圖;
圖3為雙線性插值原理圖;
圖4為FPGA的組成結(jié)構(gòu)示意圖;
圖5為一實施例的基于FPGA的圖像縮放處理方法裝置的模塊示意圖;
圖6為另一實施例的基于FPGA的圖像縮放處理方法裝置的模塊示意圖。
具體實施方式
請參閱圖1,提供一種實施例的基于FPGA的圖像縮放處理方法,包括如下步驟:
S110:獲取原圖像數(shù)據(jù),并以預(yù)設(shè)放入速度將原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存。
原圖像是指待處理圖像,在本實施例中,是對圖像進(jìn)行縮放處理,也就是說原圖像為待縮放圖像,由于圖像是由像素點組成,從而,原圖像數(shù)據(jù)是指原圖像像素點值,在需要對原圖像進(jìn)行縮放處理時,首先需要獲取原圖像數(shù)據(jù),即獲取原圖像的像素點值。在本實施例中,通過FPGA實現(xiàn)圖像縮放處理,為了提高FPGA處理速度,F(xiàn)PGA將原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存中,無需利用外部存儲器進(jìn)行存儲,減小成本,后續(xù)在進(jìn)行讀取時,直接從FPGA內(nèi)部緩存中讀取,無需從外部存儲器中讀取,提高讀取速遞,從而提高后續(xù)對圖像縮放處理效率。另外,在緩存控制邏輯匯總,為了實現(xiàn)用FPGA內(nèi)部緩存來緩存數(shù)據(jù)并且數(shù)據(jù)不會丟失,必須精確從FPGA內(nèi)部緩存中讀取數(shù)據(jù)的讀取速度,速度太慢會導(dǎo)致數(shù)據(jù)丟失,速度太快會加大FPGA實現(xiàn)的難度,造成不必要的資源來那個費,從而為了后續(xù)需要以合理地讀取速度讀取數(shù)據(jù),以預(yù)設(shè)放入速度將原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存。
S120:以與預(yù)設(shè)放入速度對應(yīng)的讀取速度從內(nèi)部緩存中讀取原圖像數(shù)據(jù),并根據(jù)插值算法以及讀取的原圖像數(shù)據(jù),進(jìn)行插值計算,獲得圖像插值數(shù)據(jù)。
以與預(yù)設(shè)放入速度對應(yīng)的讀取速度進(jìn)行讀取原圖像數(shù)據(jù),也就是說,以合理地速度對原圖像數(shù)據(jù)進(jìn)行讀取,既可確保數(shù)據(jù)不會丟失又可確保讀取速度。在獲得讀取的原圖像數(shù)據(jù)后,根據(jù)插值算法進(jìn)行插值計算,獲得圖像插值數(shù)據(jù)。
S130:根據(jù)圖像插值數(shù)據(jù),獲得縮放后的圖像數(shù)據(jù)。
在對圖像進(jìn)行縮放時,實際上是對圖像的插值處理,插值算法有多種,通過插值算法對原圖像數(shù)據(jù)進(jìn)行插值處理獲得圖像插值數(shù)據(jù)后,也就可獲得對原圖像數(shù)據(jù)進(jìn)行縮放后的圖像數(shù)據(jù)。
上述基于FPGA的圖像縮放處理方法,獲取原圖像數(shù)據(jù),并以預(yù)設(shè)放入速度將原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存,以與預(yù)設(shè)放入速度對應(yīng)的讀取速度從內(nèi)部緩存中讀取原圖像數(shù)據(jù),并根據(jù)插值算法以及讀取的原圖像數(shù)據(jù),進(jìn)行插值計算,獲得圖像插值數(shù)據(jù),根據(jù)圖像插值數(shù)據(jù),獲得縮放后的圖像數(shù)據(jù)。由于將原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存中緩存,無需利用外部存儲器來存儲,減少硬件成本,且后續(xù)讀取原圖像數(shù)據(jù)時可從FPGA內(nèi)部緩存中進(jìn)行讀取,無需再從外部存儲器中讀取,加快數(shù)據(jù)讀取速度,從而可提高整體圖像縮放效率。另外,以與預(yù)設(shè)放入速度對應(yīng)的讀取速度從內(nèi)部緩存中讀取原圖像數(shù)據(jù),即以合理地讀取速度對原圖像數(shù)據(jù)進(jìn)行讀取,既可確保讀取的速度避免由于讀取速度太慢導(dǎo)致數(shù)據(jù)丟失,提高縮放處理效率,又可避免由于讀取速度太快加大實現(xiàn)難度造成資源浪費的問題。
請參閱圖2,在其中一個實施例中,F(xiàn)PGA內(nèi)部緩存包括第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存,且第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存分別只存儲單位行圖像數(shù)據(jù)。
在本實施例中,獲取原圖像數(shù)據(jù),并將原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存的步驟包括:
S211:獲取原圖像數(shù)據(jù)。以單位行為步長以及預(yù)設(shè)行順序方向,將原圖像數(shù)據(jù)的單位行圖像數(shù)據(jù)放入第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存中空閑的緩存。
其中,預(yù)設(shè)行順序方向包括從最小行至最大行的行順序方向或從最大行至最小行的行順序方向。具體地,在本實施例中,采用最小行至最大行的順序方向。由于圖像的大小由行和例大小共同決定,圖像的最小行為圖像數(shù)據(jù)的原點對應(yīng)的行,最大行為圖像數(shù)據(jù)的最大坐標(biāo)點對應(yīng)的行。比如,原圖像數(shù)據(jù)大小為M*N,M行N列大小的圖像,最小行即為原圖像的第一行,最大行即為原圖像的第M行。原圖像數(shù)據(jù)包括多行圖像數(shù)據(jù),例如,M*N大小的原圖像數(shù)據(jù),其包括M行圖像數(shù)據(jù),以單位行為步長以及預(yù)設(shè)行順序方向,將原圖像數(shù)據(jù)的單位行圖像數(shù)據(jù)放入第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存中空閑的緩存,也就是實現(xiàn)將原圖像數(shù)據(jù)按照單位行步長將單位行圖像數(shù)據(jù)放入FPGA內(nèi)部緩存中。
在本實施例中,以與預(yù)設(shè)放入速度對應(yīng)的讀取速度從內(nèi)部緩存中讀取原圖像數(shù)據(jù),并根據(jù)插值算法對讀取的原圖像數(shù)據(jù)進(jìn)行插值計算,獲得圖像數(shù)據(jù)插值數(shù)據(jù)的步驟包括:
S221:當(dāng)?shù)谝粌?nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存均存儲有的單位行圖像數(shù)據(jù)時,以讀取速度從FPGA內(nèi)部緩存中讀取存儲時間較長的前兩個單位行圖像數(shù)據(jù),并將存儲時間最長的單位行圖像數(shù)據(jù)從FPGA內(nèi)部緩存中刪除。
S222:根據(jù)插值算法以及讀取的存儲時間較長的前兩個單位行圖像數(shù)據(jù),進(jìn)行插值計算,獲得初始圖像插值數(shù)據(jù)。
S223:判斷原圖像數(shù)據(jù)是否放入完畢。
若否,返回以單位行為步長以及預(yù)設(shè)行順序方向?qū)⒃瓐D像數(shù)據(jù)放入第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存中空閑的緩存的步驟。
若是,則執(zhí)行以下步驟:
S224:讀取FPGA內(nèi)部緩存中剩余的兩個單位行圖像數(shù)據(jù),根據(jù)插值算法以及讀取的FPGA內(nèi)部緩存中剩余的兩個單位行圖像數(shù)據(jù),進(jìn)行插值計算,獲得剩余圖像數(shù)據(jù)插值數(shù)據(jù),圖像數(shù)據(jù)插值數(shù)據(jù)為剩余圖像數(shù)據(jù)插值數(shù)據(jù)和各初始圖像插值數(shù)據(jù)。
具體地,單位行為單行,由于圖像可表示為像素點值的矩陣,從而可以行列大小表示圖像的大小,行數(shù)據(jù)表示圖像矩陣中的行像素點值。原圖像數(shù)據(jù)包括多行圖像數(shù)據(jù),行數(shù)由原圖像數(shù)據(jù)的大小決定,例如,原圖像數(shù)據(jù)的大小為M*N,即有M行的圖像數(shù)據(jù)和N列圖像數(shù)據(jù)。在對原圖像數(shù)據(jù)進(jìn)行插值計算時,為了提高處理速度,將原圖像數(shù)據(jù)以單位行為步長存放到FPGA內(nèi)部緩存中,F(xiàn)PGA內(nèi)部緩存包括第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存,每單位行圖像數(shù)據(jù)放入到對應(yīng)的單個內(nèi)部緩存中。
例如,初始時,第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存均為空閑,空閑是指緩存中沒有存放任何數(shù)據(jù),將原圖像的第一行的圖像數(shù)據(jù)開始輸入的時候存入到第一內(nèi)部緩存,第二行的圖像數(shù)據(jù)開始輸入的時候存入第二內(nèi)部緩存,第三行的圖像數(shù)據(jù)輸入的時候存入到第三內(nèi)部緩存,由于第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存分別只存儲單個單位行圖像數(shù)據(jù),此時,F(xiàn)PGA不再接收圖像數(shù)據(jù)存儲,以讀取速度從內(nèi)部緩存中讀取存儲時間較長的前兩個單位行圖像數(shù)據(jù)(即第一行的圖像數(shù)據(jù)和第二行的圖像數(shù)據(jù)),并將存儲時間最長的單位行圖像數(shù)據(jù)(即第一行的圖像數(shù)據(jù))從FPGA內(nèi)部緩存中刪除,并且根據(jù)插值算法,第一行的圖像數(shù)據(jù)和第二行的圖像數(shù)據(jù),進(jìn)行插值計算,獲得第一行的圖像數(shù)據(jù)和第二行的圖像數(shù)據(jù)對應(yīng)的初始圖像插值數(shù)據(jù),此時,由于第一行的圖像數(shù)據(jù)從FPGA內(nèi)部緩存中刪除了,即第一內(nèi)部緩存空閑了,若原圖像數(shù)據(jù)還未放入完畢,則返回以單位行為步長將圖像數(shù)據(jù)放入第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存中空閑的緩存的步驟繼續(xù)存放原圖像數(shù)據(jù),即將第四行的圖像數(shù)據(jù)放入到第一內(nèi)部緩存中,此時,上述FPGA內(nèi)部緩存中第二內(nèi)部緩存和第三內(nèi)部緩存中的數(shù)據(jù)存儲時間較長,即將第二行的圖像數(shù)據(jù)和第三行的圖像數(shù)據(jù)讀取,并第二行的圖像數(shù)據(jù)從FPGA內(nèi)部緩存中刪除,并且根據(jù)插值算法以及讀取的第二行的圖像數(shù)據(jù)和第三行的圖像數(shù)據(jù),進(jìn)行插值計算,獲得第二行的圖像數(shù)據(jù)和第三行的圖像數(shù)據(jù)對應(yīng)的初始圖像插值數(shù)據(jù)。此時,由于第二行的圖像數(shù)據(jù)已刪除,第二內(nèi)部緩存是空閑的,第一內(nèi)部緩存存儲了第四行的圖像數(shù)據(jù),第三緩存存儲了第三行的圖像數(shù)據(jù),若原圖像數(shù)據(jù)還未放入完畢,則返回以單位行為步長將圖像數(shù)據(jù)放入第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存中空閑的緩存的步驟繼續(xù)存放原圖像數(shù)據(jù),即將第五行的圖像數(shù)據(jù)放入到第二內(nèi)部緩存中,輪循,直到原圖像數(shù)據(jù)放入完畢,此時,F(xiàn)PGA內(nèi)部緩存中還有存儲時間較晚的兩行的圖像數(shù)據(jù)未被刪除,也未被讀取,即讀取FPGA中未讀取的兩個單位行圖像數(shù)據(jù),根據(jù)插值算法以及讀取的FPGA中未讀取的兩個單位行圖像數(shù)據(jù),進(jìn)行插值計算,獲得剩余圖像數(shù)據(jù)插值數(shù)據(jù),圖像數(shù)據(jù)插值數(shù)據(jù)為剩余圖像數(shù)據(jù)插值數(shù)據(jù)和各初始圖像插值數(shù)據(jù)。
為了避免FPGA從外部存儲器中讀取原圖像數(shù)據(jù),提高讀取效率,將原圖像數(shù)據(jù)存儲在FPGA內(nèi)部緩存中,以便后續(xù)快速讀取,由于FPGA內(nèi)部緩存的存儲空間不大,每個內(nèi)部緩存僅可存儲單位行圖像數(shù)據(jù)(本實施例中為單行),為了避免空間不足帶來的影響,通過上述輪循環(huán)的方式進(jìn)行插值計算,實現(xiàn)圖像縮放處理,即在每個內(nèi)部緩存中存儲單行的圖像數(shù)據(jù),每計算一次插值計算后刪除一行存儲時間最長的圖像數(shù)據(jù),以給出空閑的緩存空間,以便下一行的圖像數(shù)據(jù)存放,這樣無需等到所有原圖像數(shù)據(jù)都存放完畢后再進(jìn)行插值計算,提高插值計算效率,從而提高圖像縮放效率。
在其中一個實施例中,上述以與預(yù)設(shè)放入速度對應(yīng)的讀取速度從內(nèi)部緩存中讀取原圖像數(shù)據(jù)之前,還包括步驟:
獲取原圖像數(shù)據(jù)的初始大小以及原圖像數(shù)據(jù)縮放后的預(yù)設(shè)目標(biāo)大小,并根據(jù)預(yù)設(shè)放入速度、原圖像數(shù)據(jù)的初始大小以及預(yù)設(shè)目標(biāo)大小,獲取從FPGA內(nèi)部緩存中讀取原圖像數(shù)據(jù)的讀取速度。
在緩存控制邏輯中,為了實現(xiàn)FPGA內(nèi)部緩存來緩存數(shù)據(jù)并且數(shù)據(jù)不會丟失,必須要精確計算從FPGA內(nèi)部緩存中讀取數(shù)據(jù)的讀取速度,速度太慢會導(dǎo)致數(shù)據(jù)的丟失,速度太快會加大FPGA實現(xiàn)的難度,造成不必要的資源浪費。以640x1136分辨率(原圖像數(shù)據(jù)的初始大小)的原圖像放大成720x1280分辨率(預(yù)設(shè)目標(biāo)大小)的圖像為例,假設(shè)原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存的預(yù)設(shè)放入速度為S1,則獲取讀取速度S2的公式為:
S2=(720/640)*(1280/1136)*S1。
在其中一個實施例中,插值算法包括雙線性插值算法,F(xiàn)PGA內(nèi)部緩存為FPGA內(nèi)部SRAM,第一內(nèi)部緩存為第一內(nèi)部SRAM、第二內(nèi)部緩存為第二內(nèi)部SRAM以及第三內(nèi)部緩存為第三內(nèi)部SRAM。
考慮到插值算法實現(xiàn)的難易度以及縮放效果,采用雙線性插值算法對圖像進(jìn)行縮放處理。在雙線性差值的算法中,新生成的圖片的元素是由原始圖片位置在新元素周圍四個相鄰的點通過加權(quán)平均計算出來。這樣就可以保留新生成的元素與周圍元素的相關(guān)性,使得圖像在邊沿有較好的縮放效果。如圖3所示,像素點A,B,C,D為原圖像元素(原圖像像素點),E為新圖像元素(縮放后的圖像像素點),元素值都為8位位寬的數(shù)據(jù)。則新圖像元素E的像素點值E(x+dx,y+dy)的計算方法為:
E(x+dx,y+dy)=(1-dx)(1-dy)A(x,y)+dx(1-dy)B(x,y)+(1-dx)dyC(x,y)+dxdyA(x,y)。
從上面的公式可以看出,用FPGA來計算新圖像元素需要8個乘法器,兩個減法器,3個加法器。其中,A(x,y)為A的坐標(biāo),B(x,y)為B的坐標(biāo),C(x,y)為C的坐標(biāo),D(x,y)為D的坐標(biāo),dx為新圖像元素E與像素A的橫坐標(biāo)距離,dy為新圖像元素E與像素B的縱坐標(biāo)距離。
FPGA內(nèi)部緩存為FPGA內(nèi)部SRAM,SRAM為靜態(tài)隨機存儲器,不需要刷新電路即能保存它內(nèi)部存儲的數(shù)據(jù),可提高整體的工作效率。第一內(nèi)部緩存為第一內(nèi)部SRAM(SRAM1)、第二內(nèi)部緩存為第二內(nèi)部SRAM(SRAM2)以及第三內(nèi)部緩存為第三內(nèi)部SRAM(SRAM3)。每次計算一個插值點的像素值,必須要用到周圍四個點的像素值,F(xiàn)PGA內(nèi)部緩存必須可以緩存三行的圖像數(shù)據(jù),需要采用FPGA本身自帶的3個雙端口SRAM來實現(xiàn)緩存。
FPGA在一個實施例中的組成結(jié)構(gòu)圖如圖4所示,該FPGA包括FPGA邏輯控制模塊、分別與FPGA邏輯控制模塊連接的FPGA內(nèi)部緩以及插值計算模塊,SRAM1、SRAM2以及SRAM3均分別與FPGA邏輯控制模塊連接。在FPGA邏輯控制模塊中包括基于FPGA的圖像縮放處理裝置,該基于FPGA的圖像縮放處理裝置應(yīng)用于基于FPGA的圖像縮放處理方法,即基于FPGA的圖像縮放處理方法通過FPGA邏輯控制模塊執(zhí)行。
通過FPGA邏輯控制模塊控制FPGA內(nèi)部緩存的數(shù)據(jù)存放以及讀出數(shù)據(jù)送入插值計算模塊進(jìn)行插值計算。因為FPGA內(nèi)部緩存中每種緩存僅可以存三行數(shù)據(jù),因此需要在循環(huán)存儲處理,當(dāng)?shù)谝恍袌D像數(shù)據(jù)開始輸入的時候存入SRAM1,第二行圖像數(shù)據(jù)開始輸入的時候存入SRAM2,第三行圖像數(shù)據(jù)開始輸入的時候存入SRAM3,對第一行圖像數(shù)據(jù)和第二行圖像數(shù)據(jù)進(jìn)行讀取進(jìn)行插值計算,刪除第一行圖像數(shù)據(jù)后,SRAM1空閑,第四行圖像數(shù)據(jù)開始輸入的時候存入SRAM1,輪循。
同時,當(dāng)?shù)谌袌D像數(shù)據(jù)開始存入SRAM3時,從SRAM1和SRAM2中取出圖像數(shù)據(jù)進(jìn)行插值計算新的插值數(shù)據(jù)。當(dāng)?shù)谒男袌D像數(shù)據(jù)存入SRAM1的時候,從SRAM2和SRAM3取出圖像數(shù)據(jù)計算新的插值數(shù)據(jù)。當(dāng)?shù)谖逍袌D像數(shù)據(jù)存入SRAM2的時候,從SRAM3和SRAM1取出圖像數(shù)據(jù)計算新的插值數(shù)據(jù)。當(dāng)?shù)诹袌D像數(shù)據(jù)開始存入SRAM3時,從SRAM1和SRAM2中取出數(shù)據(jù)計算新的插值數(shù)據(jù),輪循,直到圖像數(shù)據(jù)讀取完畢。通過上述輪循過程,就可以實現(xiàn)用3個雙端口的SRAM來緩存三行圖像數(shù)據(jù),達(dá)到實現(xiàn)雙線性插值計算的目的。
在其中一個實施例中,上述根據(jù)插值算法以及讀取的原圖像數(shù)據(jù),進(jìn)行插值計算,獲得圖像插值數(shù)據(jù)之前,還包括步驟:
將每個讀取的原圖像數(shù)據(jù)的位寬調(diào)整為預(yù)設(shè)的位寬,更新讀取的原圖像數(shù)據(jù)。
其中,預(yù)設(shè)的位寬為8位。通過上述公式在進(jìn)行插值運算時,可以看到雙線性插值算法中,需要用到乘法器,乘法器的位寬將會很大程度上決定改算法的放大效果。但是乘法器的位寬會受到FPGA的運算速度和資源的制約,因為必須要選擇一個合適的乘法器的位寬,使它既能達(dá)到放大效果又可以滿足FPGA的運行速度。
由于像素點之間的距離為1,結(jié)合雙線性插值算法原理圖可以看出,dx、dy、(1-dx)以及(1-dy)都是介于0到1之間的小數(shù)。因為FPGA不支持小數(shù)運算,所以必須將它轉(zhuǎn)化為整數(shù)運算。原始元素值A(chǔ)(x,y),B(x,y),C(x,y),D(x,y)是固定為8位位寬的數(shù)據(jù),所以把小數(shù)轉(zhuǎn)化為整數(shù)的位寬將會決定乘法器的位寬,也會決定算法的放大效果。在歷史試驗中,測試了將小數(shù)轉(zhuǎn)化為4位,6位,8位,10位位寬的乘法器的放大效果,實踐表明乘法器的位寬越大,放大的效果越好,但是放大效果與位寬寬度并不是線性遞增的關(guān)系,當(dāng)位寬的寬度在10位以上(包括10位),放大效果沒有顯著的改善,并且10位位寬的乘法器會造成FPGA整體運算效率的降低,因此,在綜合FPGA資源、放大效果和FPGA運算速度三大因素之后,采用8位位寬的乘法器放大效果可以達(dá)到要求,從而,根據(jù)插值算法以及讀取的原圖像數(shù)據(jù),進(jìn)行插值計算,獲得圖像插值數(shù)據(jù)之前,將每個讀取的原圖像數(shù)據(jù)的位寬調(diào)整為8位,更新讀取的原圖像數(shù)據(jù)。
請參閱圖5,一種基于FPGA的圖像縮放處理裝置,其特征在于,包括:
存放模塊510,用于獲取原圖像數(shù)據(jù),并以預(yù)設(shè)放入速度將原圖像數(shù)據(jù)放入FPGA內(nèi)部緩存。
圖像插值數(shù)據(jù)獲取模塊520,用于以與預(yù)設(shè)放入速度對應(yīng)的讀取速度從內(nèi)部緩存中讀取原圖像數(shù)據(jù),并根據(jù)插值算法以及讀取的原圖像數(shù)據(jù),進(jìn)行插值計算,獲得圖像插值數(shù)據(jù)。
縮放后的圖像數(shù)據(jù)獲取模塊530,用于根據(jù)圖像插值數(shù)據(jù),獲得縮放后的圖像數(shù)據(jù)。
請參閱圖6,在其中一個實施例中,F(xiàn)PGA內(nèi)部緩存包括第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存,且第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存分別只存儲單位行圖像數(shù)據(jù)。
存放模塊包括:
獲取模塊611,用于獲取原圖像數(shù)據(jù)。
存儲模塊612,用于以單位行為步長以及預(yù)設(shè)行順序方向,將原圖像數(shù)據(jù)的單位行圖像數(shù)據(jù)放入第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存中空閑的緩存。
其中,預(yù)設(shè)行順序方向包括從最小行至最大行的行順序方向或從最大行至最小行的行順序方向。具體地,在本實施例中,采用最小行至最大行的順序方向。
圖像插值數(shù)據(jù)獲取模塊包括:
讀取模塊621,用于當(dāng)?shù)谝粌?nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存均存儲有單位行圖像數(shù)據(jù)時,以讀取速度從FPGA內(nèi)部緩存中讀取存儲時間較長的前兩個單位行圖像數(shù)據(jù),并將存儲時間最長的單位行圖像數(shù)據(jù)從FPGA內(nèi)部緩存中刪除。
初始圖像插值數(shù)據(jù)獲取模塊622,用于根據(jù)插值算法以及讀取的存儲時間較長的前兩個單位行圖像數(shù)據(jù),進(jìn)行插值計算,獲得初始圖像插值數(shù)據(jù)。
判斷模塊623,用于判斷原圖像數(shù)據(jù)是否放入完畢。
返回模塊624,用于判斷模塊的判斷結(jié)果為否時,返回存儲模塊以單位行為步長以及預(yù)設(shè)行順序方向,將原圖像數(shù)據(jù)的單位行圖像數(shù)據(jù)放入第一內(nèi)部緩存、第二內(nèi)部緩存以及第三內(nèi)部緩存中空閑的緩存。
剩余圖像數(shù)據(jù)插值獲取模塊625,用于判斷模塊的判斷結(jié)果為是時,讀取FPGA中剩余的兩個單位行圖像數(shù)據(jù),根據(jù)插值算法以及讀取的FPGA中剩余的兩個單位行圖像數(shù)據(jù),進(jìn)行插值計算,獲得剩余圖像數(shù)據(jù)插值數(shù)據(jù),圖像數(shù)據(jù)插值數(shù)據(jù)為剩余圖像數(shù)據(jù)插值數(shù)據(jù)和各初始圖像插值數(shù)據(jù)。
在其中一個實施例中,上述基于FPGA的圖像縮放處理裝置,還包括速度獲取模塊。
速度獲取模塊,用于圖像插值數(shù)據(jù)獲取模塊以與預(yù)設(shè)放入速度對應(yīng)的讀取速度從內(nèi)部緩存中讀取原圖像數(shù)據(jù)之前獲取原圖像數(shù)據(jù)的初始大小以及原圖像數(shù)據(jù)縮放后的預(yù)設(shè)目標(biāo)大小,并根據(jù)預(yù)設(shè)放入速度、原圖像數(shù)據(jù)的初始大小以及預(yù)設(shè)目標(biāo)大小,獲取從FPGA內(nèi)部緩存中讀取原圖像數(shù)據(jù)的讀取速度。
在其中一個實施例中,插值算法包括雙線性插值算法,F(xiàn)PGA內(nèi)部緩存為FPGA內(nèi)部SRAM,第一內(nèi)部緩存為第一內(nèi)部SRAM、第二內(nèi)部緩存為第二內(nèi)部SRAM以及第三內(nèi)部緩存為第三內(nèi)部SRAM。
在其中一個實施例中,上述基于FPGA的圖像縮放處理裝置還包括更新模塊。
更新模塊,用于圖像插值數(shù)據(jù)獲取模塊根據(jù)插值算法以及讀取的原圖像數(shù)據(jù),進(jìn)行插值計算,獲得圖像插值數(shù)據(jù)之前將每個讀取的原圖像數(shù)據(jù)的位寬調(diào)整為預(yù)設(shè)的位寬,更新讀取的原圖像數(shù)據(jù)。
上述基于FPGA的圖像縮放處理方法裝置為實現(xiàn)上述基于FPGA的圖像縮放處理方法的裝置,技術(shù)特征一一對應(yīng),在此不再贅述。
以上實施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡潔,未對上述實施例中的各個技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說明書記載的范圍。
以上實施例僅表達(dá)了本發(fā)明的幾種實施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對本發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。