張天昊 何志毅
(桂林電子科技大學信息與通信學院,廣西 桂林541004)
在采集視頻圖像的傳輸過程中,受諸多因素的影響,可能導致圖像的退化。均值濾波是一種常用的線性平滑濾波器[1],因易于設計和在多處場合的優越性能而成為信號處理的重要手段,它直接在圖像空間域上對圖像局部窗口取均值代替窗口中心像素的值,可以在一定程度上對高斯噪聲加以抑制。但由于其運算的時間復雜度高,因此不能滿足幀速較高的實時視頻圖像的處理[2]。
然而圖形硬件技術的飛速發展給予了我們這種契機。從90年代中期開始,Direct3D7.0引入了基于硬件加速的“轉換和光照(transform and light,Tffamp;L)”,并首先得到了NVIDIA公司的GeForce 256(代號NV10)芯片的支持,從而使得三維硬件加速從單一的光柵化發展成為具有多個階段的渲染流水線[3]。運用Direct3D技術在加速處理圖像和計算機視覺中的應用研究成果最為突出。Fung等人利用GPU的高速計算能力,實現了基于相機的人臉跟蹤系統[4],Abate等人實現了在GPU上基于Direct3D的三維人臉識別[5];Ujaldón等人利用GPU中的光柵器實現了Hough變換,用于在二維圖像中檢測圓[6]。現有的成果也以事實證明,將均值濾波移植到Direct3D中來,可以實現對其時間復雜度的降低。
鄰域均值濾波法是一種空間域圖像增強法,是典型的線性濾波算法,它是指在圖像上對目標像素給定一個模版,該模版包含了其周圍鄰域的像素(已目標像素為中心的周圍8個像素,構成一個濾波器),再用模版中的全體像素的平均值來代替原來的像素值。
設定F(x,y)為N*N的輸入圖像,若平滑增強后的圖像為G(x,y),則有

其中x,y=0,1,...,N-1;S為(x,y)鄰域內像素坐標的集合;M表示集合S內像素的總數。根據M值的選取分為了如下幾個常用的濾波模版:

采用1/8的模版用VC++對鄰域均值算法加以實現,得到噪聲圖像的處理前后效果如圖1所示。

圖1
均值計算占用了均值濾波處理的大量時間費用[7],接下來我們將介紹如何運用Direct3D進行圖像的均值濾波并大幅度降低該算法的時間復雜度。
目前在Windows上采用GDI(圖形設備接口)的處理方法主要分為空域方法和頻域方法,空域方法直接作用于圖像中的像素點,該方法延伸的算法便于理解,但是每次處理都要遍歷每一個像素點,占用大量內的內存和耗費很長的時間,因此不適用于對視頻進行操作和處理。頻域方法則將初始圖像通過傅里葉變換至頻率域,對頻率域進行處理,經過傅里葉反變換后獲取圖像結果。因其基本采用的都是高精度的算法而經常運用在目標檢測、目標跟蹤等實際應用上。但是大量的數學運算需要占用一定的內存空間,因此一些高復雜度的算法會占用處理每幀圖象的時間而無法達到幀同步既而無法完成要求較高的基于視頻的目標檢測。Direct3D技術的誕生則解決了一些幀同步的問題。由于其Texture直接對底層硬件進行操作,因此可以用很少的代碼,就可以使用Direct3D的新接口完成二維圖形處理而僅僅占用少量的時間。另外,還可以得到各種各樣非常卓越的效果,例如縮放、旋轉、透明以及光照等,而且Direct3D技術對硬件支持廣泛,其顯示效果完全能夠達到視頻逐幀圖像處理的要求。
渲染3D對象的任務可分為兩個階段,第一階段成為轉換和照明。在這個過程中,未經轉換和照明的頂點從一段進入,經過網格化和固定功能的管道從另一端出來。其中,固定管道包括世界變換、觀察變換、背景剔除、燈光材質、裁剪、投影變換、視口變換幾個步驟。第二階段稱為光柵化處理,圖元用于將這些經過經過轉換并添加了照明效果的頂點組織為點、線和三角形。光柵處理程序使繪制結果形成DireceDraw表面,該表面成為渲染目標,同時應用紋理映射圖并添加多種屬性,如兩個相連頂點間的顏色。
鄰域平均法的均值濾波是圖像預處理中圖像平滑和消噪常用的方法。由于均值濾波算法的時間復雜度較高而不被應用于視頻幀處理中。本節主要講述如何運用Direct3D中的頂點著色器和像素著色器來對紋理坐標進行操作來降低均值濾波算法的時間復雜度從而達到對每幀圖像通過均值濾波進行平滑預處理的目的。
頂點著色器(Vertex Shader)是一個在圖形卡的GPU上執行的程序,它可以進行編程,并將代碼傳給GPU進行計算,然后通過屏幕顯示出來。它替換了在渲染3D對象中固定功能管線(fixed function pipeline)中的變換(transformation)和光照(lighting)階段。頂點著色器通過頂點作為輸入數據,只要將頂點緩存數據傳入GPU就會執行;像素著色器(Pixel Shader)以從頂點著色器輸出的值為基準,對畫面輸出的像素進行運算。下面給出每一步的具體實現原理:
Direct3D需要經歷幾個步驟來為應用程序做準備:
●創建IDirect3D9對象。
●檢查IDirect3D9對象的性能并選擇一個合適的設備類型。
●為適配器選擇一個顯示適配器和顯示模式。
●創建并初始化IDirect3DDevice9對象。
●將待處理的位圖加載到紋理上。
在Mesh中內置所有頂點緩沖、索引緩沖以及頂點格式的信息。頂點緩沖是儲存頂點信息的一種方法,它的內存由Direct3D進行管理并存放在顯存內,而不需要渲染每一幀時再將數據拷貝到顯卡,從而提高了處理圖像的性能。索引緩沖就像一個包含了數字的數組,而這些數字引用了頂點緩沖中的頂點,索引緩沖有點像將頂點緩沖作為頂點的調色板來使用。當頂點著色器和像素著色器對頂點數據進行處理后,使用DrawSubset()方法用紋理對Mesh中的表面進行渲染。以下為用處理后的紋理渲染Mesh的關鍵代碼:

上述代碼中的m_pVsh即為頂點著色器文件,m_pPsh為像素著色器文件。下列三行代碼和兩個著色器內的代碼共同完成了對頂點坐標進行操作的任務。
float ifl=0.001f;
m_pd3dDevice-ffgt;SetVertexShaderConstantF(13,D3DXVECTOR4(ifl,-ifl,ifl*2,-ifl*2),1);
m_pd3dDevice-ffgt;SetVertexShaderConstantF (14,D3DXVECTOR4(0.0006f,0.0016f,0,0),1);
上述代碼聲明了常量寄存器來使著色器得到變換矩陣。由于著色器直接在GPU操作,因此采用匯編語言進行編碼。
其中,每一個頂點信息中最多包含八組紋理坐標。我們的目的是將一組原始的頂點紋理坐標通過矢量的運算最終形成八組紋理坐標并儲存在一個頂點信息內。每個形成的紋理坐標分別對應原始紋理坐標在二維平面上、下、左、右、左上、右上、左下、右下平移后的位置。平移的量值根據上述聲明的常量寄存器而定。
頂點著色器的目的是將八組紋理坐標加載到頂點信息內,接下來的任務就交給像素著色器m_pPsh對紋理進行渲染。在m_pPsh內,分別用八組紋理坐標對原始紋理的像素進行加載,并把八組渲染結果累加在寄存器r0中,則當前每個像素點的值就相當于鄰域八個點像素值的累加之和。對r0中的數據求均值,最終得到的紋理圖像即可達到對原始紋理圖像均值濾波的效果。
將處理后的紋理加載到表面上,通過對表面的操作既而達到了對紋理內的圖像的操作。若想對預處理后的圖像進行下一步的操作,只需處理表面內部的RECTs數組。它描述了表面所包含的矩形區域的像素,獲得它之前需要鎖定圖像表面。鎖定圖像表面和傳輸頂點數據到頂點緩沖的采用的方式相似:
m_pMesh-ffgt;m_pTex-ffgt;LockRect(0,ffamp;m_pMesh-ffgt;m_TexRect,0,0);//鎖定圖像表面
/*在這里對m_TexRect內的像素進行操作*/
m_pMesh-ffgt;m_pTex-ffgt;UnlockRect(0);//解鎖圖像表面
最終將表面內的內存數據顯示在屏幕上,即完成了運用Direct3D技術對二維圖像進行均值濾波預處理的全部流程。另外,在Mesh中創建不同大小的原始紋理坐標亦可對整幅位圖進行插值或均值處理。由此可見,Direct3D技術在處理二維圖像中還有廣闊的發掘前景。
本文介紹的這種用著色器配合Direct3D的渲染技術對二維圖像的處理方法,不僅僅大幅度的降低了均值濾波算法的時間復雜度,還可以加速實現后續對紋理中整幅位圖的全局處理,例如圖像的縮放,旋轉等等,并且對圖像的處理速度較比于通過GDI訪問硬件進行處理提升了三到四倍。
[1]王明翠,顧海明.均值均方差在基于DCT的圖像壓縮算法中的應用[J].計算機應用,2007,27(B06):162-163.
[2]張麗,陳志強,高文煥,等.均值加速的快速中值濾波算法[J].清華大學學報:自然科學版,2005,44(9):1157-1159.
[3]From Wikipedia.Graphics processing unit[OL].http://en.wikipedia.org/wiki/Graphics_processing_unit.2009.
[4]Fung J,Mann S.Computer vision signal processing on graphics processing units[C]//Acoustics,Speech,and Signal Processing,2004.Proceedings.(ICASSP'04).IEEE International Conference on.IEEE,2004,5:V-93-6 vol.5.
[5]Noe K?,Tanderup K,Lindegaard J C,et al.GPU accelerated viscous-fluid deformable registration for radiotherapy[J].DAIMI Report Series,2007,36(583).
[6]Ujaldón M,Ruiz A,Guil N.On the computation of the Circle Hough Transform by a GPU rasterizer[J].Pattern Recognition Letters,2008,29(3):309-318.
[7]常瑞娜,穆曉敏,楊守義,等.基于中值的自適應均值濾波算法[J].計算機工程與設計,2008,29(16):4257-4259.