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

OpenGL圖像處理管線研究及實現

2008-12-31 00:00:00許繪香
電腦知識與技術 2008年26期

摘要:OpenGL是國際上通用的編程接口,主要通過顏色緩沖區讀出和寫入圖像數據。論文研究了利用OpenGL的圖像處理管線把圖像數據直接從顏色緩沖區讀取到內存緩沖區,并在內存緩沖區對圖像進行操縱,以及在圖像的讀取和寫入操作時自動應用的圖像操作方法。實驗表明,利用OpenGL圖像處理管線進行圖像渲染可以大大提高渲染性能。

關鍵詞:OpenGL;圖像;管線;渲染

中圖分類號:TP391文獻標識碼:A文章編號:1009-3044(2008)26-1785-03

Research and Implement of Imaging Pipeline Based on OpenGL

XU Hui-xiang, SU Yu

(College of Information Engineering, Zhong-zhou University, Zhengzhou 450044, China)

Abstract: OpenGL is the universal programming interface, which reads and writes image data through color-buffer. The paper studys on The OpenGL imaging pipeline which can read image data from color-buffer to EMS memory directly, and treat these data in EMS memory, and also supports some image manipulation automatically during reading and writing process. The experiment shows that the imaging pipeline Based on OpenGL improves the image render performance greatly.

Key words: openGL; image; pipeline; render

OpenGL是國際上通用的圖形硬件的軟件接口,獨立于操作系統和硬件環境,目前已成為跨平臺最廣泛的三維引擎,它靈活方便地實現了二維和三維的高級圖形技術,在性能上表現得異常優越,不但能進行光線處理、色彩處理、動畫處理等,而且具有功能強大的圖像處理功能。

1OpenGL圖像處理概述

在OpenGL中,可以處理的圖像有很多,包括用掃描儀進行數字處理后的照片,或者使用圖形硬件生成的圖像,或者軟件程序在內存中逐像素地生成的圖像等。圖像數據都是以象素矩陣形式存儲,包括了被存儲在每個像素中的完整的顏色(R,G,B,A)。在正常情況下,圖像是來自顏色緩沖區的圖片,也可以從深度緩沖區和模板緩沖區讀取或寫入矩形區域的像素數據,圖像除了簡單地在屏幕上顯示外,還可以用于紋理貼圖。

2圖像處理管線

OpenGL的圖像處理操作是根據一個特定的順序進行的,這個順序叫做圖像處理管線,它描述了當圖像從顏色緩沖區讀取以及寫入到顏色緩沖區時所執行的各種操作。在圖像處理管線中,圖像數據采用一種固定的方式,按順序進行圖像處理的各個階段,很容易實現復雜圖像的渲染。其操作步驟如圖1所示。

2.1 顏色矩陣

在OpenGL中,通常把顏色在色彩空間中的坐標作為顏色值,RGB近似于一個在顏色立方體中以這三種顏色為軸的XYZ坐標系統。

圖2所示為顏色立方體模型,它包含了所有可能的顏色,他們或者位于這個立方體的表面,或者位于它的內部。例如所有可能出現的灰色都位于那條連接黑白兩角的(0,0,0)和(255,255,255)的對角線上。在顏色空間的基礎上,將Alpha顏色成分看成是一個向量的W成分,這樣把顏色值就可以轉換為一個4×4的顏色矩陣。顏色矩陣是一種矩陣堆棧,它的工作方式類似于其它的OpenGL矩陣堆棧(GL_MODELVIEW、GL_PROJECTION、GL_TEXTURE),通過調用glMatrixMode函數并使用參數GL_COLOR顏色矩陣堆棧作為當前的活動堆棧。顏色矩陣堆棧也可以進行壓入和彈出,但OpenGL實現只要求兩個元素深度的顏色矩陣。

2.2 顏色查找

顏色查找主要是在顏色表上進行的。顏色表就是一張映射表,用于查找一種顏色值(以表索引的方式使用)可以轉換為另外哪一種顏色值(存儲在這個索引位置的顏色值),其具有許多應用,如執行色彩修正、進行gamma調整,或者在不同的顏色表示形式之間進行轉換等。在OpenGL中,可以用glColorTable函數設置顏色表,通過參數Target指定在圖像處理管線的什么階段應用顏色表。這個參數可以是表1所列出的值。

為了使用一個以載入的顏色表,還必須先啟用顏色表,在像素被繪制之后,再glDisable禁用顏色表。此外,OpenGL實現對顏色表的支持可能會受到系統資源的限制。例如,大型的顏色表如果需要太多的內存,很可能無法載入。這種情況下可采用表1所列的代理顏色目標來判斷一個給定的顏色表能否載入到內存中以及是否可以使用,這些目標與glGetColorTableParameter函數聯用,判斷一個顏色表是否能夠載入,通過glGetColorTableParameter函數向OpenGL查詢顏色表的各種設置。

2.3 回繞

回繞是一種功能強大的圖像處理技巧,它具有許多應用,例如模糊、銳化以及其它特殊效果。回繞是一種過濾器,它根據一些權重模式(稱為核心)在一幅圖像中進行像素處理。回繞用這個像素以及臨近像素的加權平均值對它進行替換,每個像素的顏色值根據核心中的權值進行縮放。

在典型情況下,回繞核心是浮點值的矩陣數組,表示圖像中一個對應的像素排列權重。例如,在銳化操作中:

static GLfloat mSharpen[3][3] = {// 銳化回繞核心

{0.0f, -1.0f, 0.0f}, {-1.0f, 5.0f, -1.0f },{0.0f, -1.0f, 0.0f }};

在上述定義中,中心那個像素的值是5.0,說明這個像素受到更高的關注。它的上下左右像素都具有一個下降的權值,而它的四個斜角像素根本沒有被考慮。圖3顯示了圖像數據的一個示例塊,其中回繞核心四周加粗框顯示。核心最中間的那個5就是將被替換的像素,當核心的值應用到周圍的像素以獲取新的中心像素值(用圓圈表示)時,就可以看到它們。回繞核心應用到圖像中的每個像素,導致一幅銳化的圖像。

2.4 柱狀圖

柱狀圖是一幅圖像的頻率分布的圖形表示形式。它表示一幅圖像中每個顏色值的使用次數的計數,并以柱狀圖的方式來顯示它們。柱狀圖信息可以根據一幅圖像的強度值或每個顏色通道的值來收集。柱狀圖在圖像處理中經常被使用,許多數碼相機可以顯示被捕捉圖像的柱狀圖數據,攝像師使用這個信息來判斷照相機是否捕捉了物體的全部動態范圍,或者判斷這幅圖像是否暴光過度或不足。在OpenGL中,當柱狀圖收集功能被起用時,當任何圖像寫入到顏色緩沖區時,OpenGL會收集和它們有關的統計信息。為了準備收集柱狀圖數據,必須先告訴OpenGL需要收集多少數據以及你希望數據采用什么格式,函數glHistogram可以完成這個任務。在圖像數據被傳輸之后,再使用glGetHistogram收集柱狀圖數據。

2.5 最小最大操作

通過遍歷柱狀圖數據可以找到渲染圖像的最大亮度成分。如果只需要收集最大或最小成分,可以選擇不收集渲染圖像的整個柱狀圖,而只收集最大或最小值,這種收集最大最小數據的操作方式類似于柱狀圖數據的收集。首先,利用glMinmax指定希望收集的數據的格式,然后用glEnble啟用最小最大數據收集功能,最后采用glGetMinmax函數收集最大最小值。

3 實驗

采用面向對象開發工具Visual Studio2005和編程接口OpenGL1.2在Windows XP操作系統上實現部分圖像處理效果。進行實驗的計算機配置為Intel Pentiun雙核2.8GHz,1G內存,Radeon 1550顯卡。

首先,在顏色矩陣實驗中,讀入原始圖像(圖4)后,把顏色矩陣作為一個正值的縮放因子,對所有的顏色值進行縮放,處理后的圖像效果如圖5所示。其實現的代碼如下:

glMatrixMode(GL_COLOR); // 亮化圖像

glScalef(1.25f, 1.25f, 1.25f);

接下來,在顏色查找時,利用顏色表實現了圖像的顏色反轉,其主要代碼如下:

for(i = 0; i < 255; i++) //顏色反轉

{ invertTable[i][0] = 255 - i;

invertTable[i][1] = 255 - i;

invertTable[i][2] = 255 - i;

}

glColorTable(GL_COLOR_TABLE,GL_RGB, 256, GL_RGB,GL_UNSIGNED_BYTE, invertTable);

glEnable(GL_COLOR_TABLE);

原始圖像翻轉后的效果如圖6所示。

為了實現圖像處理的回繞操作,作者將像素所放和顏色矩陣以及回繞過濾器進行結合,通過顏色矩陣將圖像轉換為一幅灰度圖像(如圖7),再通過回繞過濾器執行了浮雕操作,其主要代碼為:

// 浮雕化圖像

glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_RGB, 3, 3,

GL_LUMINANCE, GL_FLOAT, mEmboss);

glEnable(GL_CONVOLUTION_2D);

glMatrixMode(GL_COLOR);

glLoadMatrixf(lumMat);

glMatrixMode(GL_MODELVIEW);

使用回繞和顏色矩陣產生的浮雕效果如圖8所示。

在柱狀圖實驗中,首先為柱狀圖分配存儲空間,用一個包含256個整型元素的數組中每個元素包含一個計數值,表示當圖像在屏幕上繪制時對應的亮度值被使用的次數,然后調用glHistogram函數告訴OpenGL收集可能在圖像中使用的256個亮度值的統計信息。柱狀圖的繪制效果如圖9所示。

4 結論

通過OpenGL圖像處理管線對圖像處理操作所提供的一系列支持,可以把圖像數據直接從顏色緩沖區讀取到內存緩沖區,并在內存緩沖區對圖像進行操縱,還支持一些在圖像的讀取和寫入操作間能夠自動應用的圖像操作方法,高效地實現了復雜的圖像處理,大大提高了圖像渲染了性能。

參考文獻:

[1] (美)Shreiner D, Woo M. OpenGL Programming Guige[M].Fifth Edition.徐波,譯.北京:機械工業出版社,2006.

[2] (美)Richard S, Wright J R. Lipchak B. OpenGL SuperBible[M].Third Edition.徐波,譯.北京:人民郵電出版社,2005.

主站蜘蛛池模板: 色哟哟国产精品| 国产精品第5页| 国产丝袜无码精品| 中国国产A一级毛片| 国产午夜一级毛片| 国产精品嫩草影院视频| 人妻少妇久久久久久97人妻| 国产污视频在线观看| 亚洲欧美激情小说另类| 久久国产精品波多野结衣| 国产成人精品18| 欧美精品导航| 白浆视频在线观看| 国产一区二区三区在线观看免费| 亚洲欧美成人综合| 亚洲永久视频| 又猛又黄又爽无遮挡的视频网站| 亚洲欧美色中文字幕| AV在线麻免费观看网站| 黄色三级毛片网站| 四虎永久在线精品国产免费| 一级一毛片a级毛片| 日韩中文字幕亚洲无线码| 国内视频精品| 国产第一页第二页| 天天做天天爱夜夜爽毛片毛片| 亚洲无码高清视频在线观看 | a毛片在线| 国产a v无码专区亚洲av| 亚洲精品免费网站| 色综合天天娱乐综合网| 国产尤物视频网址导航| 首页亚洲国产丝袜长腿综合| 亚洲最黄视频| 福利在线不卡一区| 99re免费视频| 视频一本大道香蕉久在线播放| 国产一区二区视频在线| 99热这里只有精品免费国产| 97久久精品人人| 一级全黄毛片| 国产一区二区网站| 欧美成人a∨视频免费观看| 国产亚洲视频在线观看| 色婷婷综合在线| 白浆免费视频国产精品视频| 国产在线视频二区| 中文字幕无码制服中字| 2021亚洲精品不卡a| 亚洲自拍另类| 亚洲综合九九| 精品夜恋影院亚洲欧洲| a级毛片网| 亚洲成人77777| 国产凹凸视频在线观看| 久久国产乱子伦视频无卡顿| 五月丁香在线视频| 国产精品自在拍首页视频8| 中美日韩在线网免费毛片视频 | 天堂在线视频精品| 国产精品区视频中文字幕| 欧美另类视频一区二区三区| 女同国产精品一区二区| 国产成人精品日本亚洲77美色| 日韩国产精品无码一区二区三区 | 免费一级成人毛片| 久久99国产综合精品1| 欲色天天综合网| 欧美黑人欧美精品刺激| 国产剧情伊人| 亚洲日韩精品欧美中文字幕| 91无码人妻精品一区| 一级毛片在线免费看| 亚洲精品色AV无码看| 精品国产一二三区| 久久久噜噜噜| 亚洲AV无码乱码在线观看代蜜桃 | 婷婷色在线视频| 她的性爱视频| 特级毛片免费视频| 日韩精品中文字幕一区三区| 色AV色 综合网站|