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.

主站蜘蛛池模板: 成人福利在线观看| 亚洲Av综合日韩精品久久久| 伊人色婷婷| 欧美色综合网站| 国产精品开放后亚洲| 亚洲AV无码久久天堂| 手机成人午夜在线视频| 国产成人久久综合777777麻豆| 在线另类稀缺国产呦| 国产91透明丝袜美腿在线| 亚卅精品无码久久毛片乌克兰 | 性色生活片在线观看| 色香蕉网站| 亚洲首页国产精品丝袜| 9久久伊人精品综合| 亚洲国产精品一区二区高清无码久久 | 伊在人亚洲香蕉精品播放| 91小视频在线播放| 亚洲国产中文综合专区在| 欧美亚洲日韩不卡在线在线观看| 亚洲一区二区约美女探花| 国产另类乱子伦精品免费女| 一本色道久久88| 亚洲视频欧美不卡| 国产第二十一页| 中文字幕啪啪| 国产又色又爽又黄| 亚洲国产中文在线二区三区免| 婷婷综合亚洲| 国产情侣一区二区三区| 91www在线观看| 亚洲成人一区二区| 强奷白丝美女在线观看| 国产在线麻豆波多野结衣| 免费xxxxx在线观看网站| 亚洲三级影院| 日本高清有码人妻| 久久永久视频| 国产成人精品高清不卡在线| 国产小视频免费观看| 久久亚洲高清国产| 污污网站在线观看| 热这里只有精品国产热门精品| 久久综合色视频| 欧美色99| 欧美性精品| 久久精品中文字幕少妇| 欧美区一区| 四虎在线高清无码| 91在线激情在线观看| 国产午夜无码专区喷水| 亚洲视频黄| 伊人久久综在合线亚洲2019| 午夜不卡视频| 乱系列中文字幕在线视频| 国产91色在线| 精品午夜国产福利观看| 国产精品一老牛影视频| 久久国产精品电影| 国产91丝袜在线播放动漫| 永久在线播放| 亚洲视频三级| 97在线国产视频| 久久婷婷人人澡人人爱91| 午夜久久影院| 亚洲人妖在线| 欧美午夜性视频| 国产99视频在线| 欧美精品亚洲精品日韩专区va| 国产成人乱无码视频| 亚洲欧美日韩另类在线一| 国产美女视频黄a视频全免费网站| 国产毛片不卡| 无码久看视频| 99精品高清在线播放| 国产对白刺激真实精品91| 中文国产成人精品久久| 伊人蕉久影院| 国产无人区一区二区三区| WWW丫丫国产成人精品| 亚洲国产第一区二区香蕉| 久青草国产高清在线视频|