魯億方, 藍(lán)金輝,遲健男
(北京科技大學(xué) 自動化學(xué)院,北京 100083)
隨著電子科學(xué)與計算機(jī)科學(xué)的發(fā)展與進(jìn)步,數(shù)字圖像處理技術(shù)在各個領(lǐng)域應(yīng)用越來越廣泛,日益成為教學(xué)熱點。數(shù)字圖像處理的內(nèi)容包括:圖像變換 、圖像編碼 、圖像增強 、圖像恢復(fù)、圖像分割和圖像識別等。目前,數(shù)字信號處理器(digital signal processer,DSP)芯片在圖像處理領(lǐng)域應(yīng)用得十分廣泛,因此將DSP實驗平臺引入“數(shù)字圖像處理”課堂,利用DSP進(jìn)行數(shù)字圖像處理,讓學(xué)生自己設(shè)計圖像處理的算法,自己在DSP平臺上對比圖像處理效果,進(jìn)而引導(dǎo)他們進(jìn)行創(chuàng)新[1]。
為了滿足學(xué)生的需要,本文介紹了以DM642為核心的DSP平臺,并以此為基礎(chǔ)進(jìn)行一系列的數(shù)字圖像處理實驗,為學(xué)生以后的實驗課程學(xué)習(xí)進(jìn)行了探索。
在課堂大綱的指導(dǎo)下,針對學(xué)生所學(xué)的知識點、學(xué)生的實際情況,適時地選擇有代表性、難度適中的數(shù)字圖像處理實例作為學(xué)生的實驗項目,讓學(xué)生能夠獨立自主地進(jìn)行設(shè)計、編程、調(diào)試,通過自己的實踐來發(fā)現(xiàn)問題、解決問題,在實踐過程中不斷學(xué)習(xí)。學(xué)生在實踐過程中既能在CCS環(huán)境實驗中加深掌握數(shù)字信號處理的基礎(chǔ)知識,又能培養(yǎng)學(xué)生調(diào)試程序的能力。為了配合理論教學(xué),實驗內(nèi)容安排仍從認(rèn)識性和驗證性入手,逐步增加設(shè)計性和工程應(yīng)用性內(nèi)容,使學(xué)生在掌握數(shù)字信號處理基本理論和方法的基礎(chǔ)上,可以更多地了解和掌握數(shù)字信號處理的仿真、開發(fā)、實現(xiàn)工具和方法,達(dá)到訓(xùn)練實驗技能和積累工程實際應(yīng)用經(jīng)驗的目的[2-4]。
DSP是針對數(shù)字信號處理需要而設(shè)計的一種可編程的超高速單片計算機(jī)系統(tǒng),是現(xiàn)代電子技術(shù)、計算機(jī)技術(shù)和信號處理技術(shù)相結(jié)合的產(chǎn)物。在過去的20多年里,DSP芯片的性能得到了很大的改善,軟件和開發(fā)工具也得到了相應(yīng)的發(fā)展,且價格大幅下降,采用DSP器件來實現(xiàn)數(shù)字信號處理系統(tǒng)已成了當(dāng)前的發(fā)展趨勢,其在電子信息、通信、軟件無線電、自動控制、儀器儀表、信息家電等高科技領(lǐng)域獲得了越來越廣泛的應(yīng)用。在數(shù)字圖像處理領(lǐng)域,DSP也扮演著不可替代的重要角色。為了應(yīng)對人才市場對DSP相關(guān)人才日益增長的需求,越來越多的工科學(xué)校開始重視和大力發(fā)展DSP教學(xué),因此研究DSP應(yīng)用教學(xué)有著重要的現(xiàn)實意義[5-6]。
TMS320DM642(以下簡稱為DM642)是TI公司2003年推出的一款針對多媒體處理領(lǐng)域應(yīng)用的高速DSP處理器,基于C64X核心架構(gòu),集成了豐富的外圍設(shè)備和接口,最高主頻達(dá)到了720 MHz,并行處理指令的能力可達(dá)每個指令周期處理8條32位指令,因此最大指令處理速度為5760MIPS。超長指令字(VLIW)的DM642核具64個32位字長的通用寄存器,8個獨立的功能單元(L1,L2,S1,S2,D1;D2,M1和M2),2個寄存器文件(A和B)和2個數(shù)據(jù)交叉通道(1X和2X)。這些硬件資源對等分配為2個相同的組,每組占用一個數(shù)據(jù)交叉通道。DM642每周期能夠提供4個16位MAC,兩級緩存:一級程序緩存L1P是一個128 Kbit的直接映射緩存,另一級數(shù)據(jù)緩存L1D是一個128 Kbit的雙路結(jié)合設(shè)置緩存。L2緩存器能被配置成映射存儲器、高速緩存或者兩者結(jié)合。DM642的一個很重要的外設(shè)就是VideoPort,它可以很方便地讀寫外部的視頻解碼器,TI公司提供了針對DM642的視頻解碼器的驅(qū)動程序,用戶只需開發(fā)應(yīng)用程序即可,為系統(tǒng)的開發(fā)帶來極大的方便。DM642的結(jié)構(gòu)框圖如圖1 所示[7]。

圖1 DM642結(jié)構(gòu)圖
DM642屬于TI公司的C64x系列DSP。DM642 與其他芯片比較,主要有以下幾方面的優(yōu)勢:第一,它具有通用性,可以實現(xiàn)很多功能;第二,用戶開發(fā)自由度更大,支持多種個性化開發(fā),可以滿足市場不斷提出的新的要求,在第一時間提升產(chǎn)品性能,增強產(chǎn)品的競爭能力;第三,處理能力強,可以在一個DM642上同時實現(xiàn)多路音視頻信號的壓縮處理,同時為了及時滿足應(yīng)用的需要,還提供了很多視頻專用功能,比如視頻濾波、高分辨顯示輸出功能等,使進(jìn)一步大幅度降低產(chǎn)品的成本成為可能(這一點很重要);第四,開發(fā)周期短,實現(xiàn)快速技術(shù)更新和產(chǎn)品換代;第五,芯片功耗低,為提高產(chǎn)品的穩(wěn)定性提供可靠保障。因此我們選擇DM642作為核心搭建數(shù)字圖像處理實驗平臺,來進(jìn)行接下來的數(shù)字圖像處理實驗探索[8]。
實驗平臺采用高性能的DSP芯片DM642作為核心處理器,擴(kuò)展了SDRAM和Flash存儲器,分別用于程序的運行和存儲,通過視頻編解碼器完成視頻的采集和輸出[9]。集成了CCD、TV、JTAG仿真接口等外設(shè),充分利用了片上資源。系統(tǒng)既可以脫機(jī)工作,也可以通過接口進(jìn)行二次開發(fā)。系統(tǒng)硬件組成如圖2所示。

圖2 系統(tǒng)硬件組成結(jié)構(gòu)圖
軟件的質(zhì)量可以從代碼長度、執(zhí)行速度以及代碼是否可重復(fù)利用等方面進(jìn)行評價,而開發(fā)工具的好壞對代碼的長度、代碼的執(zhí)行速度起著關(guān)鍵的作用。另外,開發(fā)工具的功能是否齊全、使用是否方便,在很大程度上影響DSP系統(tǒng)的開發(fā)周期以及產(chǎn)品的上市時間。為此1999年,TI公司針對TMS320C6000系列的數(shù)字信號處理器,推出了一種CCS(code composer studio),它是一個集成性的DSP軟件開發(fā)工具。CCS的出現(xiàn)是DSP開發(fā)軟件的一次革命性的變化。
CCS 主要包含如下功能:
(1) 集成了可直接編寫 C、匯編、.H 文件、.cmd 文件等的可視化代碼編輯界面;
(2) 集成了包括匯編器、優(yōu)化 C 編譯器、連接器等的代碼生成工具;
(3) 集成了各種調(diào)試工具,如裝入執(zhí)行代碼后,即可查看寄存器、存儲器、反匯編、變量窗口等的相應(yīng)信息,還支持 C 源代碼級調(diào)試;
(4) 斷點工具包括硬件斷點、數(shù)據(jù)空間讀/寫斷點,條件斷點等;
(5) 集成了可繪制眼圖、星座圖、時域/頻域波形、圖像等的數(shù)據(jù)圖形顯示工具,并可自動刷新;
(6) 支持 RTDX(real time data exchange)技術(shù),實現(xiàn)在不中斷 DSP 系統(tǒng)運行的情況下與其他應(yīng)用程序的數(shù)據(jù)交換;
(7) 提供 DSP/BIOS 工具,增強對代碼的實時分析能力、調(diào)度程序執(zhí)行的優(yōu)先級、方便管理和使用系統(tǒng)資源,減少了開發(fā)人員對硬件資源熟悉程度的依賴[10]。
代碼生成工具奠定了CCS所提供的開發(fā)環(huán)境的基礎(chǔ),CCS使用到的主要開發(fā)工具如下:
(1) 匯編優(yōu)化器。匯編優(yōu)化器允許用戶在寫線性匯編代碼時不用考慮流水線結(jié)構(gòu)和寄存器分配。匯編優(yōu)化器的輸入是線形匯編代碼,這種匯編代碼沒有進(jìn)行寄存器分配,也不考慮指令流水延遲。匯編優(yōu)化器分配寄存器利用循環(huán)優(yōu)化技術(shù)把線性匯編轉(zhuǎn)化為高度并行和軟件流水的匯編代碼。
(2) C/C++編譯器。C/C++編譯器的輸入為C/C++源代碼,輸出為 C6000 匯編源代碼。編譯器、優(yōu)化器和交疊工具是 C/C++編譯器的組成部分,編譯器使用戶能一步完成編譯、匯編和連接。如果輸入文件中有.sa文件,編譯器執(zhí)行匯編優(yōu)化器。優(yōu)化器調(diào)整和修改代碼以提高了C程序的效率。交疊工具把C/C++語句和對應(yīng)的匯編語句交疊列出。
(3) 匯編器。匯編器把匯編源文件翻譯為機(jī)器語言目標(biāo)文件。
(4) 連接器。連接器連接目標(biāo)文件,生成一個可執(zhí)行的目標(biāo)文件。由于連接器生成可執(zhí)行目標(biāo)文件,它要完成地址的重分配和解析外部引用,連接器的輸入是可重分配地址的目標(biāo)文件和目標(biāo)庫。
(5) 文檔管理器。文檔管理器允許用戶把一組文件放入一個稱為庫的文檔文件內(nèi)。此外,文檔管理器允許用戶刪除、替換、提取或添加庫中的成員。
(6) 建庫工具。用戶可以利用建庫工具生成自己的運行時支持庫。
(7) 十六進(jìn)制轉(zhuǎn)換工具。十六進(jìn)制轉(zhuǎn)換工具把通用目標(biāo)文件格式(COFF)目標(biāo)文件轉(zhuǎn)化為 TI-Tagged、ASCII-hex、Intel、Mortorala-S 和 Tektronix 等目標(biāo)文件格式,然后用戶就可以把轉(zhuǎn)換后的文件燒寫到 Flash 中,實現(xiàn) Flash 自舉。
本系統(tǒng)使用了CCS集成開發(fā)環(huán)境,程序的編寫、編譯、鏈接以及下載調(diào)試都在同窗口下完成。程序調(diào)試完成后,生成COFF 格式的可執(zhí)行代碼文件(*.out),通過專門的燒寫程序可將文件寫入Flash中固化;然后通過DSP獨立自主的對圖像進(jìn)行處理;最后將處理過后的圖片輸出到顯示屏。
本節(jié)針對DSP平臺做一組數(shù)字圖像處理實驗,并對實驗結(jié)果給與分析。首先連接好DSP數(shù)字圖像處理平臺與上位機(jī)及顯示液晶屏;然后打開DSP數(shù)字圖像處理平臺的開關(guān),給其上電并開啟液晶屏;設(shè)置CCS在硬件仿真下運行,啟動CCS,所有的算法,并通過CCS環(huán)境下進(jìn)行編譯、連接、下載并運行程序,然后在液晶顯示屏觀察運行結(jié)果[11]。
數(shù)字圖像在計算機(jī)上以位圖的形式存在,位圖是一個矩形點陣,其中每個點稱為一個像素,像素是數(shù)字圖像中的基本單位。一幅圖像的大小是由n個明暗度不等的像素組成,數(shù)字圖像中各個像素所具有的明暗程度是由灰度值所標(biāo)志,灰度是描述灰度圖像內(nèi)容的最直接的視覺特征,它指黑白圖像中點的顏色深度,范圍一般從0~255,白色為255,黑色為0,故黑白圖片也稱灰度圖像。灰度圖像矩陣元素的取值通常為[0,255],因此其數(shù)據(jù)類型一般為8位無符號整數(shù)(int8),這就是人們通常所說的256級灰度。0表示純黑色,255表示純白色,中間的數(shù)字從小到大表示由黑到白的過渡色,即可以表示不同的灰度等級。
在CCS中編譯取灰度圖程序,部分程序如下:
void gray()
{
int i,j;
for(i=intALines;i { for(j=intAPixels/2;j { *(Uint8 *)(tempCbbuffer +i * (numPixels >> 1) + j) = 0x80; *(Uint8 *)(tempCrbuffer + i * (numPixels >> 1) + j) = 0x80; } } } 圖3即所得灰度圖。 圖3 灰度圖顯示實驗結(jié)果 一幅圖像包括目標(biāo)物體、背景,還有噪聲,要想從多值的數(shù)字圖像中直接提取出目標(biāo)物體,最常用的方法就是設(shè)定一個閾值T,用T將圖像的數(shù)據(jù)分成兩部分:大于T的像素群和小于T的像素群。這是研究灰度變換的最特殊的方法,稱為圖像的二值化。圖像的二值化,就是將圖像上的像素點的灰度值設(shè)置為0或255,也就是將整個圖像呈現(xiàn)出明顯的只有黑和白的視覺效果。 于是在得到灰度圖像的基礎(chǔ)上繼續(xù)利用DSP平臺計算并獲取其原始圖像的二值化圖像。部分程序如下: void threshold() { int i,j; for(i=intALines;i { for(j=intAPixels;j { *(Uint8 *)(tempYbuffer + i*numPixels + j) = *(Uint8 *)(tempYbuffer + i*numPixels + j) } } } 在經(jīng)過DSP平臺處理之后所得的圖像如圖4所示。 圖4 二值化實驗結(jié)果 圖像的邊緣是圖像的最基本特征。所謂邊緣(或邊沿)是指其周圍像素灰度有階躍變化或屋頂變化的那些像素的集合。邊緣廣泛存在于物體與背景之間、物體與物體之間、基元與基元之間。因此,它是圖像分割所依賴的重要特征。物體的邊緣是由灰度不連續(xù)性所反映的。經(jīng)典的邊緣提取方法是考察圖像的每個像素在某個鄰域內(nèi)灰度的變化,利用邊緣臨近一階或二階方向?qū)?shù)變化規(guī)律,用簡單的方法檢測邊緣,這種方法稱為邊緣檢測局部算子法。 在本次實驗里,使用Sobel邊緣算子來進(jìn)行邊緣檢測。Sobel邊緣算子:圖5所示的2個卷積核形成了sobel邊緣算子,圖像中的每個點都用這2個核做卷積,一個核對通常的垂直邊緣相應(yīng)最大,而另一個對水平邊緣相應(yīng)最大,2個卷積的最大值作為該點的輸出位。運算結(jié)果是一幅邊緣幅度圖像[12]。 圖5 Sobel邊緣檢測算子 部分程序如下: /*Sobel邊緣檢測處理*/ void sobelEdge() { int i,j; int d1,d2,intTemp; for(i=intALines;i { for(j=intAPixels;j { d1 = (*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + (j-1))) + 2*(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + j)) + (*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + (j+1))) - (*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + (j-1))) - 2*(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + j)) - (*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + (j+1))); d2 = (*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + (j+1))) - (*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + (j-1))) + 2*(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j+1))) -2*(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j-1))) +(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + (j+1))) -(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + (j-1))); intTemp = d1>d2 d1:d2; if(intTemp<0) { intTemp = 0; } if(intTemp>255) { intTemp = 255; *(Uint8 *)(tempDisYbuffer + i*numPixels + j) = intTemp; } } } } 圖6就是經(jīng)過用邊緣檢測(Sobel邊緣算子)處理后的圖像。 圖6 邊緣檢測(Sobel邊緣算子)實驗結(jié)果 在數(shù)字圖像處理的實驗教學(xué)中,突出強調(diào)理論知識和實踐的結(jié)合,切實使實驗課程成為學(xué)習(xí)和應(yīng)用之間的紐帶,從而有效地提高學(xué)生解決問題的綜合能力。為此在實驗課程中要篩選圖像處理中最重要的算法作為實驗課程的主要教學(xué)內(nèi)容,涵蓋了圖像的點運算、圖像的幾何變換、圖像的增強、圖像的邊緣檢測和視頻處理等重要部分。除此外,重點培養(yǎng)學(xué)生的動手能力,讓每個學(xué)生都能熟悉DSP實驗平臺的使用,通過編寫調(diào)試程序使學(xué)生熟練地掌握使用CCS集成開發(fā)環(huán)境和數(shù)字圖像處理的DSP編程實現(xiàn)[13-14]。 在本實驗平臺里,基于CCS開發(fā)環(huán)境可以促進(jìn)學(xué)生對數(shù)字圖像處理知識的理解,并通過實踐來鞏固課堂里學(xué)到的知識,讓學(xué)生對數(shù)字信號處理理論知識掌握得更深刻,同時對硬件實驗產(chǎn)生很大的興趣,并看到了自己的不足之處,從而使學(xué)生更加努力、認(rèn)真地學(xué)習(xí)理論課上的知識。 [1] 李小紅.基于DSP圖像處理實驗系統(tǒng)的開發(fā)與應(yīng)用[J].合肥學(xué)院學(xué)報, 2009,19(4):38-41. [2] 賈永紅.現(xiàn)代化教學(xué)手段在數(shù)字圖像處理教學(xué)中的應(yīng)用研究[J].測繪通報, 2006(1):62-64. [3] 劉洋, 劉嘉.數(shù)字圖像處理課程教學(xué)方法研究[J].教研, 2011(8):70-71. [4] 楊達(dá)亮.DSP課程實驗教學(xué)分析[J].廣西大學(xué)學(xué)報,2007(29):184-186. [5] 廉小親,張曉力,方平,等.DSP 技術(shù)應(yīng)用綜合實訓(xùn)課程的構(gòu)建[J].中國現(xiàn)代教育裝備,2009(3):116-118. [6] 劉黨輝,沈蘭蓀.DSP芯片及其在圖像技術(shù)中的應(yīng)用[J].測控技術(shù),2001,20(5):16-23. [7] 劉源,朱善安,葉旭東.基于DM642的嵌入式視頻監(jiān)控系統(tǒng)硬件設(shè)計[J].電子器件,2006,26(3):905-908. [8] 李方慧,王飛.何佩琨,等.TMS320C6000 系列 DSPs 原理與應(yīng)用[M].北京:電子工業(yè)出版社,2003. [9] 張煒,胡云龍,吳鎮(zhèn)揚.DM642的性能及其在視頻處理實驗中的應(yīng)用[J].電氣電子教學(xué)學(xué)報,2005,27(5):82-85. [10] 何偉,陳彬,張玲.DSP/BIOS在基于DM642的視頻圖像處理中的應(yīng)用[J].信息與電子工程,2006,4(1):60-62. [11] 張建平, 戴詠夏.CCS在數(shù)字信號處理實驗教學(xué)中的探究[J].高等理科教育, 2009(1):92-94. [12] 章世秀,高天武,鄒修國.基于CCS的邊緣檢測算子實驗[J].高校實驗室工作研究,2012(3):56-57. [13] 韓智, 張振虹.“數(shù)字圖像處理”實驗課教學(xué)改革與實踐[J].實驗室研究與探索,2008,27(9):102-104. [14] 田秀玲.DSP應(yīng)用教學(xué)的探索和實踐[J].中國電力教育,2010(28):76-77.
4.2 二值化實驗

4.3 邊緣檢測實驗


5 結(jié)束語