徐克強(qiáng)等
摘 要: 為了在DSP平臺(tái)實(shí)現(xiàn)細(xì)胞圖像快速分割,詳細(xì)分析Canny算子原理,結(jié)合TI DSP TMS320C6678處理器特性,實(shí)現(xiàn)了算法移植。針對(duì)與外部存儲(chǔ)器圖像數(shù)據(jù)交互,改變以往對(duì)圖像逐灰度值進(jìn)行訪問(wèn)的方式, 設(shè)計(jì)了矢量化數(shù)據(jù)打包方法處理高斯濾波來(lái)提高并行運(yùn)算。且在梯度計(jì)算、閾值計(jì)算過(guò)程中,采用寬存儲(chǔ)器訪問(wèn)方法提高讀寫外部存儲(chǔ)器效率。結(jié)果表明設(shè)計(jì)的優(yōu)化方法在不改變分割效果前提下改善了算子速度,可為工程人員在DSP平臺(tái)進(jìn)行算法移植與優(yōu)化提供借鑒。
關(guān)鍵詞: 圖像處理; Canny算子; DSP優(yōu)化; 圖像快速分割
中圖分類號(hào): TN919?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2014)06?0008?04
0 引 言
Canny算子屬于圖像處理和計(jì)算機(jī)視覺(jué)中的重要研究領(lǐng)域——邊緣檢測(cè)問(wèn)題。邊緣檢測(cè)對(duì)后續(xù)的圖像分析和識(shí)別意義重大。例如,在鏡檢細(xì)胞圖像識(shí)別中,邊緣檢測(cè)就是要把從采集到的圖像中各種有形成分準(zhǔn)確分離出來(lái),進(jìn)入后端進(jìn)行特征建模與識(shí)別,邊緣檢測(cè)是整個(gè)系統(tǒng)的關(guān)鍵和核心,承上啟下,好的檢測(cè)效果是系統(tǒng)實(shí)現(xiàn)前提[1],快速檢測(cè)是智能系統(tǒng)的內(nèi)在要求。
John F.Canny將邊緣檢測(cè)問(wèn)題歸結(jié)為檢測(cè)圖像梯度函數(shù)的極大值問(wèn)題,提出了邊緣檢測(cè)最優(yōu)算法的三個(gè)評(píng)價(jià)準(zhǔn)則,并基于該準(zhǔn)則開(kāi)發(fā)了一種多級(jí)邊緣檢測(cè)算法。目前,Canny算子在生物醫(yī)學(xué),智能監(jiān)控,航空航天等領(lǐng)域應(yīng)用廣泛,并由學(xué)者和工程人員不斷加以改進(jìn)和優(yōu)化。例如韓慧妍等針對(duì)高斯濾波器的方差以及滯后閾值的選擇需要人工指定的問(wèn)題,將形態(tài)學(xué)平滑和Otsu(最大類間方差法)方法引入Canny算子[2]。洪運(yùn)國(guó)針對(duì)間斷的邊緣問(wèn)題,提出矩量保持法來(lái)求取最優(yōu)閾值等[3]。
眾多Canny的改進(jìn)都體現(xiàn)在算法思想上,并在Windows操作系統(tǒng)和通用PC中得到廣泛應(yīng)用,然而,在嵌入式平臺(tái)如DSP加以應(yīng)用時(shí),很少細(xì)致深入地研究實(shí)用有效的優(yōu)化方法使得Canny算子在DSP平臺(tái)高效率運(yùn)行。例如金澤安在其學(xué)位論文中,詳盡設(shè)計(jì)了基于DSP的紅細(xì)胞圖像處理系統(tǒng),但在圖像處理算法性能優(yōu)化方面只做了粗略的優(yōu)化方法介紹[4]。通過(guò)詳細(xì)分析Canny算子原理基礎(chǔ)上,結(jié)合DSP特性,將矢量化打包數(shù)據(jù)處理在高斯濾波過(guò)程加以應(yīng)用,提高運(yùn)算并行性,并在邊緣計(jì)算過(guò)程中,靈活地使用對(duì)齊和非對(duì)齊的寬存儲(chǔ)器訪問(wèn),推導(dǎo)出梯度和方向的等價(jià)計(jì)算公式,四鄰域、八鄰域的等價(jià)的連續(xù)點(diǎn)四領(lǐng)域、八鄰域模板。
1 Canny算法實(shí)現(xiàn)步驟
經(jīng)典著名的Canny準(zhǔn)則是指:
(1) 完全性。對(duì)邊緣檢測(cè)的錯(cuò)誤率盡可能低。
(2) 定位性。檢測(cè)結(jié)果和實(shí)際情況盡可能接近。
(3) 最小性。圖像中的邊緣應(yīng)該只被檢測(cè)一次[5]。
基于邊緣檢測(cè)效果的三準(zhǔn)則,結(jié)合原始Canny算子及改進(jìn)思想,實(shí)現(xiàn)了顯微細(xì)胞圖像Canny分割,算法思想和步驟如下描述:
Step 1:用二維高斯濾波模板進(jìn)行卷積以消除雜點(diǎn),采用的模板計(jì)算公式如下:
濾波過(guò)程即將原輸入圖像與高斯模板進(jìn)行卷積,濾波長(zhǎng)度依據(jù)參數(shù)sigma而定,用公式表示如下:
Step 2:計(jì)算差分圖像。一般采用2×2鄰域范圍,原圖中每一點(diǎn)水平方向和垂直方向的差分計(jì)算公式如下:
式中IG為差分圖像的輸入,即二維高斯濾波后的結(jié)果;Δx為水平方向差分;Δy為垂直方向差分。
Step 3:計(jì)算弧度和梯度,公式如下:
Step 4:對(duì)梯度幅值進(jìn)行非最大值抑制。若某個(gè)像素的灰度值與其梯度方向上前后兩個(gè)像素的灰度值相比不是最大的,那個(gè)這個(gè)像素置為255(白點(diǎn)),即不是邊緣 。
Step 5:使用累計(jì)直方圖計(jì)算兩個(gè)閾值。凡是大于高閾值的一定作為邊緣,像素點(diǎn)置0;凡是小于低閾值的一定不是邊緣,像素點(diǎn)置255;若檢測(cè)結(jié)果位于兩者之間,檢測(cè)其鄰接像素中超過(guò)高閾值的邊緣像素:存在則為邊緣點(diǎn),否則非邊緣點(diǎn)[6]。
以上步驟結(jié)束,由輸入的原圖像得到一副二值邊緣圖。
2 Canny算子的DSP優(yōu)化
在DSP平臺(tái)編程實(shí)現(xiàn)和優(yōu)化Canny算子時(shí),需要根據(jù)特定處理器的特點(diǎn)來(lái)展開(kāi),主要參考數(shù)據(jù)總線寬度,核內(nèi)功能單元、寄存器等。
2.1 TMS320C6678特性和優(yōu)化概述
TMS320C6678在單芯片上集成8顆1.25 GHz C66X核,支持定點(diǎn)運(yùn)算,字寬一般為16位;支持浮點(diǎn)運(yùn)算,字寬可為32位、40位、48位、64位。每個(gè)核具有8個(gè)功能單元(.M1,.L1,.D1,.S1.,M2,.L2,.D2,.S2),2個(gè)寄存器組(A,B兩組64個(gè)寄存器)和2條數(shù)據(jù)通路。每個(gè)C66X核的.M單元在每個(gè)時(shí)鐘周期內(nèi)能夠執(zhí)行以下定點(diǎn)操作:4個(gè)32×32 b乘法,16個(gè)16×16 b乘法,4個(gè)16×32 b乘法,8個(gè)8×8 b乘法, 4個(gè)16×16 b乘法和加減運(yùn)算。.L和.S單元支持64 b操作數(shù)據(jù),如此可以容納多算術(shù)、邏輯和數(shù)據(jù)打包指令并行處理。還可以通過(guò)長(zhǎng)型操作數(shù),最長(zhǎng)可達(dá)128位,完成雙倍數(shù)據(jù)的轉(zhuǎn)換[7]。
在DSP平臺(tái)上,數(shù)據(jù)傳輸?shù)脑O(shè)計(jì)是圖像系統(tǒng)的關(guān)鍵環(huán)節(jié),CPU處理任務(wù)時(shí)的速度很大程度都受到外部存儲(chǔ)器的限制[8]。TMS320C6678片內(nèi)存儲(chǔ)器含寄存器、Cache、L2、共享存儲(chǔ)器,訪問(wèn)速度快,然而容量卻非常有限,當(dāng)圖像數(shù)據(jù)量較大時(shí),無(wú)法將待分割的整幅圖像和一些中間結(jié)果置于片內(nèi)進(jìn)行處理。例如對(duì)800×600、24位BMP圖像數(shù)據(jù)處理,其大小為1.37 MB,考慮到C6678片內(nèi)存儲(chǔ)器的大小,分割的圖像數(shù)據(jù)和中間結(jié)果分布在外圍DDR,因此,在任務(wù)處理過(guò)程中,CPU直接訪問(wèn)外部存儲(chǔ)器接口的情況下,頻繁與外部存儲(chǔ)器發(fā)生數(shù)據(jù)交互大大影響程序的執(zhí)行效率。
針對(duì)以上問(wèn)題,實(shí)現(xiàn)了基于矢量化打包數(shù)據(jù)處理實(shí)現(xiàn)預(yù)處理過(guò)程(高斯濾波)提高算法的并行能力,在分割過(guò)程(邊緣計(jì)算)中靈活運(yùn)用對(duì)齊和非對(duì)齊的寬存儲(chǔ)器訪問(wèn)提高存儲(chǔ)器讀/寫效率,另外,還參考的一般的優(yōu)化方法,如避免跳轉(zhuǎn),展開(kāi)不必要的循環(huán)等。
2.2 矢量化打包數(shù)據(jù)處理高斯濾波
高斯濾波是分割處理一個(gè)重要過(guò)程,在實(shí)現(xiàn)過(guò)程中,將輸入圖像與高斯模板進(jìn)行卷積,橫向?yàn)V波時(shí)的單個(gè)像素點(diǎn)的濾波的濾波結(jié)果示意圖如圖1所示,縱向過(guò)程與之類似。
采用乘累加容易實(shí)現(xiàn)高斯濾波,其偽代碼如下(橫向?yàn)槔?/p>
采用以上方式實(shí)現(xiàn)的高斯濾波,代碼包含三重循環(huán),代碼前后相關(guān)性大,不利于編譯器優(yōu)化,每計(jì)算出單點(diǎn)的濾波結(jié)果,需要訪存N(N為濾波器長(zhǎng)度)。針對(duì)該過(guò)程,采用矢量化的打包數(shù)據(jù)處理對(duì)高斯濾波進(jìn)行優(yōu)化,其根本思想是利用TMS320C6678在一個(gè)時(shí)鐘周期內(nèi)能夠執(zhí)行多個(gè)乘法運(yùn)算,從而將濾波展開(kāi)成多操作并行的代碼結(jié)構(gòu),另外,利用高斯模板的對(duì)稱結(jié)構(gòu),將兩次乘法運(yùn)算優(yōu)化為一次加法和乘法。具體實(shí)現(xiàn)步驟如下描述:
(1) 為更有效地讀取數(shù)據(jù),讀取和存儲(chǔ)必須向量化。待處理數(shù)據(jù)最好在內(nèi)存空間連續(xù)存儲(chǔ),若不連續(xù),采用額外的數(shù)據(jù)打包操作,準(zhǔn)備好數(shù)據(jù)。
(2) 在讀取數(shù)據(jù)時(shí),需要將一次并行處理的數(shù)據(jù)全部讀入,這一步需要采用寬存儲(chǔ)器對(duì)連續(xù)數(shù)據(jù)進(jìn)行訪問(wèn),具體寬度根據(jù)需要并行的操作、處理器并行操作的能力、處理器單次最大訪問(wèn)寬度而定。
最后,將運(yùn)算相關(guān)的指令合并成intrinsic函數(shù)[9},以充分利用C66x的特性。intrinsics函數(shù)直接調(diào)用某些匯編語(yǔ)句,其前綴以下劃線表明,和普通函數(shù)調(diào)用方法相同。如_mpy2實(shí)現(xiàn)將輸入的兩個(gè)操作數(shù)的高低16位相乘,_swap4將操作數(shù)高低半字中的每一對(duì)字節(jié)分別做大端終結(jié)交換,_dopt2實(shí)現(xiàn)低16位乘積和高16位乘積相加[10]。實(shí)現(xiàn)的矢量化打包數(shù)據(jù)處理高斯濾波偽采用以上方法,分解了濾波長(zhǎng)度帶來(lái)的第三重循環(huán),多次調(diào)用內(nèi)聯(lián)函數(shù),執(zhí)行效率高,充分利用C66x在一個(gè)周期內(nèi),完成多個(gè)16×16的乘法運(yùn)算的性能,單像素結(jié)果需要進(jìn)行7次乘累加的操作,可在一個(gè)周期內(nèi)并行完成,以上優(yōu)化思想和代碼結(jié)構(gòu)在DSP平臺(tái)運(yùn)行,極具優(yōu)勢(shì)。另外,進(jìn)行縱向?yàn)V波處理,由于輸入圖像在內(nèi)存一般采用按行優(yōu)先存儲(chǔ),需要采用額外的數(shù)據(jù)打包處理,其他過(guò)程類似。
2.3 寬存儲(chǔ)器訪問(wèn)計(jì)算邊緣
寬長(zhǎng)度存儲(chǔ)器訪問(wèn)是指充分利用C6x系列DSP一次讀取32 位數(shù)的特性,并利用一個(gè)指令周期能讀取多個(gè)數(shù)據(jù)的特點(diǎn)在DSP處理過(guò)程中,盡可能多的將所需短字長(zhǎng)操作數(shù)讀入,如一次讀入2×32 b,4×16 b,甚至8×8 b等,可成倍減少與外部存儲(chǔ)器發(fā)生交互,是DSP優(yōu)化過(guò)程中一個(gè)重要的優(yōu)化手段。在實(shí)現(xiàn)C6678 DSP平臺(tái)的Canny算法時(shí),不止是在高斯濾波的處理過(guò)程中,計(jì)算圖像梯度信息,進(jìn)行非最大抑制等過(guò)程中也同樣采用寬長(zhǎng)度存儲(chǔ)器訪問(wèn),脫離傳統(tǒng)的按單位像素交互圖像數(shù)據(jù)的思維和編程方式,結(jié)合具體芯片的處理性能和應(yīng)用程序要求實(shí)現(xiàn)和優(yōu)化Canny算子,例如C6678甚至支持128 b的超長(zhǎng)數(shù)據(jù),在訪問(wèn)和保存中間圖像結(jié)果時(shí),具體采用的數(shù)據(jù)位寬需要結(jié)合系統(tǒng)對(duì)精度的要求,當(dāng)用16位來(lái)表示梯度信息,即C語(yǔ)言中的short類型,采用64 b寬存儲(chǔ)器訪問(wèn),便推導(dǎo)出梯度計(jì)算公式的等價(jià)公式如下:
采用寬存儲(chǔ)器非對(duì)齊數(shù)據(jù)訪問(wèn)可以從DSP內(nèi)存中任意起始地址開(kāi)始讀取和存儲(chǔ)2 B,4 B,8 B的數(shù)據(jù),分別使用(&)_mem2_(const),(&)_mem4_(const),(&)_mem8_(const)函數(shù)。如此,便可以將圖像處理領(lǐng)域中頻繁使用的四鄰域模板進(jìn)行推導(dǎo),處理具體任務(wù)時(shí),將四領(lǐng)域模板升級(jí)為連續(xù)四點(diǎn)四鄰區(qū),連續(xù)八點(diǎn)四鄰區(qū),其示意圖如圖3所示。
圖3(a)為四鄰域模板示意圖, (b)和(c)為分別采用4 B和8 B訪問(wèn)時(shí),鄰域模板示意圖。對(duì)(b)和(c)圖像進(jìn)行處理的前提和依據(jù)是:連續(xù)4點(diǎn)的四鄰域在內(nèi)存存儲(chǔ)中也是連續(xù)的(不包含邊界),連續(xù)訪問(wèn)的4點(diǎn),在物理位置上其相關(guān)鄰點(diǎn)也連續(xù)。如此,可成倍節(jié)省外部存儲(chǔ)器訪問(wèn)操作時(shí)間。訪問(wèn)(a)的四鄰域點(diǎn),需要4次仿存,采用推導(dǎo)出等價(jià)模板后,處理連續(xù)四點(diǎn)和八點(diǎn)只需4次訪問(wèn)。在Canny邊緣計(jì)算過(guò)程中,需對(duì)輸入逐點(diǎn)遍歷,如計(jì)算梯度時(shí)遍歷整幅圖像灰度,非最大抑制時(shí)遍歷梯度和方向等,以上等價(jià)模板思想,當(dāng)需要處理圖像的八鄰域或在其他比較規(guī)整的膨脹和腐蝕模板同樣適應(yīng)。
3 硬件仿真結(jié)果
硬件平臺(tái)采用TMS320C6678LE評(píng)估板,開(kāi)發(fā)軟件采用CCS V5.3,量化位數(shù)16位,對(duì)一副800×600的顯微細(xì)胞圖像進(jìn)行處理,分割效果良好,見(jiàn)圖4。此外,在優(yōu)化前后,分別對(duì)Canny算法步驟進(jìn)行分析和測(cè)試,耗時(shí)統(tǒng)計(jì)采用TSCL和TSCH寄存器,結(jié)果見(jiàn)表1,所統(tǒng)計(jì)的結(jié)果均是在勾選相同的編譯器優(yōu)化選項(xiàng)后的比對(duì)。
4 結(jié) 語(yǔ)
在DSP平臺(tái)中,采用以上思想進(jìn)行優(yōu)化后,對(duì)同樣的圖像進(jìn)行處理,相對(duì)于原算法,性能可以提高近3倍,在差分圖像計(jì)算時(shí),效果極為明顯。在DSP系統(tǒng)設(shè)計(jì)中,頻繁地直接外部存儲(chǔ)器接口訪問(wèn),是系統(tǒng)性能提升的瓶頸,優(yōu)化結(jié)果表明,采用數(shù)據(jù)打包處理和寬存儲(chǔ)器訪問(wèn)方式能在一定程度上解決該問(wèn)題,雖不能實(shí)現(xiàn)數(shù)量級(jí)的優(yōu)化,但研究的優(yōu)化方法同樣可以在工程中作為輔助的優(yōu)化策略,并且具有實(shí)際優(yōu)化效果。
圖4 分割前后的顯微細(xì)胞圖像
表1 耗時(shí)測(cè)試仿真結(jié)果 cycle
參考文獻(xiàn)
[1] 梁光明.體液細(xì)胞圖像有形成分智能識(shí)別關(guān)鍵技術(shù)研究[D].長(zhǎng)沙:國(guó)防科技大學(xué),2008.
[2] 韓慧妍,韓燮.形態(tài)學(xué)和Otsu方法在Canny邊緣檢測(cè)算子中的應(yīng)用[J].微電子學(xué)與計(jì)算機(jī),2012,29(2):156?159.
[3] 洪運(yùn)國(guó).基于改進(jìn)Canny 算子和神經(jīng)網(wǎng)絡(luò)的人體行為識(shí)別模型[J].計(jì)算機(jī)工程與應(yīng)用,2013,49(8):202?205.
[4] 金澤安.基于DSP紅細(xì)胞圖像處理技術(shù)[D].南京:南京理工大學(xué),2009.
[5] 孫興華,郭麗.數(shù)字圖像處理:編程框架、理論分析、實(shí)例應(yīng)用和源碼實(shí)現(xiàn)[M].北京:機(jī)械工業(yè)出版社,2012.
[6] 左飛,萬(wàn)晉森,劉航.數(shù)字圖像處理原理與實(shí)踐:基于Visual C++開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2011.
[7] Texas Instruments. TMS320C66x DSP CPU and instruction set reference guide [M]. USA: TI, 2010.
[8] QURESHI Shehrzad. Embedded image processing on the TMS320C6000? DSP: examples in code composer studio and MATLAB [M]. [S.l.]: Springer Verlag, 2005.
[9] Texas Instruments. TMS320C6000系列DSP編程工具與指南[M].田黎育,何佩琨,朱夢(mèng)宇,譯.北京:清華大學(xué)出版社,2006.
[10] Texas Instruments. Multicore fixed and floating?point digital signal processor TMS320C6678 data manual [M]. USA: TI, 2013.
針對(duì)以上問(wèn)題,實(shí)現(xiàn)了基于矢量化打包數(shù)據(jù)處理實(shí)現(xiàn)預(yù)處理過(guò)程(高斯濾波)提高算法的并行能力,在分割過(guò)程(邊緣計(jì)算)中靈活運(yùn)用對(duì)齊和非對(duì)齊的寬存儲(chǔ)器訪問(wèn)提高存儲(chǔ)器讀/寫效率,另外,還參考的一般的優(yōu)化方法,如避免跳轉(zhuǎn),展開(kāi)不必要的循環(huán)等。
2.2 矢量化打包數(shù)據(jù)處理高斯濾波
高斯濾波是分割處理一個(gè)重要過(guò)程,在實(shí)現(xiàn)過(guò)程中,將輸入圖像與高斯模板進(jìn)行卷積,橫向?yàn)V波時(shí)的單個(gè)像素點(diǎn)的濾波的濾波結(jié)果示意圖如圖1所示,縱向過(guò)程與之類似。
采用乘累加容易實(shí)現(xiàn)高斯濾波,其偽代碼如下(橫向?yàn)槔?/p>
采用以上方式實(shí)現(xiàn)的高斯濾波,代碼包含三重循環(huán),代碼前后相關(guān)性大,不利于編譯器優(yōu)化,每計(jì)算出單點(diǎn)的濾波結(jié)果,需要訪存N(N為濾波器長(zhǎng)度)。針對(duì)該過(guò)程,采用矢量化的打包數(shù)據(jù)處理對(duì)高斯濾波進(jìn)行優(yōu)化,其根本思想是利用TMS320C6678在一個(gè)時(shí)鐘周期內(nèi)能夠執(zhí)行多個(gè)乘法運(yùn)算,從而將濾波展開(kāi)成多操作并行的代碼結(jié)構(gòu),另外,利用高斯模板的對(duì)稱結(jié)構(gòu),將兩次乘法運(yùn)算優(yōu)化為一次加法和乘法。具體實(shí)現(xiàn)步驟如下描述:
(1) 為更有效地讀取數(shù)據(jù),讀取和存儲(chǔ)必須向量化。待處理數(shù)據(jù)最好在內(nèi)存空間連續(xù)存儲(chǔ),若不連續(xù),采用額外的數(shù)據(jù)打包操作,準(zhǔn)備好數(shù)據(jù)。
(2) 在讀取數(shù)據(jù)時(shí),需要將一次并行處理的數(shù)據(jù)全部讀入,這一步需要采用寬存儲(chǔ)器對(duì)連續(xù)數(shù)據(jù)進(jìn)行訪問(wèn),具體寬度根據(jù)需要并行的操作、處理器并行操作的能力、處理器單次最大訪問(wèn)寬度而定。
最后,將運(yùn)算相關(guān)的指令合并成intrinsic函數(shù)[9},以充分利用C66x的特性。intrinsics函數(shù)直接調(diào)用某些匯編語(yǔ)句,其前綴以下劃線表明,和普通函數(shù)調(diào)用方法相同。如_mpy2實(shí)現(xiàn)將輸入的兩個(gè)操作數(shù)的高低16位相乘,_swap4將操作數(shù)高低半字中的每一對(duì)字節(jié)分別做大端終結(jié)交換,_dopt2實(shí)現(xiàn)低16位乘積和高16位乘積相加[10]。實(shí)現(xiàn)的矢量化打包數(shù)據(jù)處理高斯濾波偽采用以上方法,分解了濾波長(zhǎng)度帶來(lái)的第三重循環(huán),多次調(diào)用內(nèi)聯(lián)函數(shù),執(zhí)行效率高,充分利用C66x在一個(gè)周期內(nèi),完成多個(gè)16×16的乘法運(yùn)算的性能,單像素結(jié)果需要進(jìn)行7次乘累加的操作,可在一個(gè)周期內(nèi)并行完成,以上優(yōu)化思想和代碼結(jié)構(gòu)在DSP平臺(tái)運(yùn)行,極具優(yōu)勢(shì)。另外,進(jìn)行縱向?yàn)V波處理,由于輸入圖像在內(nèi)存一般采用按行優(yōu)先存儲(chǔ),需要采用額外的數(shù)據(jù)打包處理,其他過(guò)程類似。
2.3 寬存儲(chǔ)器訪問(wèn)計(jì)算邊緣
寬長(zhǎng)度存儲(chǔ)器訪問(wèn)是指充分利用C6x系列DSP一次讀取32 位數(shù)的特性,并利用一個(gè)指令周期能讀取多個(gè)數(shù)據(jù)的特點(diǎn)在DSP處理過(guò)程中,盡可能多的將所需短字長(zhǎng)操作數(shù)讀入,如一次讀入2×32 b,4×16 b,甚至8×8 b等,可成倍減少與外部存儲(chǔ)器發(fā)生交互,是DSP優(yōu)化過(guò)程中一個(gè)重要的優(yōu)化手段。在實(shí)現(xiàn)C6678 DSP平臺(tái)的Canny算法時(shí),不止是在高斯濾波的處理過(guò)程中,計(jì)算圖像梯度信息,進(jìn)行非最大抑制等過(guò)程中也同樣采用寬長(zhǎng)度存儲(chǔ)器訪問(wèn),脫離傳統(tǒng)的按單位像素交互圖像數(shù)據(jù)的思維和編程方式,結(jié)合具體芯片的處理性能和應(yīng)用程序要求實(shí)現(xiàn)和優(yōu)化Canny算子,例如C6678甚至支持128 b的超長(zhǎng)數(shù)據(jù),在訪問(wèn)和保存中間圖像結(jié)果時(shí),具體采用的數(shù)據(jù)位寬需要結(jié)合系統(tǒng)對(duì)精度的要求,當(dāng)用16位來(lái)表示梯度信息,即C語(yǔ)言中的short類型,采用64 b寬存儲(chǔ)器訪問(wèn),便推導(dǎo)出梯度計(jì)算公式的等價(jià)公式如下:
采用寬存儲(chǔ)器非對(duì)齊數(shù)據(jù)訪問(wèn)可以從DSP內(nèi)存中任意起始地址開(kāi)始讀取和存儲(chǔ)2 B,4 B,8 B的數(shù)據(jù),分別使用(&)_mem2_(const),(&)_mem4_(const),(&)_mem8_(const)函數(shù)。如此,便可以將圖像處理領(lǐng)域中頻繁使用的四鄰域模板進(jìn)行推導(dǎo),處理具體任務(wù)時(shí),將四領(lǐng)域模板升級(jí)為連續(xù)四點(diǎn)四鄰區(qū),連續(xù)八點(diǎn)四鄰區(qū),其示意圖如圖3所示。
圖3(a)為四鄰域模板示意圖, (b)和(c)為分別采用4 B和8 B訪問(wèn)時(shí),鄰域模板示意圖。對(duì)(b)和(c)圖像進(jìn)行處理的前提和依據(jù)是:連續(xù)4點(diǎn)的四鄰域在內(nèi)存存儲(chǔ)中也是連續(xù)的(不包含邊界),連續(xù)訪問(wèn)的4點(diǎn),在物理位置上其相關(guān)鄰點(diǎn)也連續(xù)。如此,可成倍節(jié)省外部存儲(chǔ)器訪問(wèn)操作時(shí)間。訪問(wèn)(a)的四鄰域點(diǎn),需要4次仿存,采用推導(dǎo)出等價(jià)模板后,處理連續(xù)四點(diǎn)和八點(diǎn)只需4次訪問(wèn)。在Canny邊緣計(jì)算過(guò)程中,需對(duì)輸入逐點(diǎn)遍歷,如計(jì)算梯度時(shí)遍歷整幅圖像灰度,非最大抑制時(shí)遍歷梯度和方向等,以上等價(jià)模板思想,當(dāng)需要處理圖像的八鄰域或在其他比較規(guī)整的膨脹和腐蝕模板同樣適應(yīng)。
3 硬件仿真結(jié)果
硬件平臺(tái)采用TMS320C6678LE評(píng)估板,開(kāi)發(fā)軟件采用CCS V5.3,量化位數(shù)16位,對(duì)一副800×600的顯微細(xì)胞圖像進(jìn)行處理,分割效果良好,見(jiàn)圖4。此外,在優(yōu)化前后,分別對(duì)Canny算法步驟進(jìn)行分析和測(cè)試,耗時(shí)統(tǒng)計(jì)采用TSCL和TSCH寄存器,結(jié)果見(jiàn)表1,所統(tǒng)計(jì)的結(jié)果均是在勾選相同的編譯器優(yōu)化選項(xiàng)后的比對(duì)。
4 結(jié) 語(yǔ)
在DSP平臺(tái)中,采用以上思想進(jìn)行優(yōu)化后,對(duì)同樣的圖像進(jìn)行處理,相對(duì)于原算法,性能可以提高近3倍,在差分圖像計(jì)算時(shí),效果極為明顯。在DSP系統(tǒng)設(shè)計(jì)中,頻繁地直接外部存儲(chǔ)器接口訪問(wèn),是系統(tǒng)性能提升的瓶頸,優(yōu)化結(jié)果表明,采用數(shù)據(jù)打包處理和寬存儲(chǔ)器訪問(wèn)方式能在一定程度上解決該問(wèn)題,雖不能實(shí)現(xiàn)數(shù)量級(jí)的優(yōu)化,但研究的優(yōu)化方法同樣可以在工程中作為輔助的優(yōu)化策略,并且具有實(shí)際優(yōu)化效果。
圖4 分割前后的顯微細(xì)胞圖像
表1 耗時(shí)測(cè)試仿真結(jié)果 cycle
參考文獻(xiàn)
[1] 梁光明.體液細(xì)胞圖像有形成分智能識(shí)別關(guān)鍵技術(shù)研究[D].長(zhǎng)沙:國(guó)防科技大學(xué),2008.
[2] 韓慧妍,韓燮.形態(tài)學(xué)和Otsu方法在Canny邊緣檢測(cè)算子中的應(yīng)用[J].微電子學(xué)與計(jì)算機(jī),2012,29(2):156?159.
[3] 洪運(yùn)國(guó).基于改進(jìn)Canny 算子和神經(jīng)網(wǎng)絡(luò)的人體行為識(shí)別模型[J].計(jì)算機(jī)工程與應(yīng)用,2013,49(8):202?205.
[4] 金澤安.基于DSP紅細(xì)胞圖像處理技術(shù)[D].南京:南京理工大學(xué),2009.
[5] 孫興華,郭麗.數(shù)字圖像處理:編程框架、理論分析、實(shí)例應(yīng)用和源碼實(shí)現(xiàn)[M].北京:機(jī)械工業(yè)出版社,2012.
[6] 左飛,萬(wàn)晉森,劉航.數(shù)字圖像處理原理與實(shí)踐:基于Visual C++開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2011.
[7] Texas Instruments. TMS320C66x DSP CPU and instruction set reference guide [M]. USA: TI, 2010.
[8] QURESHI Shehrzad. Embedded image processing on the TMS320C6000? DSP: examples in code composer studio and MATLAB [M]. [S.l.]: Springer Verlag, 2005.
[9] Texas Instruments. TMS320C6000系列DSP編程工具與指南[M].田黎育,何佩琨,朱夢(mèng)宇,譯.北京:清華大學(xué)出版社,2006.
[10] Texas Instruments. Multicore fixed and floating?point digital signal processor TMS320C6678 data manual [M]. USA: TI, 2013.
針對(duì)以上問(wèn)題,實(shí)現(xiàn)了基于矢量化打包數(shù)據(jù)處理實(shí)現(xiàn)預(yù)處理過(guò)程(高斯濾波)提高算法的并行能力,在分割過(guò)程(邊緣計(jì)算)中靈活運(yùn)用對(duì)齊和非對(duì)齊的寬存儲(chǔ)器訪問(wèn)提高存儲(chǔ)器讀/寫效率,另外,還參考的一般的優(yōu)化方法,如避免跳轉(zhuǎn),展開(kāi)不必要的循環(huán)等。
2.2 矢量化打包數(shù)據(jù)處理高斯濾波
高斯濾波是分割處理一個(gè)重要過(guò)程,在實(shí)現(xiàn)過(guò)程中,將輸入圖像與高斯模板進(jìn)行卷積,橫向?yàn)V波時(shí)的單個(gè)像素點(diǎn)的濾波的濾波結(jié)果示意圖如圖1所示,縱向過(guò)程與之類似。
采用乘累加容易實(shí)現(xiàn)高斯濾波,其偽代碼如下(橫向?yàn)槔?/p>
采用以上方式實(shí)現(xiàn)的高斯濾波,代碼包含三重循環(huán),代碼前后相關(guān)性大,不利于編譯器優(yōu)化,每計(jì)算出單點(diǎn)的濾波結(jié)果,需要訪存N(N為濾波器長(zhǎng)度)。針對(duì)該過(guò)程,采用矢量化的打包數(shù)據(jù)處理對(duì)高斯濾波進(jìn)行優(yōu)化,其根本思想是利用TMS320C6678在一個(gè)時(shí)鐘周期內(nèi)能夠執(zhí)行多個(gè)乘法運(yùn)算,從而將濾波展開(kāi)成多操作并行的代碼結(jié)構(gòu),另外,利用高斯模板的對(duì)稱結(jié)構(gòu),將兩次乘法運(yùn)算優(yōu)化為一次加法和乘法。具體實(shí)現(xiàn)步驟如下描述:
(1) 為更有效地讀取數(shù)據(jù),讀取和存儲(chǔ)必須向量化。待處理數(shù)據(jù)最好在內(nèi)存空間連續(xù)存儲(chǔ),若不連續(xù),采用額外的數(shù)據(jù)打包操作,準(zhǔn)備好數(shù)據(jù)。
(2) 在讀取數(shù)據(jù)時(shí),需要將一次并行處理的數(shù)據(jù)全部讀入,這一步需要采用寬存儲(chǔ)器對(duì)連續(xù)數(shù)據(jù)進(jìn)行訪問(wèn),具體寬度根據(jù)需要并行的操作、處理器并行操作的能力、處理器單次最大訪問(wèn)寬度而定。
最后,將運(yùn)算相關(guān)的指令合并成intrinsic函數(shù)[9},以充分利用C66x的特性。intrinsics函數(shù)直接調(diào)用某些匯編語(yǔ)句,其前綴以下劃線表明,和普通函數(shù)調(diào)用方法相同。如_mpy2實(shí)現(xiàn)將輸入的兩個(gè)操作數(shù)的高低16位相乘,_swap4將操作數(shù)高低半字中的每一對(duì)字節(jié)分別做大端終結(jié)交換,_dopt2實(shí)現(xiàn)低16位乘積和高16位乘積相加[10]。實(shí)現(xiàn)的矢量化打包數(shù)據(jù)處理高斯濾波偽采用以上方法,分解了濾波長(zhǎng)度帶來(lái)的第三重循環(huán),多次調(diào)用內(nèi)聯(lián)函數(shù),執(zhí)行效率高,充分利用C66x在一個(gè)周期內(nèi),完成多個(gè)16×16的乘法運(yùn)算的性能,單像素結(jié)果需要進(jìn)行7次乘累加的操作,可在一個(gè)周期內(nèi)并行完成,以上優(yōu)化思想和代碼結(jié)構(gòu)在DSP平臺(tái)運(yùn)行,極具優(yōu)勢(shì)。另外,進(jìn)行縱向?yàn)V波處理,由于輸入圖像在內(nèi)存一般采用按行優(yōu)先存儲(chǔ),需要采用額外的數(shù)據(jù)打包處理,其他過(guò)程類似。
2.3 寬存儲(chǔ)器訪問(wèn)計(jì)算邊緣
寬長(zhǎng)度存儲(chǔ)器訪問(wèn)是指充分利用C6x系列DSP一次讀取32 位數(shù)的特性,并利用一個(gè)指令周期能讀取多個(gè)數(shù)據(jù)的特點(diǎn)在DSP處理過(guò)程中,盡可能多的將所需短字長(zhǎng)操作數(shù)讀入,如一次讀入2×32 b,4×16 b,甚至8×8 b等,可成倍減少與外部存儲(chǔ)器發(fā)生交互,是DSP優(yōu)化過(guò)程中一個(gè)重要的優(yōu)化手段。在實(shí)現(xiàn)C6678 DSP平臺(tái)的Canny算法時(shí),不止是在高斯濾波的處理過(guò)程中,計(jì)算圖像梯度信息,進(jìn)行非最大抑制等過(guò)程中也同樣采用寬長(zhǎng)度存儲(chǔ)器訪問(wèn),脫離傳統(tǒng)的按單位像素交互圖像數(shù)據(jù)的思維和編程方式,結(jié)合具體芯片的處理性能和應(yīng)用程序要求實(shí)現(xiàn)和優(yōu)化Canny算子,例如C6678甚至支持128 b的超長(zhǎng)數(shù)據(jù),在訪問(wèn)和保存中間圖像結(jié)果時(shí),具體采用的數(shù)據(jù)位寬需要結(jié)合系統(tǒng)對(duì)精度的要求,當(dāng)用16位來(lái)表示梯度信息,即C語(yǔ)言中的short類型,采用64 b寬存儲(chǔ)器訪問(wèn),便推導(dǎo)出梯度計(jì)算公式的等價(jià)公式如下:
采用寬存儲(chǔ)器非對(duì)齊數(shù)據(jù)訪問(wèn)可以從DSP內(nèi)存中任意起始地址開(kāi)始讀取和存儲(chǔ)2 B,4 B,8 B的數(shù)據(jù),分別使用(&)_mem2_(const),(&)_mem4_(const),(&)_mem8_(const)函數(shù)。如此,便可以將圖像處理領(lǐng)域中頻繁使用的四鄰域模板進(jìn)行推導(dǎo),處理具體任務(wù)時(shí),將四領(lǐng)域模板升級(jí)為連續(xù)四點(diǎn)四鄰區(qū),連續(xù)八點(diǎn)四鄰區(qū),其示意圖如圖3所示。
圖3(a)為四鄰域模板示意圖, (b)和(c)為分別采用4 B和8 B訪問(wèn)時(shí),鄰域模板示意圖。對(duì)(b)和(c)圖像進(jìn)行處理的前提和依據(jù)是:連續(xù)4點(diǎn)的四鄰域在內(nèi)存存儲(chǔ)中也是連續(xù)的(不包含邊界),連續(xù)訪問(wèn)的4點(diǎn),在物理位置上其相關(guān)鄰點(diǎn)也連續(xù)。如此,可成倍節(jié)省外部存儲(chǔ)器訪問(wèn)操作時(shí)間。訪問(wèn)(a)的四鄰域點(diǎn),需要4次仿存,采用推導(dǎo)出等價(jià)模板后,處理連續(xù)四點(diǎn)和八點(diǎn)只需4次訪問(wèn)。在Canny邊緣計(jì)算過(guò)程中,需對(duì)輸入逐點(diǎn)遍歷,如計(jì)算梯度時(shí)遍歷整幅圖像灰度,非最大抑制時(shí)遍歷梯度和方向等,以上等價(jià)模板思想,當(dāng)需要處理圖像的八鄰域或在其他比較規(guī)整的膨脹和腐蝕模板同樣適應(yīng)。
3 硬件仿真結(jié)果
硬件平臺(tái)采用TMS320C6678LE評(píng)估板,開(kāi)發(fā)軟件采用CCS V5.3,量化位數(shù)16位,對(duì)一副800×600的顯微細(xì)胞圖像進(jìn)行處理,分割效果良好,見(jiàn)圖4。此外,在優(yōu)化前后,分別對(duì)Canny算法步驟進(jìn)行分析和測(cè)試,耗時(shí)統(tǒng)計(jì)采用TSCL和TSCH寄存器,結(jié)果見(jiàn)表1,所統(tǒng)計(jì)的結(jié)果均是在勾選相同的編譯器優(yōu)化選項(xiàng)后的比對(duì)。
4 結(jié) 語(yǔ)
在DSP平臺(tái)中,采用以上思想進(jìn)行優(yōu)化后,對(duì)同樣的圖像進(jìn)行處理,相對(duì)于原算法,性能可以提高近3倍,在差分圖像計(jì)算時(shí),效果極為明顯。在DSP系統(tǒng)設(shè)計(jì)中,頻繁地直接外部存儲(chǔ)器接口訪問(wèn),是系統(tǒng)性能提升的瓶頸,優(yōu)化結(jié)果表明,采用數(shù)據(jù)打包處理和寬存儲(chǔ)器訪問(wèn)方式能在一定程度上解決該問(wèn)題,雖不能實(shí)現(xiàn)數(shù)量級(jí)的優(yōu)化,但研究的優(yōu)化方法同樣可以在工程中作為輔助的優(yōu)化策略,并且具有實(shí)際優(yōu)化效果。
圖4 分割前后的顯微細(xì)胞圖像
表1 耗時(shí)測(cè)試仿真結(jié)果 cycle
參考文獻(xiàn)
[1] 梁光明.體液細(xì)胞圖像有形成分智能識(shí)別關(guān)鍵技術(shù)研究[D].長(zhǎng)沙:國(guó)防科技大學(xué),2008.
[2] 韓慧妍,韓燮.形態(tài)學(xué)和Otsu方法在Canny邊緣檢測(cè)算子中的應(yīng)用[J].微電子學(xué)與計(jì)算機(jī),2012,29(2):156?159.
[3] 洪運(yùn)國(guó).基于改進(jìn)Canny 算子和神經(jīng)網(wǎng)絡(luò)的人體行為識(shí)別模型[J].計(jì)算機(jī)工程與應(yīng)用,2013,49(8):202?205.
[4] 金澤安.基于DSP紅細(xì)胞圖像處理技術(shù)[D].南京:南京理工大學(xué),2009.
[5] 孫興華,郭麗.數(shù)字圖像處理:編程框架、理論分析、實(shí)例應(yīng)用和源碼實(shí)現(xiàn)[M].北京:機(jī)械工業(yè)出版社,2012.
[6] 左飛,萬(wàn)晉森,劉航.數(shù)字圖像處理原理與實(shí)踐:基于Visual C++開(kāi)發(fā)[M].北京:電子工業(yè)出版社,2011.
[7] Texas Instruments. TMS320C66x DSP CPU and instruction set reference guide [M]. USA: TI, 2010.
[8] QURESHI Shehrzad. Embedded image processing on the TMS320C6000? DSP: examples in code composer studio and MATLAB [M]. [S.l.]: Springer Verlag, 2005.
[9] Texas Instruments. TMS320C6000系列DSP編程工具與指南[M].田黎育,何佩琨,朱夢(mèng)宇,譯.北京:清華大學(xué)出版社,2006.
[10] Texas Instruments. Multicore fixed and floating?point digital signal processor TMS320C6678 data manual [M]. USA: TI, 2013.