楊 昊
(西安電子科技大學電子工程學院,陜西西安 710071)
邊緣檢測經常被用作一種模式識別算法的工具,同時也是預測圖像壓縮算法中必不可少的部分,當只使用一種方法時,若無驗證,邊緣的預測誤差較大,這使存檔壓縮比率大幅減少。
由于邊緣檢測的重要性,有眾多算法已開發(fā)來解決這一問題。例如,Marr-Hildreth[1]邊緣檢測是使用高斯函數(shù)作為平滑函數(shù),使用拉普拉斯算子提取圖像二階倒數(shù)的“零交叉”來進行的邊緣檢測。Sobol,Roberts,Cross 和 Prewitt[2]通過梯度算子估計圖像灰度變化的方向,增強圖像變化中的灰度變化區(qū)域,對增強的區(qū)域進一步判斷邊緣。Canny邊緣檢測算子認為,邊緣檢測的算子應滿足最優(yōu)準則、信噪比準則、定位精度準則及單邊緣響應準則。這些算子從某種程度上均是將圖像的變化看作是梯度,將較大的變化認作邊界。
CUDA 邊緣檢測最初用于 Sobol、Canny算子[5]以及Gabor[6]小波算子的并行運算。文中將詳細介紹基于局部閾值和布爾函數(shù)的并行運算。將介紹局部閾值和二值函數(shù)的算法。并給出了并行化并用CUDA的實現(xiàn)。
基于局部閾值和二值函數(shù)[3]下的邊緣檢測在概念上與上述邊緣檢測完全不同,若是將3×3的圖像通過局部閾值函數(shù)轉換到位塊中,而位塊中出現(xiàn)的一些模式則被定義為邊緣檢測的算子。
這些算法的共同特性是在圖像的每個像素點均存在大量的數(shù)據計算,同時這些數(shù)據的計算也都是獨立進行。由于這種性質,獨立像素的運算符合并行運行的理想條件。近年來,隨著GPU編程的發(fā)展,海量數(shù)據的并行運算越發(fā)普及與流行,GPU編程已演化為高度并行、多線程、多核處理的高速大數(shù)據計算能力,并具有較高的存儲器帶寬。同時,在 CUDA[4]、OpenCL、Microsoft DirectCompute等軟件開發(fā),GPU運算已變得愈發(fā)成熟。
基于局部閾值和二值函數(shù)的邊緣檢測無需依賴于梯度的變化,該方法以局部閾值為基礎將局部像素點轉換為二進制模式,并利用掩碼來確定在某一確定點上是否存在邊界。當獲得的二進制模型符合邊界模型時,便可獲得更多精確的像素點。閾值計算是基于點的計算,所以該方法中的一個優(yōu)勢就是無需任何一種平滑函數(shù)來減少圖像噪聲。
步驟1 運用局部閾值將3×3視窗的圖像像素點轉變?yōu)橐粋€位塊模式。局部閾值的數(shù)值在圖像的每個像素點上進行再運算,減去小的誤差來得到九格窗口的平均像素強度。轉換3×3的窗口按照以下方法:如果像素點的強度大于它的閾值,則賦予二進制的值為1,反之為0。接下來通過進一步分析來給出3×3的模塊。
步驟2 對于每個像素點,文中將符合邊緣模式壓縮成3×3的二進制模塊。對于3×3的二進制矩陣來說,存在16種可能的邊緣圖像,如圖1所示。若二進制窗口得到的1的數(shù)值和16個矩陣中的任意一個相等,則窗口中的中間像素便可被認作為邊緣像素。
圖1 3×3的二進制模塊中的中心像素被認作邊緣像素點
步驟3 對圖像中每個中心窗口像素重復進行步驟1和步驟2。這樣可獲得所有符合要求的邊緣像素。此步驟依舊會存在一些由于噪聲所引起的錯誤邊緣。
步驟4 用全局閾值來消除錯誤邊緣。每個3×3矩陣的計算誤差,在邊緣會得到一個最大值,用此數(shù)值與全局閾值進行對比,而全距閾值則通過圖像的屬性,如噪聲強度來確定。那些被期望成為邊緣的像素點值大于全局閾值,則這些像素點依舊是符合條件的邊緣點。反之,則刪除這些不符合的像素點。
二值法的邊緣檢測算子與Canny算子非常相似,即使兩種算法使用完全不同的兩種算子。二值法檢測中的邊緣通常是多斑點的,通過分析顯示,對于邊緣鋒利的圖像,二值邊緣檢測明顯優(yōu)于Canny邊緣檢測。
算子的計算建立在每個獨立的像素上,且與高度不相關,這適用于并行運算的條件。CUDA通過內核函數(shù)和多線程來實現(xiàn)并行運算,因此這種特性是該類算法的理想模型,由于GPU和CPU在構建上不同,GPU的處理單元擁有更小更快的存儲器,因此在數(shù)據的計算上GPU具有更大的優(yōu)勢。該處理方式符合邊緣檢測的算子,下面將給出如何使用CUDA來實現(xiàn)該算子。
并行算子最佳的方法就是對每個圖像像素點創(chuàng)造獨立的線程,執(zhí)行必要的計算并儲存邊緣存在的信息??煞譃樗拗骱瘮?shù)與內核函數(shù)兩部分:宿主函數(shù)控制起始信道并使CPU獨立內存中的輸入輸出數(shù)據成為有效的GPU設備;內核函數(shù)負責計算、內存管理和線程同步。宿主函數(shù)的實行分以下幾步:(1)加載輸入圖像到宿主內存。(2)分配輸入圖像到內存設備。(3)將輸入圖像從主機復制到存儲器。(4)啟動內核。(5)將輸出圖像從存儲器復制到主機。(6)自由分配宿主與設備內存。
CUDA中眾多獨立的線程可以執(zhí)行并行化,這些線程組被組織在塊中,全部且被組織進一個網格。這樣做是為了使計算更加有效,從某種意義上講,是更有效地使用可用內存。CUDA中局部存儲器致力于獨立線程,共享內存便是利用塊中的線程,全局內存可用于所有線程。共享內存預測會遠快于全局內存,這是因為內核函數(shù)可以顯著地改善性能,大量信道所需的數(shù)據會從共享和局部存儲器中存取。
為了方便起見,所有信道在CUDA中有一個三維的向量信道ID,這使每個獨立信道在一個一維、二維或三維的塊中識別。同樣,每個塊ID也在網格中識別。這便使圖像處理如邊緣檢測的執(zhí)行變得容易,文中將一個像素點(X,Y)連接于圖像并利用以下的方法
局部閾值和二值函數(shù)下的邊緣檢測,每個信道需獲取相應圖像像素和其相鄰所有像素點的值。如前所述,共享內存會遠快速于全局內存。因此,內核函數(shù)需從局部存儲器中獲取可用的像素值。如圖2(a)為通過信道塊的圖像截面處理,圖2(b)為圖像截面被加載到塊共享存儲器,從圖中可以看出像素處理和數(shù)值如何儲存進共享存儲器。
圖2 圖像截面被加載到塊共享存儲器
二值函數(shù)對每個像素點均進行獨立的邊緣存在計算。首先將3×3的窗口轉變成一個位圖模式,位圖模式將被以整形存入9宮格的掩碼中。每個單元格在3×3的矩陣中有對應的位置,得到的掩碼與符合16可能的邊緣模式預先定義的掩碼相比較。該方法的優(yōu)點是可減少每個線程所需的內存。二值函數(shù)邊緣檢測算子利用全局閾值可實現(xiàn)減少錯誤的邊緣。從圖3中可看到,該方法所得到的邊緣檢測效果。
圖3 在局部閾值與二值函數(shù)下進行的邊緣檢測效果
文中將對比時序和CUDA下實現(xiàn)邊緣檢測的算法。兩種算法均使用Microsoft Visual Studio 2010在4.0版本下的CUDA平臺調試。使用Intel(R)Core(TM)i7-2630 QM CPU@2.00 GHz,4 GB of DDR3 -1333 RAM,Nvidia GTX540M 1 GB在win7操作系統(tǒng)下進行。從128×128~2 048×2 048的每組圖片進行了100次重復的計算,并記錄了運算所需的時間,如表1所示。
表1 時序和CUDA下實現(xiàn)邊緣檢測算法結果分析
從計算結果可看出,GPU并行運算的速度相比于CPU時序運算快了10倍。在未來,伴隨著CUDA的發(fā)展,這種更快更有效的方法將能夠解決更多復雜的處理。
[1]NADERNEJAD E,SHARIFZADEH S,HASSANPOUR H.Edge detection techniques:evaluationsand comparisons[J].Applied Mathematical Sciences,2008,2(31):1507 -1520.
[2]DAVISL S.A survey of edge detection techniques[J].Computer Graphics and Image Processing,1975,4(3):248 -260.
[3]AHMAD M B,CHOI T S.Local threshold and boolean function based edge detection [J].IEEE Transactions on Consumer Electronics,1999,45(3):674 -679.
[4]Nvidia Conpration.NVIDIA CUDA Cprogramming guide version 4.0[M].MA USA:Nvidia Conpration,2011.
[5]YUANCHENG L,DURAISWAMI R.Canny edgedetection on NVIDIA CUDA[C].Tianjin:IEEE Computer Society Conference on Computer Vision and Pattern Recognition Workshops,CVPRW'08,2008:1 -8.
[6]WU Q,F(xiàn)U Z,TONG C,et al.The method of parallel Gabor wavelet transformedge detection based on CUDA[C].Mosico:2010 International Conference on Environmental Science and Information Application Technology(ESIAT),2010:537-540.