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