999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于GPU的圖像增強實驗設計與實現

2017-06-29 12:01:17傅志中趙宇飛
實驗技術與管理 2017年5期

傅志中, 趙宇飛, 徐 進

(電子科技大學 通信與信息工程學院, 四川 成都 611731)

基于GPU的圖像增強實驗設計與實現

傅志中, 趙宇飛, 徐 進

(電子科技大學 通信與信息工程學院, 四川 成都 611731)

圖像增強旨在改善和提高圖像的顯示質量,通過梯度進行增強是一種十分有效的方法。圖形計算單元(GPU)因為其較高并行性和其特殊的結構特性,正被廣泛地應用在算法加速和科學計算領域。為了提高學生對圖像增強原理的理解,以及使學生掌握利用GPU進行算法實現的原理與過程,設計了基于GPU的圖像增強實驗。

圖像增強; 梯度場; 圖形計算單元; CUDA編程; 實驗設計

實際應用場景中采集得到的圖像往往存在一些缺陷,例如曝光不足引起的圖像偏暗和噪聲引起的圖像弱化等[1]。無論是出于后續進一步處理考慮還是為了顯示效果考慮,都需要對圖像進行增強,使其達到更好的顯示效果,顯示盡可能多的信息。作為圖像處理領域的一個重要組成部分,圖像增強旨在提高圖像的顯示效果,使物體更加突出。無論是民用還是軍用領域,圖像增強都有廣泛的應用場景[2]。

自INTEL公司推出OPENCV以來,基于C/C++的圖像處理實時應用技術得到了快速的發展,使得VC或VS開發環境成為圖像處理技術應用的一個重要開發平臺?;贑語言的數字圖像處理實驗[3-4],有助于學生通過實驗直觀地認識和掌握圖像處理的原理和用途。

隨著GPU(圖形處理單元)技術近幾年的飛速發展,憑借其先天的并行架構特性,以及遠高于普通CPU的核心數,使得GPU在科學計算、圖像處理和人工智能等對計算能力有較高要求的學科領域中發揮著越來越重要的作用[5]。

本實驗先向學生講解圖像增強的算法原理,學生可以利用Matlab對算法進行仿真,并可以通過修改參數觀察效果變化,加深對算法的理解。另外,就GPU的原理向學生進行簡單介紹,并給出一個示例程序代碼。學生可根據該示例代碼掌握并行化和GPU編程的基本方法,并將自己的圖像增強算法移植到GPU平臺上。此過程中既加深了學生對圖像增強原理的進一步理解,又使學生對GPU的原理和使用方法有了切實的感受,初步掌握基于GPU的圖像處理方法。

1 圖像的梯度增強方法原理

基于圖像梯度場的增強算法源自高動態圖像處理技術[6-7]。該增強方法首先求出圖像的梯度場函數,然后構造增強函數,利用增強函數直接對梯度場進行增強,最后從梯度場重建出增強后的圖像[8]。

利用增強函數對梯度場進行增強見式(1):

(1)

其中,G(x,y)為提升后的梯度場,I(x,y)為原圖像I(x,y)的梯度。φ(x,y)為增強函數,通常可定義為

(2)

其中,α是梯度場增強因子,取值范圍[0.3,0.45],C=max{||I(x,y)||2}是梯度場歸一化因子,δ是歸一化偏移因子,保證φ(x,y)為有界值,取值為0<δ<1/C。

(3)

其中,div()是散度算子。

求解公式(3),即可重構出增強后圖像[9]。本實驗的梯度增強與重構流程見圖1(圖中r、g、b圖像3個分量)。

圖1 圖像梯度增強算法流程圖

式(3)為泊松方程,有基于離散正弦變換的快速求解方法[10],求解算法圖見圖2。

圖2 泊松方程快速求解算法圖

2 通用GPU計算簡介

GPU結構組成類似于CPU單元,都由控制部分(Control,圖3中黃色部分)、緩存(Cache,圖3中藍色部分)、動態隨機訪問存儲(DRAM,圖3中橙色部分),以及算術邏輯單元(ALU,圖3中綠色部分)4部分組成。由于CPU單元負責整個操作系統的控制與進程調度,所以其結構組成中控制部分和緩存部分消耗了CPU單元的主要資源。GPU單元只進行計算任務,不需要復雜的控制電路,所以GPU單元的絕大多數資源都被用于ALU設計,從而擁有更高的計算密度[11]。由于GPU不能單獨作為一個系統來使用,通常需要與CPU一起工作,CPU負責進程調度等控制功能,同時負責一些串行計算任務,當執行到并行計算部分代碼時,由GPU負責并行的執行該段代碼。CPU+GPU的程序執行流程見圖3。

圖3 CPU+GPU的程序執行流程圖

GPU在結構上擁有先天的并行性,一組ALU共享控制和緩存部分,每組ALU之間相互獨立。當一段程序用來對大量數據做相同的處理時,GPU可以將數據分組,每組數據用一組ALU來處理[12-13]。被GPU并行執行的函數或代碼段稱之為Kernel(圖3中紫色部分),在函數名后緊跟的<<>>指明了數據被如何劃分用來并行操作,劃分后的每個數據單元被分配一個線程并由一個ALU負責處理,一組線程構成一個Block,一組Block又組成一個Grid。各線程之間可以并發執行該段程序,從而成倍地縮短執行時間,大大提高處理速度。

3 實驗設計與仿真實現

首先將增強算法在Matlab上仿真實現,學習并加深對算法理解。學生可以調整增強函數,觀察實際增強效果并選擇合適的增強函數。然后,學生根據給出的一個GPU編程示例的代碼,思考算法中的并行部分,并將這些部分在GPU實現,并最終通過優化、對比算法在不同平臺的執行時間,掌握其基本編程原理和方法。

3.1 增強算法的Matlab仿真實現

本實驗的圖像增強原理部分涉及以下幾個部分:圖像讀入,求梯度,設計增強函數,求散度,求解泊松方程,輸出歸一化結果,算法流程見圖1。用Matlab自帶的圖像讀取函數實現圖像數據的讀入,得到一個三維矩陣形式的圖像數據[14]。在求解梯度時采用一階前向差分來近似,而求散度時采用一階后向差分來近似。增強函數決定了對不同梯度強度采取什么樣的增強操作,是圖像梯度增強的核心。在實驗中學生可以參照式(2)給出的增強函數形式,自行修改具體參數,甚至可以修改函數形式,并通過最后結果體會不同增強函數帶來的結果差異。

求解泊松方程得到重構圖像時,Matlab提供了離散正弦變化(DST)及其逆變換的庫函數,調用該函數即可。最后利用Matlab提供的圖像顯示函數,將歸一化以后的圖像數據顯示出來[11]。仿真階段的主要任務是驗證增強方法的可行性,通過此過程加深學生對增強的原理的理解,學生自行設計增強函數,探索不同場景下如何采用不同形式的增強函數,達到更好的增強效果。

3.2 算法的GPU移植實現

首先,在程序的初始階段,由CPU負責調用OPENCV庫函數、讀取圖片文件,并將彩色圖像的r、g和b3個分量以一維數組形式保存在主機端內存空間內;對應圖1中的圖片讀取和r、g、b分量的兩個步驟。

然后,求解梯度圖像的偽代碼如下:

cudaMalloc(&指向顯存指針, size); //在顯存中分配空間用于存儲梯度 2. cudaMemcpy(內存中單通道圖像指針, 指向顯存空間的指針, size, cudaMemcpyHost- ToDevice);//將圖像數據拷貝至顯存 mykernel_gradient<<>>(圖像數據指針,梯度結果指針){ · 確定線程與像素坐標對應關系; · 計算前向差分得該位置x, y方向梯度; · 將結果寫入梯度結果指針所指空間 }

//將圖像數據指針傳遞給計算梯度的核函數,該函數將結果寫入到傳遞的結果指針所指空間,此處block取16*16便于優化對齊,grid取(圖像長度/16)*(圖像寬度/16)

此過程對應圖1中的圖像梯度部分。

求增強函數的偽代碼如下:

mykernel_enhance<<<1,256>>>(增強值指針){ · 確定線程與灰度級關系; · 根據當前線程對應梯度的幅值依公式(3)計算增強系數; · 將結果寫入增強值指針所指地址中的相應位置;

}

//因為圖像梯度的幅值只有256種,因此block劃分為1*256即可

此過程對應圖1中的增強因子部分。

求增強后梯度的函數偽代碼如下:

mykernel_enhancedGradien<<< grid,16*16>>>(圖像梯度指針,增強值指針,增強后梯度指針){ · 確定線程與像素坐標對應關系; · 讀取當前線程對應像素點的梯度值; · 根據當前梯度幅值確定該位置梯度增強值; · 將原始梯度與增強值相乘后結果寫入增強后梯度指針所指空間的正確位置;

}

//為每個梯度像素分配一個線程,block取16*16,每個像素并行的求解其增強后梯度;

此過程對應圖1中增強梯度圖像G。

求解散度的函數偽代碼如下:

mykernel_div<<>>(增強后梯度指針,散度結果指針){ · 確定線程與像素坐標對應關系; · 計算增強后梯度圖像的x, y方向的后向差分,相加得到該位置散度值; · 將該位置散度結果寫入散度結果指針所指空間的正確位置;

}

//為每個增強后梯度像素分配一個線程,block取16*16,每個像素并行的求解其散度值;

此過程對應圖1中的散度div(G)過程。

最后,根據散度求解泊松方程得到重構結果的函數偽代碼如下:

mykernel_possion <<< 1*image_height,1*image_width>>>(散度結果指針,重構結果指針){ //根據圖2所示流程求解泊松方程 確定線程與圖像某行的對應關系; · 對本行散度調用IDST庫函數計算本行的IDST; · 計算本行散度的特征值,并與2的結果相乘; · 調用DST對于本行進行DST變換; · 將結果寫入重構結果指針所指空間的正確位置;

}

//為每一行散度分配一個線程求解泊松方程,行之間并行,因此block大小為1*image_width圖像寬度,grid大小為1*image_height圖像高度

此過程對應圖1中的求解泊松方程。

圖1中的最后2個步驟,即歸一化處理和圖像顯示,將在CPU端完成。只需要將GPU計算的求解泊松方程后的結果拷貝至CPU端,調用OPENCV中相應的庫函數[15]即可,因篇幅限制此處不再詳細給出。

4 測試與分析

對本實驗的圖像增強效果和GPU實現的加速效果進行了測試與分析,由于篇幅有限,僅給出了部分測試圖像結果,如圖4所示。圖中第一列為原始圖像,第二列是基于Matlab的算法增強結果,第三列是基于GPU的算法增強結果。兩者的增強圖像在視覺效果上都取得了很好的結果。

為測試GPU相對CPU的運算加速性能,本實驗配置了如下的硬件環境:CPU為酷2四核Q8200 (2.33 GHz),2 GB內存(DDR3);GPU為Q2000D。操作系統為32位WinXP SP3,軟件開發環境為VS2008。選取尺寸分別為256像素×256像素、512像素×512像素和1024像素×1024像素的圖片進行測試,算法計算耗時見表1。通過與CPU處理速度的比較,可以看到隨著圖像尺寸的增加,算法執行效率也逐漸提高。

表1 不同分辨率下GPU加速效果對比

5 結語

通過本實驗學生對圖像增強的概念與原理有了較好理解,并動手進行了仿真,通過調整和定義自己的增強函數,并觀察增強結果使學生進一步加深理解。學生動手將算法在當前流行的GPU平臺上實現,大大提升了算法的實時性。針對多個場景測試了系統的增強效果,同時針對不同分辨率測試了系統的速度提升情況。使得學生對GPU的原理有了進一步認識,并初步掌握使用GPU進行算法實現的方法。

References)

[1] 岡薩雷斯. 數字圖像處理 [M]. 阮秋琦, 阮宇智,譯.3版.北京:電子工業出版社, 2011.

[2] 胡學龍. 數字圖像處理[M].2版. 北京:電子工業出版社,2011: 1-16.

[3] 汪沛. 基于OpenCV庫的C語言編程學習方法[J]. 電氣電子教學學報, 2012,34(4):93-95.

[4] 印月. 基于VC++6.0的數字圖像處理綜合性設計實驗[J]. 實驗科學與技術,2011,9(3):10-11.

[5] 張舒, 褚艷利. GPU高性能運算之CUDA [M]. 北京:中國水利水電出版社,2009.

[6] 彭韜. 高動態圖像視覺保真實時顯示變換技術[D]. 成都: 電子科技大學,2005.

[7] 朱立新, 王平安, 夏德深. 基于梯度場均衡化的圖像對比度增強[J]. 計算機輔助設計與圖形學學報, 2007,19(12):1546-1552.

[8] 劉琳. 基于GPU的圖像梯度場增強算法的研究與實現[D]. 成都: 電子科技大學, 2014.

[9] 朱立新, 王平安, 夏德深. 基于梯度場均衡化的圖像對比度增強[J]. 計算機輔助設計與圖形學學報, 2008,19(12):1546-1552.

[10] Lai M C, Wang W C. Fast direct solvers for Poisson equation on 2D polar and spherical geometries [J]. Numerical Methods for Partial Differential Equations, 2002,18(1):56-68.

[11] Nvidia. CUDA C Programming Guide [M]. USA: Nvidia,2014:1-68.

[12] Cook S. CUDA Programming: A Developer’s Guide to Parallel Computing with GPUs [M]. Newnes, 2012.

[13] 王正林, 劉明. 精通MATLAB [M]. 北京: 電子工業出版社, 2011.

[14] Jason Sanders, EdwardKandrot. CUDA By Example [M]. USA: Addison-Wesley,2011:21-57.

[15] 毛星云, 冷雪飛. OPENCV3編程入門[M]. 北京: 電子工業出版社, 2015.

Design and realization of image enhancement experiment based on GPU

Fu Zhizhong,Zhao Yufei,Xu Jin

(School of Communication and Information Engineering, University of Electronic Science and Technology of China,Chendug 611731, China)

The image enhancement aims to improve the display quality of images. It is a very effective method to enhance images by gradients. The GPU (graphic processing unit) is widely used in the fields of algorithm acceleration and scientific computation because of its high parallelism and its special structural characteristics. In order to improve the students’ understanding of the principle of image enhancement, and help them to grasp the principle and process of using GPU to realize the algorithm, the image enhancement experiment based on GPU is designed.

image enhancement; gradient field; graphic processing unit(GPU); CUDA programming; experiment design

10.16791/j.cnki.sjg.2017.05.010

2016-11-03 修改日期:2017-01-04

國家自然科學基金項目“基于信息認知的圖像超分辨技術研究”(61075013);國家自然科學基金項目“多視角混合分辨率視頻關鍵技術研究”(61671126)

傅志中(1970—),男,重慶,博士,副教授,現主要從事信號檢測、圖像處理與實時實現技術研究及相關教學工作.

E-mail:fuzz@uestc.edu.cn

TN911.73;G642.423

A

1002-4956(2017)5-0037-04

主站蜘蛛池模板: 久久久久亚洲Av片无码观看| 亚洲天堂2014| 成人蜜桃网| 国产精品亚欧美一区二区| 五月天久久综合国产一区二区| 日本爱爱精品一区二区| 九色视频一区| 亚洲午夜福利在线| 国产激情第一页| 超级碰免费视频91| 欧美三級片黃色三級片黃色1| 美女裸体18禁网站| 国产亚洲精久久久久久无码AV| 美女无遮挡免费视频网站| 美女无遮挡被啪啪到高潮免费| 亚洲欧洲自拍拍偷午夜色无码| 91视频青青草| 精品人妻无码中字系列| 亚洲狠狠婷婷综合久久久久| 欧美激情,国产精品| 九九热免费在线视频| 国产精品尤物在线| 亚洲美女久久| 日韩在线中文| 91亚洲精品第一| 国产在线自在拍91精品黑人| 免费a在线观看播放| 综合色88| 日韩乱码免费一区二区三区| 黄色国产在线| 中文字幕乱码二三区免费| 国产极品美女在线| 亚洲精品自在线拍| 成人午夜视频在线| 久久96热在精品国产高清| 无码一区中文字幕| 亚洲妓女综合网995久久| 欧美人与动牲交a欧美精品| 999福利激情视频| 亚洲天堂网2014| 成人福利在线免费观看| www.国产福利| 亚洲最大福利网站| 久久99久久无码毛片一区二区| 98超碰在线观看| 国产精品成人久久| 欧美日韩中文字幕在线| 亚洲第一视频免费在线| av免费在线观看美女叉开腿| 国产一级视频久久| 成人午夜在线播放| 97se亚洲| 3p叠罗汉国产精品久久| 欧美日韩国产在线播放| 欧美亚洲欧美区| 久热中文字幕在线观看| 美女啪啪无遮挡| 欧美性久久久久| 99视频在线免费观看| 亚洲精品高清视频| 美女内射视频WWW网站午夜| 国产91精品久久| 欧美一区二区三区不卡免费| 国产性精品| 亚洲二三区| 91青青在线视频| 日韩无码黄色| 91亚洲精品国产自在现线| 久草国产在线观看| 久久青草精品一区二区三区| 亚洲人成在线免费观看| 国产精品无码影视久久久久久久 | 国产成人艳妇AA视频在线| 国产精品永久免费嫩草研究院| 午夜色综合| 国产69精品久久久久孕妇大杂乱 | 亚洲欧美天堂网| 在线观看亚洲人成网站| 欧美天堂在线| 91极品美女高潮叫床在线观看| 日韩a级片视频| 亚洲av日韩综合一区尤物|