• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Framebuffer的二維圖像處理關鍵技術研究與應用

      2015-09-18 13:26:03范麗辰王桂海姜淑香
      軟件導刊 2015年8期

      范麗辰 王桂?!〗缦?/p>

      摘要:介紹二維圖像處理原理與處理過程,闡述Framebuffer的概念與工作原理,描述基于Framebuffer的二維圖像處理關鍵技術,為開發(fā)嵌入式GUI與嵌入式應用提供技術參考。

      關鍵詞:嵌入式GUI;Framebuffer;二維圖像

      DOIDOI:10.11907/rjdk.151379

      中圖分類號:TP317.4

      文獻標識碼:A 文章編號文章編號:16727800(2015)008019702

      0 引言

      嵌入式應用中人機交互接口的圖形用戶接口(GUI),應為用戶提供友好界面,操作簡潔、直觀,并滿足體積小、運行時耗用資源少、上層接口與硬件無關、可移植性好、可靠性高等要求。

      嵌入式系統(tǒng)GUI的開發(fā)、移植與底層顯示設備密切相關,如果對顯示設備不熟悉,則無法開發(fā)GUI。然而,不同應用系統(tǒng)使用的顯示設備不同,驅動程序也則不同。開發(fā)GUI的用戶如果總是去關心底層設備,將會導致開發(fā)工作量大、技術難度高、開發(fā)效率低、開發(fā)的軟件可移植性差。為避免上述問題,Linux操作系統(tǒng)抽象出Framebuffer,用戶通過Framebuffer提供的接口即可操作底層設備。這樣用戶只需面向Framebuffer編程,從而簡化了開發(fā)步驟,也增加了可移植性。此外,F(xiàn)ramebuffer也是X Windows、MiniGUI等實現(xiàn)的重要基礎。理解二維圖像處理原理,掌握Framebuffer的原理與開發(fā)技術,是進行嵌入式系統(tǒng)GUI開發(fā)所必須具備的基礎。

      1 二維圖像處理原理

      二維圖像處理在嵌入式開發(fā)中得到普遍應用,其包括獲取、壓縮、存儲、解壓縮、顯示等環(huán)節(jié)。

      1.1 圖像獲取與存儲

      用于獲取二維圖像的設備種類繁多,如數碼相機、攝像機、掃描儀等,由于生產廠家不同、使用目的不同,得到的圖像格式也不同,常見的存儲格式有BMP、GIF、JPEG、PNG等[1]。

      BMP位圖格式是Windows操作系統(tǒng)的標準圖像文件格式,Windows的畫圖軟件即使用這種格式;GIF是CompuServe公司開發(fā)的圖像文件存儲格式,可以在一個文件中存放多幅彩色圖形/圖像;JPEG格式是有損壓縮的靜態(tài)圖像文件存儲格式,用于在互聯(lián)網上存儲和傳輸照片;PNG是20世紀90年代出現(xiàn)的圖像文件存儲格式,增加了一些GIF格式所不具備的特性。

      1.2 圖像壓縮

      二維圖像有多種格式,不同格式的圖像占用存儲空間不同。如BMP格式存儲的圖像數據量大,占用存儲空間大,因而影響傳輸效率。為減少存儲空間,對圖像進行壓縮,用較小的數據量表達原始圖像,從而能在較小的空間存儲更多圖像,同時帶來更高的傳輸效率。

      圖像中存在很多重復數據,使用數學方法可以減少數據量。另外,人視覺對圖像細節(jié)和顏色的辨認有一個極限,把超過極限的部分去掉,也能減少數據量,達到壓縮的目的。

      壓縮方法為使用離散余弦變換將色彩空間表示的圖轉換為頻率空間表示的圖,并進行量化與編碼。

      不同設備使用不同的壓縮算法進行圖像處理,但圖像壓縮處理步驟大致相同。以JPEG圖像為例,在進行離散余弦變換將色彩空間轉換到頻率空間之前,先將RGB顏色模型轉換為YUV顏色模型。因為RGB顏色模型的圖像數據量非常大,壓縮效果并不理想,而JPEG壓縮算法也是基于YUV顏色模型的。人們視覺對亮度的變化比對色彩的變化敏感,利用這一特性,YUV顏色模型將圖像的亮度信息Y和顏色信息(U,V)分離,用不同的位數存儲Y、U、V 3個分量,從而提高了壓縮效率,更好地利用了存儲空間。將RGB顏色模型轉換為YUV顏色模型時,保存亮度和顏色變化的數據部分,還要舍棄人眼不敏感的成分。這樣既保證了圖像質量,也節(jié)省了存儲空間。

      不同設備使用不同的壓縮算法,不同壓縮算法產生不同的圖像格式。例如,用于BMP位圖文件的壓縮算法有RLE4、RLE8兩種,JPEG格式采用JPEG壓縮算法,PNG格式采用LZ77派生的DEFLATE非專利無失真壓縮算法,GIF格式采用LZW壓縮算法。

      1.3 圖像解壓縮

      對于壓縮存儲的圖像,要經過解壓縮后才能還原為在顯示設備上可用的數據格式。解壓縮是壓縮的逆過程,包括頭文件解析、熵編碼、反量化、反離散余弦變換、顏色模型轉換等幾個步驟,解壓縮后的圖像數據為RGB顏色模型。

      首先對圖像數據進行頭文件解析,得到圖像的文件信息;然后通過熵編碼得到圖像壓縮前離散余弦變換的量化值;接著進行反量化,將量化值乘以反量化參數,得到離散余弦變換的頻率系數;再對頻率系數進行反離散余弦變換,得到YUV顏色模型的圖像取樣數據;最后將YUV顏色模型轉換為RGB顏色模型,完成圖像解壓縮。

      2 Framebuffer工作原理及應用

      Linux操作系統(tǒng)工作在保護模式下,用戶程序不能直接對設備進行操作,只能利用操作系統(tǒng)提供的接口完成對設備的讀寫。對于顯示設備,該接口即是Framebuffer,稱作幀緩沖。Framebuffer設備是圖形設備的抽象,是某些視頻硬件的幀緩沖,允許用戶在完全不了解底層硬件的情況下,應用程序通過已定義好的接口(framebuffer)訪問圖形硬件。

      2.1 Framebuffer工作原理

      Linux操作系統(tǒng)將視頻設備進行抽象,成為Framebuffer設備,對幀緩沖設備操作即相當于對視頻設備操作,改變幀緩沖設備中的數據,則會改變LCD屏的顯示內容。mmap()函數將幀緩沖設備描述符映射到幀緩沖區(qū),通過讀寫幀緩沖區(qū)來操作幀緩沖設備。應用程序向幀緩沖區(qū)首地址指定的某個位置寫入數據,即是向顯存的對應位置寫入數據。LCD控制器將顯存內容輸出到LCD屏,從而實現(xiàn)寫屏。圖1描述了Framebuffer的工作原理。

      圖1 Framebuffer工作原理

      幀緩沖區(qū)的數據與LCD屏像素點有不同的對應關系。針對像素深度為16位的LCD屏,幀緩沖區(qū)每一個字節(jié)的數據對應LCD屏上一個像素點,改變一個像素點的顏色需要改變一個字節(jié)的內容;針對像素深度為16、24、32位的LCD屏,幀緩沖區(qū)中每2、3、4個字節(jié)數據分別對應LCD屏上一個像素點,改變一個像素點的顏色則需要同時改變相關字節(jié)的內容。

      2.2 Framebuffer應用

      應用Framebuffer進行二維圖像顯示時,需要經過圖像文件打開、建立幀緩沖、進行內存映射、圖像解壓縮、格式轉換及寫屏等步驟。在Linux下進行二維圖像開發(fā),可以借助已有函數庫對其進行解壓縮,不同格式的二維圖像使用不同的庫,如libjpeg庫、libgif庫、libpng庫等,分別用于JPEG、GIF、PNG格式圖像的壓縮/解壓縮。

      下面以JPEG圖像為例,將圖像顯示在LCD屏上的過程如下:首先初始化Framebuffer設備。包括打開Framebuffer設備、獲取設備描述符、用ioctl()函數獲取屏幕參數、設置幀緩沖區(qū)大小、用mmap()函數將幀緩沖設備描述符映射到幀緩沖區(qū)、得到幀緩沖區(qū)首地址指針等步驟[2];然后使用libjpeg庫解壓縮JPEG圖像。在Linux系統(tǒng)中安裝該函數庫,在程序中包含jpeglib.h、jerror.h頭文件,之后調用庫函數對圖像進行解壓縮,并將解壓后的圖像數據存儲到虛擬內存。

      具體步驟如下:①打開JPEG圖像文件,獲取文件描述符;②通過jpeg_create_decompress()函數分配并初始化一個jpeg對象,通過jpeg_std_error()函數定義用于錯誤處理的結構體對象,將其與jpeg對象綁定;③用jpeg_stdio_src()函數指定解壓縮數據源,將JPEG圖像與jpeg對象綁定;④用jpeg_read_header()函數獲取圖像信息,填充到jpeg對象;⑤為解壓縮設定參數,例如可以設置解壓后的圖像與原圖的比例;⑥用jpeg_start_decompress()函數開始解壓縮,將解壓后的圖像信息填充至jpeg對象;⑦用jpeg_read_scanlines()函數從jpeg對象中讀取一行像素點的顏色值,將讀取的顏色值存放到虛擬內存,直至讀完所有行并將數據存儲到虛擬內存;⑧調用jpeg_finish_decompress()函數,完成解壓縮;⑨調用jpeg_destroy_decompress()函數,釋放jpeg對象;⑩調用寫屏函數,將虛擬內存中的像素點顏色值寫入幀緩沖區(qū)首地址指向的位置中。需要注意的是,解壓后的圖像采用24位的RGB 8:8:8顏色模型,而顯示設備可能是8位、16位、24位與32位的RGB顏色模型。針對不同RGB顏色模型的設備,調用寫屏函數之前,可能需要將解壓后的圖像進行RGB顏色模型的轉換,使解壓后圖像與設備的RGB顏色模型相同。

      針對8位RGB 3:3:2顏色模型的設備,轉換時要保留R分量的高3位、G分量的高3位與B分量的高2位,舍去低位;16位RGB顏色模型有RGB 5:6:5與RGB 5:5:5(剩余一位是透明度)兩種,轉換為第一種顏色模型時,要保留R分量的高5位、G分量的高6位與B分量的高5位,舍去低位。轉換為第二種顏色模型時,保持透明度不變,保留R分量的高5位、G分量的高5位與B分量的高5位,舍去低位;針對24位RGB 8:8:8顏色模型的設備,無需轉換;針對32位RGB 8:8:8(剩余8位是透明度)顏色模型的設備,需將24位RGB顏色模型擴展為32位,保持R分量、G分量與B分量的值不變,添加8位透明度。

      為了實現(xiàn)虛擬顯示,保存圖像數據的虛擬緩沖區(qū)大小,應大于實際LCD面板顯示屏全部像素所需的數據緩沖區(qū)大小[3]。

      3 結語

      本文研究了二維圖像處理的關鍵技術,描述了基于Framebuffer的二維圖像處理過程。Framebuffer能支持絕大多數顯示設備,具有良好的平臺無關性,因而對應用程序開發(fā)者而言,不用關心底層設備的細節(jié)即可開發(fā)出完美的二維圖像處理程序。Framebuffer不支持三維圖像開發(fā),如果進行三維圖像應用開發(fā),可以在Windows下使用DirectX,或在Linux下使用OpenGL。二維圖像是圖形庫的基本元素,F(xiàn)ramebuffer為構建GUI提供了實現(xiàn)基礎,研究基于Framebuffer的二維圖像處理,可為開發(fā)輕型、可靠、可移植的嵌入式系統(tǒng)GUI提供思路,具有一定參考價值。

      參考文獻:

      [1] 林宗福.多媒體技術基礎[M].第2版.北京:清華大學出版社,2002.

      [2] 郭劍,趙建.嵌入式Linux的圖像采集與顯示[J].現(xiàn)代電子技術,2006(7):129131.

      [3] 劉彥文.嵌入式系統(tǒng)原理與接口技術[M].北京:清華大學出版社,2011.

      (責任編輯:黃 ?。?

      徐水县| 伊宁县| 读书| 白城市| 曲周县| 景东| 北流市| 连州市| 额敏县| 珲春市| 鄂托克前旗| 南岸区| 宜黄县| 阿坝县| 勃利县| 修武县| 道孚县| 肥乡县| 望谟县| 桃江县| 南丹县| 洛扎县| 肃北| 秀山| 两当县| 商河县| 晋州市| 成武县| 德令哈市| 台中县| 云林县| 来安县| 栾城县| 汝阳县| 土默特右旗| 福清市| 博客| 葫芦岛市| 武山县| 三原县| 定南县|