基于DSP的圖像旋轉(zhuǎn)算法數(shù)據(jù)調(diào)度策略
目前,已經(jīng)有很多有效降低計(jì)算量的圖像旋轉(zhuǎn)算法,基于圖像線性存儲(chǔ)結(jié)構(gòu)的旋轉(zhuǎn)方法[1]就是其中之一。然而,在DSP平臺(tái)上,有限的高速存儲(chǔ)資源限制了這些算法效率的直接發(fā)揮,需要針對(duì)算法及DSP平臺(tái)的性能結(jié)構(gòu)特點(diǎn)進(jìn)行高效的數(shù)據(jù)調(diào)度。對(duì)于圖像旋轉(zhuǎn)問題而言,數(shù)據(jù)調(diào)度還需要克服由于存在大量非連續(xù)圖像像素地址訪問而嚴(yán)重影響DSP數(shù)據(jù)存取及CPU效率發(fā)揮的問題。這是圖像旋轉(zhuǎn)本身的特殊性,在其他圖像處理技術(shù)中是不存在的。本文主要討論如何利用TI公司TMS320DM642芯片的資源特點(diǎn),進(jìn)行高效圖像旋轉(zhuǎn)的大規(guī)模數(shù)據(jù)調(diào)度,從而實(shí)現(xiàn)適用于大圖像的DSP實(shí)時(shí)圖像旋轉(zhuǎn)。
1 基于圖像線性存儲(chǔ)結(jié)構(gòu)的旋轉(zhuǎn)方法介紹
目前,圖像旋轉(zhuǎn)大多采用基于視口映射的處理。視口是指屏幕上的顯示區(qū)域范圍,方法是先計(jì)算出旋轉(zhuǎn)后視口圖像像素在源圖像中的坐標(biāo)地址值,再依據(jù)該地址在源圖像中對(duì)應(yīng)讀取像素值,最后利用讀取的像素值進(jìn)行插值,得到最終旋轉(zhuǎn)后視口圖像。實(shí)際上,由于存在對(duì)稱性,一幅圖像任意角度的旋轉(zhuǎn)可分解為一次90或180或270的旋轉(zhuǎn),再加上一次45以內(nèi)的旋轉(zhuǎn)。
傳統(tǒng)的圖像旋轉(zhuǎn)一般通過(guò)矩陣乘法實(shí)現(xiàn):
其中,α為旋轉(zhuǎn)角度。
本文選用的張克黛[1]等人提出的基于圖像線性存儲(chǔ)結(jié)構(gòu)的旋轉(zhuǎn)方法是一種理論上運(yùn)算效率較高的方法。下面具體介紹。
由于圖像是線性存儲(chǔ)的,各個(gè)像素點(diǎn)之間的相對(duì)位置關(guān)系確定。如圖1(a)所示,圖像旋轉(zhuǎn)前,任意像素點(diǎn)P(x,y)和P1(x1,y1)、P2(x2,y2)及A(xA,yA)在幾何上是矩形的四頂點(diǎn)關(guān)系。由于旋轉(zhuǎn)變換是線性變換,如圖1(b)所示,圖像旋轉(zhuǎn)后,各個(gè)像素點(diǎn)之間的相對(duì)位置關(guān)系不發(fā)生變化,
所以,對(duì)圖像作旋轉(zhuǎn)變換,只需對(duì)第一行和第一列的像素用式(1)作矩陣乘法運(yùn)算,對(duì)除第一行和第一列以外的像素,用式(2)進(jìn)行簡(jiǎn)單的加減運(yùn)算即可。這樣避免了對(duì)整幅圖像的每個(gè)像素作矩陣乘法運(yùn)算,可節(jié)省5~6倍的CPU周期。
另外,對(duì)于旋轉(zhuǎn)計(jì)算后非整數(shù)像素地址的插值,本文采用雙線性插值法,基本能夠滿足對(duì)圖像質(zhì)量的要求。
2 圖像旋轉(zhuǎn)的DSP結(jié)構(gòu)優(yōu)化
2.1 TMS320DM642結(jié)構(gòu)特點(diǎn)
該芯片的結(jié)構(gòu)如圖2所示,它基于C64x內(nèi)核,采用TI的第二代高級(jí)超長(zhǎng)指令字結(jié)構(gòu),可在600MHz時(shí)鐘頻率下工作,每個(gè)指令周期可并行8條32位指令,可達(dá)到4 800MIPS的峰值計(jì)算速度。DM642具有64個(gè)增強(qiáng)DMA(EDMA)通道,可進(jìn)行高效的一維及二維數(shù)據(jù)傳輸,二維數(shù)據(jù)傳輸可用于一個(gè)矩形圖像數(shù)據(jù)塊的高速搬移。
DM642的存儲(chǔ)空間由片內(nèi)和片外兩級(jí)存儲(chǔ)體系構(gòu)成,其中片內(nèi)存儲(chǔ)器又分為L(zhǎng)1和L2兩層。第一層L1為CPU Cache,其訪問速度與CPU的速度相匹配,包括相互獨(dú)立的L1P(16KB)和L1D(16KB);第二層L2(256KB)具有靈活的RAM/Cache分配。片外存儲(chǔ)器具備32位的訪問地址,通過(guò)EDMA控制器和EMIF外部存儲(chǔ)器接口進(jìn)行數(shù)據(jù)訪問。其中,片內(nèi)存儲(chǔ)器和片外存儲(chǔ)器在訪問速度方面存在很大差異。
此外,作為多媒體處理專用芯片,DM642具有用于視頻數(shù)據(jù)I/O的專用接口,易于實(shí)現(xiàn)視頻信號(hào)的顯示輸出。
2.2 旋轉(zhuǎn)算法的結(jié)構(gòu)優(yōu)化
針對(duì)DM642性能結(jié)構(gòu)特點(diǎn)的算法結(jié)構(gòu)優(yōu)化,其目的是使上述大圖像旋轉(zhuǎn)快速算法的效率能夠在DSP平臺(tái)上得到充分發(fā)揮,其核心思想是合理優(yōu)化存儲(chǔ)空間分配和數(shù)據(jù)傳輸流,使CPU能連續(xù)不斷地處理圖像數(shù)據(jù),消除處理過(guò)程中的等待延遲。
由DSP的結(jié)構(gòu)特點(diǎn)可知,只有在數(shù)據(jù)和程序均位于片內(nèi)存儲(chǔ)器當(dāng)中的條件下,DSP的效率才能得到最大化的發(fā)揮。在大圖像旋轉(zhuǎn)算法中,由于涉及的圖像數(shù)據(jù)量遠(yuǎn)大于DSP的片內(nèi)存儲(chǔ)器容量,源圖像和最終視口圖像等數(shù)據(jù)必須被存放在片外存儲(chǔ)器中。在這種情況下,為了保證DSP CPU高速處理能力的發(fā)揮,必須優(yōu)化數(shù)據(jù)流,將源圖像分塊,依次搬移至片內(nèi)處理,并設(shè)法保證CPU當(dāng)前要處理的圖像數(shù)據(jù)塊已經(jīng)事先在片內(nèi)存儲(chǔ)器中準(zhǔn)備好了。因此在算法整體優(yōu)化結(jié)構(gòu)上采用Ping-Pong雙緩沖技術(shù),利用EDMA與CPU并行工作來(lái)隱藏圖像數(shù)據(jù)塊在片內(nèi)和片外之間的傳輸時(shí)間,使CPU能連續(xù)不斷地處理數(shù)據(jù),中間不會(huì)出現(xiàn)空閑等待。
Ping-Pong雙緩沖是一種同時(shí)利用兩個(gè)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)傳輸技術(shù),它將SRAM分成兩大塊,一塊用于存儲(chǔ)源圖像塊,另一塊用于存儲(chǔ)旋轉(zhuǎn)后的圖像塊;每一個(gè)存儲(chǔ)塊又分為兩個(gè)區(qū)(Ping區(qū)和Pong區(qū)),輪流用于圖像塊傳輸和處理。其具體并行工作流程如圖3所示。
圖3 Ping-Pong雙緩沖處理技術(shù)
至于如何在Ping-Pong雙緩沖數(shù)據(jù)傳輸機(jī)制中設(shè)計(jì)和安排傳輸?shù)膱D像數(shù)據(jù)塊,則必須考慮針對(duì)圖像旋轉(zhuǎn)本身的特點(diǎn),設(shè)計(jì)出具體的適用于旋轉(zhuǎn)算法的DSP數(shù)據(jù)調(diào)度策略。
3 旋轉(zhuǎn)算法的DSP數(shù)據(jù)調(diào)度策略
旋轉(zhuǎn)算法的數(shù)據(jù)調(diào)度目的是使算法能夠按照一定的規(guī)則,將源圖像數(shù)據(jù)有規(guī)律地分塊,并按次序分別傳輸?shù)紻SP片內(nèi)存儲(chǔ)器中,完成計(jì)算后,形成視口圖像塊,再將視口圖像塊按同樣的順序進(jìn)行排列,形成旋轉(zhuǎn)后的視口圖像。整個(gè)過(guò)程要求調(diào)入和調(diào)出的圖像數(shù)據(jù)均是規(guī)則分塊的,并且調(diào)入的源圖像塊中應(yīng)該包含計(jì)算視口圖像塊的過(guò)程中所需要的全部像素?cái)?shù)據(jù),尤其需要解決其中的大量非連續(xù)圖像像素地址訪問問題,這樣才能正確地發(fā)揮DSP EDMA和Ping-Pong雙緩沖技術(shù)的性能。
3.1 非連續(xù)像素地址訪問
Ping-Pong雙緩沖數(shù)據(jù)傳輸機(jī)制中圖像數(shù)據(jù)塊在片內(nèi)、片外存儲(chǔ)空間的傳輸,主要依靠EDMA設(shè)置,在后臺(tái)進(jìn)行二維數(shù)據(jù)傳輸。Ping-Pong雙緩沖數(shù)據(jù)傳輸機(jī)制下的EDMA的數(shù)據(jù)傳輸要求待傳輸?shù)膱D像塊具有統(tǒng)一的規(guī)律,即每次旋轉(zhuǎn)的圖像數(shù)據(jù)的傳輸過(guò)程不應(yīng)該因旋轉(zhuǎn)角度的變化而改變。
但是,旋轉(zhuǎn)后的視口圖像像素的地址排列與其在源圖像中的不同,不再具有連續(xù)的地址變化特征,并且視口圖像的像素地址在源圖像中的排列關(guān)系隨旋轉(zhuǎn)角度的變化而變化,沒有固定的規(guī)律,給Ping-Pong雙緩沖數(shù)據(jù)傳輸機(jī)制下的EDMA的數(shù)據(jù)傳輸操作帶來(lái)很大困難,從而導(dǎo)致對(duì)源圖像塊的大量非連續(xù)像素地址訪問的問題。該問題是圖像旋轉(zhuǎn)本身所特有的,如果得不到很好解決,Ping-Pong雙緩沖數(shù)據(jù)傳輸機(jī)制就無(wú)法發(fā)揮作用,旋轉(zhuǎn)算法的實(shí)際DSP執(zhí)行效率也就得不到真正的提高。因此,實(shí)現(xiàn)滿足調(diào)入/調(diào)出圖像塊關(guān)系的數(shù)據(jù)調(diào)度就成為實(shí)現(xiàn)高效圖像旋轉(zhuǎn)的關(guān)鍵。
3.2 旋轉(zhuǎn)算法的DSP數(shù)據(jù)調(diào)度策略
本文提出的基于視口圖像塊覆蓋的源圖像數(shù)據(jù)分塊及其調(diào)度策略的思想是實(shí)現(xiàn)源圖像及視口圖像按塊處理,源圖像塊的范圍覆蓋視口圖像塊,且易于在源圖像塊內(nèi)進(jìn)行像素?cái)?shù)據(jù)訪問尋址,使源圖像塊內(nèi)像素地址變化具有連續(xù)的特征,以充分發(fā)揮出DSP EDMA的效率,并滿足Ping-Pong數(shù)據(jù)流程的規(guī)律性。旋轉(zhuǎn)算法DSP數(shù)據(jù)調(diào)度策略示意圖分別如圖4和圖5所示,其要點(diǎn)如下(以視口順時(shí)針旋轉(zhuǎn)為例):
(1)視口輸出圖像分塊
如圖4(a)所示,將視口圖像分成矩形塊,作為每次旋轉(zhuǎn)運(yùn)算的基本單位,圖像塊之間依次排列。
(2)源圖像塊的取法
如圖4(b)所示,每個(gè)源圖像塊對(duì)應(yīng)一個(gè)視口圖像塊,源圖像塊的尺寸取為視口圖像塊尺寸的4倍(如視口塊尺寸為2020像素,則源圖像塊就取為4040像素),且源圖像塊的上邊框中點(diǎn)與相應(yīng)的視口圖像塊旋轉(zhuǎn)后的左上角頂點(diǎn)對(duì)應(yīng),這樣可保證順時(shí)針旋轉(zhuǎn)角度在0~90之間的任意情況下,源圖像塊始終覆蓋其對(duì)應(yīng)的旋轉(zhuǎn)后的視口圖像塊。
(3)兩圖像塊頂點(diǎn)地址對(duì)應(yīng)關(guān)系
設(shè)第N個(gè)源圖像塊為fN(x,y),旋轉(zhuǎn)后的視口圖像塊為f′N(x,y),則源圖像塊的頂點(diǎn)局部坐標(biāo)地址值與旋轉(zhuǎn)后視口圖像塊的頂點(diǎn)局部坐標(biāo)地址值之間的對(duì)應(yīng)關(guān)系為:
其中width指源圖像塊的寬度。
視口逆時(shí)針旋轉(zhuǎn)的情況與此類似(如圖5所示)。區(qū)別有以下兩點(diǎn):
①源圖像塊的左邊框中點(diǎn)與相應(yīng)的視口圖像塊旋轉(zhuǎn)后的左上角頂點(diǎn)對(duì)應(yīng);
②源圖像塊的頂點(diǎn)局部坐標(biāo)地址值與視口圖像塊的頂點(diǎn)局部坐標(biāo)地址值之間的對(duì)應(yīng)關(guān)系式應(yīng)為:
其中height指源圖像塊的高度。
(4)圖像塊的調(diào)度
由式(3)或式(4)計(jì)算出將要從源圖像中取出的對(duì)應(yīng)規(guī)則圖像塊的左上角頂點(diǎn)坐標(biāo)(即源圖像塊的起始地址),然后用EDMA的二維數(shù)據(jù)傳輸將其調(diào)入片內(nèi)L2 SRAM中??梢钥闯觯磮D像塊不再隨旋轉(zhuǎn)角度的變化而傾斜,其內(nèi)部像素的排列存在固定規(guī)律,像素地址具有連續(xù)變化的特征,故可使Ping-Pong雙緩沖數(shù)據(jù)傳輸機(jī)制下的EDMA二維數(shù)據(jù)傳輸順利進(jìn)行。
這種基于視口圖像塊覆蓋的旋轉(zhuǎn)算法DSP數(shù)據(jù)調(diào)度策略有效地解決了圖像旋轉(zhuǎn)中大量非連續(xù)像素地址訪問的問題,體現(xiàn)了空間換時(shí)間的思想,通過(guò)充分利用EDMA的高效數(shù)據(jù)傳輸,保證了整個(gè)旋轉(zhuǎn)處理的高速運(yùn)算節(jié)奏。
4 實(shí)驗(yàn)及其結(jié)果
實(shí)驗(yàn)采用自行研制的高分辨率圖像處理平臺(tái),以TMS320DM642芯片為主處理芯片,時(shí)鐘為600MHz,片外為64MB SDRAM。實(shí)驗(yàn)中源圖像通過(guò)調(diào)試JTAG口輸入,旋轉(zhuǎn)后的視口圖像結(jié)果從VPORT口經(jīng)D/A轉(zhuǎn)換后,以VGA信號(hào)輸出。實(shí)驗(yàn)分別實(shí)現(xiàn)兩種尺寸(400400像素和1024768像素)的視口圖像旋轉(zhuǎn),相應(yīng)的源圖像數(shù)據(jù)分別為1024768像素和19201920像素的BMP格式的數(shù)字地圖圖像,采用0.005弧度旋轉(zhuǎn)角度遞增間隔,對(duì)分別采用式(1)的傳統(tǒng)像素逐點(diǎn)矩陣相乘方法、基于圖像線性存儲(chǔ)結(jié)構(gòu)方法以及基于本文數(shù)據(jù)調(diào)度策略的結(jié)構(gòu)優(yōu)化的線性存儲(chǔ)結(jié)構(gòu)方法三種實(shí)現(xiàn)方式進(jìn)行對(duì)比,分別統(tǒng)計(jì)其平均每幀運(yùn)行時(shí)間并轉(zhuǎn)換成幀率,其結(jié)果如表1所示。
從實(shí)驗(yàn)結(jié)果可以看出,基于圖像線性存儲(chǔ)結(jié)構(gòu)的旋轉(zhuǎn)算法比傳統(tǒng)的逐點(diǎn)相乘法的確在運(yùn)算量上有了大幅度削減,因而有效地提高了旋轉(zhuǎn)速度,但其仍然滿足不了實(shí)際大圖像旋轉(zhuǎn)的實(shí)時(shí)性要求。通過(guò)采用本文提出的數(shù)據(jù)調(diào)度策略對(duì)算法結(jié)構(gòu)及數(shù)據(jù)調(diào)度進(jìn)行優(yōu)化后,算法的DSP執(zhí)行效率得到了顯著提高,可以滿足對(duì)DSP大圖像旋轉(zhuǎn)的實(shí)時(shí)性要求。
本文結(jié)合TMS320DM642的性能結(jié)構(gòu)特點(diǎn),針對(duì)圖像旋轉(zhuǎn)算法在DSP平臺(tái)上具體實(shí)現(xiàn)過(guò)程中存在的嚴(yán)重影響DSP CPU效率發(fā)揮的大量非連續(xù)圖像像素地址訪問的問題,提出了切實(shí)有效的基于視口圖像塊覆蓋的DSP數(shù)據(jù)調(diào)度策略;對(duì)算法的結(jié)構(gòu)流程、數(shù)據(jù)調(diào)度等進(jìn)行了優(yōu)化調(diào)整,并在此基礎(chǔ)上,在TI TMS320DM642 DSP上實(shí)現(xiàn)了一種實(shí)時(shí)高質(zhì)量大圖像旋轉(zhuǎn)方案。實(shí)驗(yàn)表明,本文提出的適用于圖像旋轉(zhuǎn)算法的DSP數(shù)據(jù)調(diào)度策略,保證了DSP大圖像旋轉(zhuǎn)的實(shí)時(shí)性,達(dá)到了實(shí)用性要求。
參考文獻(xiàn)
[1] 張克黛,李智.圖像旋轉(zhuǎn)的快速實(shí)現(xiàn)方法研究[J].指揮技術(shù)學(xué)院學(xué)報(bào),1999,(10)2:29-32.
[2] 胡慧之,紀(jì)太成.DSP視頻處理系統(tǒng)的數(shù)據(jù)傳輸優(yōu)化設(shè)計(jì)[J].泰州職業(yè)技術(shù)學(xué)院學(xué)報(bào),2006,(6)3:28-30.
[3] DANIELSSON P E.High-Accuracy Rotation of Images[J].Graphical Models and Image Processing,1992,54(4):340-344.
[4] 曾慶如,畢篤彥,王洪迅.TMS320C64x EDMA的圖像數(shù)據(jù)傳輸優(yōu)化[J].電視技術(shù),2005,(278):66-72.
[5] 李方慧,王飛,何佩琨.TMS320C6000系列DSPs原理與應(yīng)用(第2版)[M].北京:電子工業(yè)出版社,2003.
評(píng)論