摘 要:圖像的顯示質量在計算機視覺系統中起著關鍵性的作用。在此根據YUV到RGB顏色空間的轉換理論、圖像數據格式以及轉換公式,并在精簡的圖像采集平臺上,獲取圖像的YUV數據,并分別基于VC++和Matlab提出了一種顏色空間轉換算法。通過實驗驗證表明該算法可以有效地提高圖像的顯示質量。
關鍵詞:計算機視覺系統; 顏色空間; YCbCr; RGB
中圖分類號:TN91934; TP317.4 文獻標識碼:A 文章編號:1004373X(2012)22006504
在計算機視覺系統中,圖像的顯示往往要涉及到顏色空間轉換的問題[1],目前廣泛采用的數字圖像傳感器和模擬圖像傳感器(使用視頻解碼器)的數據輸出格式一般都包含YUV/YCbCr 4∶2∶2,而顯示器基本都是采用RGB值來驅動的,所以要在顯示每個像素之前,需要把YUV/YCbCr彩色分量值轉換成RGB值[2]。目前大部分文獻只是籠統地在顏色空間模型中提出了YUV/YCbCr到RGB的轉換公式,并沒有針對相應的YUV/YCbCr采樣格式提出切實可行的轉換算法[34]。因此本論文就針對目前YUV/YCbCr格式的圖像數據進行了分析,結合空間轉換公式,提出了YUV/YCbCr 4∶2∶2到RGB的轉換算法,并分別在VC++和Matlab軟件中進行了實現研究。
1 顏色空間理論
為了科學地定量描述和使用顏色,人們提出了各種顏色模型。目前常用的顏色模型有RGB,CMYK,HSI和YUV。下面主要對RGB和YUV顏色模型進行簡單介紹。
1.1 RGB顏色模型
RGB (Red, Green, Blue)是顯示和保存彩色圖像的最常見的色彩空間,它通過CIE規定的三基色,即紅、綠、藍三種基色的加權混合得到各種顏色。這里可用圖1的單位立方體來說明[2]。三維空間的3個軸分別與R(紅)、G(綠)和B(藍)3個分量相對應。原點對應黑色,與原點最遠的定點對應白色。在這個模型中,從黑到白的灰度值分布在從黑色原點白色頂點的連線上,立方體上或其內部的點對應不同的顏色,可用從原點到該點的矢量表示。
圖1 RGB顏色空間RGB(紅、綠、藍)模型主要用于面向硬件設備,被廣泛應用于視頻監視器、彩色攝像機或打印機等[5]。
1.2 YUV/YCbCr顏色模型
YUV是被歐洲電視系統所采用的一種顏色編碼方法(屬于PAL)。YUV主要用于優化彩色視頻信號的傳輸,使其向后兼容老式黑白電視[6]。其中“Y”表示明亮度(Luminance),也就是灰度值;而“U”和“V”表示的則是色度(Chrominance),作用是描述影像色彩及飽和度,用于指定像素的顏色。YCbCr是YUV通過縮放和偏移衍變而成的。其中Y與YUV中的Y含義一致,Cb,Cr同樣都指色彩,只是在表示方法上不同而已。一般情況下YUV大多是指YCbCr。在本文中,U一詞相當于Cb,V一詞相當于Cr。
YUV格式通常有2大類:打包(Packed)格式和平面(Planar)格式。前者將YUV分量存放在同一個數組中,通常是幾個相鄰的像素組成一個宏像素(Macropixel);而后者使用3個數組分開存放Y,U,V三個分量,就像是一個三維平面一樣。常用的YUV 4∶2∶2和YUV 4∶4∶4均為打包格式。
YUV的優點之一是,色度頻道的采樣率可比Y頻道低,同時不會明顯降低視覺質量。通常采用A:B:C表示法來描述U和V與Y的采樣頻率比例,常用的采樣頻率比例有:YUV 4∶4∶4表示色度頻道沒有下采樣。YUV 4∶2∶2表示2∶1的水平下采樣,沒有垂直下采樣,對于每兩個U樣例或V樣例,每個掃描行都包含4個Y樣例,每像素16位。4∶2∶2格式包含YUY2和UYVY兩種格式,它們之間的區別只是字節順序的不同,如圖2,圖3所示。
要在屏幕上顯示圖像,就必須以RGB表示圖像的顏色。所以需要把YCrCb模型向RGB模型轉換。具體的YCbCr與RGB的彩色空間變換關系如下[7]:Y
Cr
Cb=0.2990.5870.114
0.500-0.148 7-0.081 3
-0.168 7-0.331 30.500R
G
B+0
128
128
(1)
R
G
B=101.402
1-0.344 14-0.714 14
11.7720Y
Cb-128
Cr-128
(2) 通過變換得出的R,G,B值可能超出了其定義域,所以在變換之后要對RGB數值進行檢查,如果大于255,則賦值為255;如果小于0,則賦值為0。
2 系統的實現
為了驗證和比較圖像數據在顏色空間轉換后的圖像質量,本論文設計了一種基于CMOS圖像傳感器的簡易計算機視覺系統[8]。目的是為了通過硬件平臺,并結合上位機的軟件系統,采集圖像數據,對數據進行顏色空間的轉換,從而檢驗顏色空間轉換算法的可行性和有效性。實現視覺系統的主要部件以及硬件系統如圖4所示。
圖4 硬件實現模塊在設計中選用的是具有超小型1/6\"的光學尺寸,分辨率為640×480像素的CMOS圖像傳感器。它有著出色的彩色視頻性能和很小包裝,并且功耗極低。在圖像傳輸方面,由于USB能夠實現數據的快速、雙向、同步傳輸,而且成本較低并可以實現熱拔插。所以此處選用USB控制器作為數據傳輸接口,并采用的是Cypress公司的EZUSB FX2LP系列USB設備[9]。通過USB控制器的8051完成對CMOS傳感器的時序控制,并由USB的Slave FIFO同步傳輸數據于PC機進行接收。由此完成了簡潔的硬件系統的設計。
圖像數據接收的軟件平臺主要是基于VC++來實現的。通過調用Cypress公司提供的開發包Development Kits的驅動程序CYUSB.SYS,以及C++編程類庫CyAPI.lib,來完成對USB設備的打開、關閉和圖像數據的實時采集、圖像的動態顯示。在VC++中編寫圖像數據接收程序,創建一個單獨的線程函數來接收一幀的圖像的數據。當接收完一幀圖像數據之后,保存到txt文件中,以待后期的處理。
3 顏色空間的轉換
對于YCbCr 4∶2∶2格式的圖像,每個像素是16位,因此一幀640×480像素的YCbCr 4∶2∶2格式圖像的數據大小為640×480×2 B,即614 400 B。24位的真彩圖像,每個像素的R,G,B分量分別是8位,共24位。因此同樣的一幀640×480像素的RGB圖像的數據大小為640×480×3 B,即為921 600 B。所以在YCbCr到RGB轉換的過程中首先要對Cb和Cr進行補值,然后完成顏色空間的轉換。
3.1 基于VC++實現顏色空間的轉換
在VC++中把接收到的一幀YCrCb圖像數據轉換成一幀RGB圖像數據。首先讀入txt文件中的數據到內存中,按行列的方式讀取每一個像素,對Y,Cb,Cr值進行提取,轉成R,G,B格式,然后進行顯示。基本算法如圖5所示。
圖5 VC++中實現顏色空間轉換的基本算法其中i表示圖像的高度,j表示圖像的寬度。讀取的txt文件的數據放入ImageData中。本文中按照YUY2格式進行轉換,由前面可知,YUY2在內存中的存放次序第一個字節為Y0,每二個字節為U0,依次排列如下:[Y0,U0,Y1,V0][Y2,U1,Y3,V1][Y4,U2,Y5,V2] …。相應的U和Cb對應,V和Cr對應,所以在ImageData中,讀出的第一個數據是Y,然后根據j是否能被2整除,判斷讀出Cb和Cr。按照式(2),對Y,Cb,Cr值進行轉換,得到相應的R,G,B值。最后對RGB圖像進行顯示,如圖6所示。
由圖像可以看出,日光燈和對太陽光強烈反光的地方,圖像的顏色出現了異樣,這是因為在上面的算法中,提取出來的每一個像素都擁有一個Y值,但是對于Cb和Cr,每個像素只包含了其中的一個值。所以造成了有強光照到的地方,在轉換后得到的圖像中,出現了顏色的異樣。在這種算法中,此類問題是無法避免的。而對于沒有被強光照到的地方,由于人類視覺系統(其實就是人的眼睛)對亮度的感覺比對顏色更加敏感,所以即使在像素缺少Cb或Cr值的情況下,人用眼睛并不會察覺到畫面質量的變化[10]。
基于VC++實現顏色空間轉換的優點在于可以通過用戶編程,在操作界面上完成多種對視頻流或圖像的操作,使得應用程序的功能更加的強大和方便。
圖6 VC++中轉換成的RGB圖像3.2 基于Matlab實現顏色空間的轉換
Matlab圖像處理工具箱中集成了有關顏色空間轉換的函數,其中從YCbCr顏色模型轉換到RGB模型的的轉換函數為YcbCr2RGB。此函數是基于YCbCr 4∶4∶4格式的,所以在調用此函數之前,要先把YCbCr4∶2∶2格式的數據中的Y,Cb,Cr值進行提取,然后通過插值法補全Cr和Cb的值,從而實現了YCbCr4∶2∶2格式到YCbCr4∶4∶4格式的轉換。本論文中采用了最簡單的插值法進行插值,即使用臨近的Cb,Cr值進行插值。對Y,Cb,Cr值進行提取和補值的函數如下:
y = ycbcr(1:2:640.*480.*2);
cb(1:2:640.*480) = ycbcr(2:4:640.*480.*2);
cb(2:2:640.*480) = ycbcr(2:4:640.*480.*2);
cr(1:2:640.*480) = ycbcr(4:4:640.*480.*2);
cr(2:2:640.*480) = ycbcr(4:4:640.*480.*2);
對得到的Y,Cb,Cr數組進行合并,然后通過YcbCr2RGB函數進行轉換得到RGB。在YCbCr色彩空間中,它的亮度信號和色度 信號是分離的。如果只有Y信號分量而沒有Cb,Cr分量,那么這樣表示的圖像就是黑白灰度圖像。所以將Y分量寫入文件,只顯示圖片的Y分量即得到黑白圖像,如圖7所示。
將轉換得到R,G,B分量分別寫入文件并讀取成矩陣,然后將矩陣轉置,合并成三維數組,即為圖像的RGB值數組,直接可通過Imshow函數進行顯示。圖8為轉換得到的RGB真彩圖像。
由同一幀圖像的數據,轉換得到的RGB圖像,可以明顯地看出,由Matlab中得到的圖像質量更加好一些。說明用臨近的Cb,Cr值對YCbCr值進行補全,可以有效地改善圖像質量。而且Matlab中集成了YcbCr2RGB轉換函數,使得編程更加容易和簡便,只要完成相應的Cb,Cr的插值,即可有效地完成圖像顏色空間的轉換和顯示。
圖7 提取Y分量得到的黑白圖像
圖8 Matlab中轉換得到的RGB圖像4 結 語
由于計算機視覺系統中,對圖像的顯示是必不可少的環節,如果圖像的顯示質量不能達到一定的要求,往往會對系統的整體性能帶來很大的影響。所以本文針對在計算機視覺系統中,必然會遇到的在圖像顯示過程中的顏色空間的轉換的理論進行了闡述,并在相應的硬件的基礎上,提出了一種簡單實用的轉換算法,并對得到的圖像進行了比較和分析。本文提出的算法可經過修改,方便地應用到YUV/YCbCr的其它采樣格式的顏色空間轉換中,所以具有較好的實用性和拓展性。
參 考 文 獻
[1] MAHLKNECHT Stefan, OBERHAMMER Roland, NOVAK Gregor, et al. A realtime image recognition system for tiny autonomous mobile robots \[J\]. RealTime Systems,2005, 29(2/3): 247261.
[2] WANG Liqiang, SHI Yan, LU Zukang, et al. Miniaturized CMOS imaging module with realtime DSP technology for endoscope and laryngoscope applications \[J\]. Aign Process System, 2009, 54: 713.
[3] 王靜.嵌入式系統移動視頻監控終端平臺安全性[J].現代電子技術,2010,33(4):7779.
[4] 閔祥龍, 王江安.三級管道流水線算法實現紅外點目標跟蹤[J].光電工程,2009,36(2):2328.
[5] 徐杰.數字圖像處理[M].武漢:華中科技大學出版社,2009.
[6] 朱習軍.Matlab在信號與圖像處理中的應用[M].北京:電子工業出版社,2009.
[7] 劉禾.數字圖像處理及應用[M].北京:中國電力出版社,2006.
[8] 許敬,王曉峰.基于特征點和區域生長的目標圖像分割方法[J].探測與控制學報,2012(1):69.
[9] GONZALEZ R C,WOODS R E. Digital image processing third edition \[M\]. \[S.l.\]: Publishing House of Electronics Industry, 2010.
[10] 張百清.基于嵌入式系統的違章車輛視頻檢測系統[J].現代電子技術,2012,35(11):164166.
作者簡介: 向方明 女,1973年出生,工程師。現主要從事嵌入式系統的研究與開發工作。
朱遵義 男,1957年出生,高級工程師。現主要從事漏電斷路器的設計與開發及低壓電器智能電網技術的開發。
許 敬 女,1984年出生,碩士。主要研究方向為圖像處理電路設計及算法研究。