摘 要:圖像的顯示質(zhì)量在計(jì)算機(jī)視覺(jué)系統(tǒng)中起著關(guān)鍵性的作用。在此根據(jù)YUV到RGB顏色空間的轉(zhuǎn)換理論、圖像數(shù)據(jù)格式以及轉(zhuǎn)換公式,并在精簡(jiǎn)的圖像采集平臺(tái)上,獲取圖像的YUV數(shù)據(jù),并分別基于VC++和Matlab提出了一種顏色空間轉(zhuǎn)換算法。通過(guò)實(shí)驗(yàn)驗(yàn)證表明該算法可以有效地提高圖像的顯示質(zhì)量。
關(guān)鍵詞:計(jì)算機(jī)視覺(jué)系統(tǒng); 顏色空間; YCbCr; RGB
中圖分類(lèi)號(hào):TN91934; TP317.4 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1004373X(2012)22006504
在計(jì)算機(jī)視覺(jué)系統(tǒng)中,圖像的顯示往往要涉及到顏色空間轉(zhuǎn)換的問(wèn)題[1],目前廣泛采用的數(shù)字圖像傳感器和模擬圖像傳感器(使用視頻解碼器)的數(shù)據(jù)輸出格式一般都包含YUV/YCbCr 4∶2∶2,而顯示器基本都是采用RGB值來(lái)驅(qū)動(dòng)的,所以要在顯示每個(gè)像素之前,需要把YUV/YCbCr彩色分量值轉(zhuǎn)換成RGB值[2]。目前大部分文獻(xiàn)只是籠統(tǒng)地在顏色空間模型中提出了YUV/YCbCr到RGB的轉(zhuǎn)換公式,并沒(méi)有針對(duì)相應(yīng)的YUV/YCbCr采樣格式提出切實(shí)可行的轉(zhuǎn)換算法[34]。因此本論文就針對(duì)目前YUV/YCbCr格式的圖像數(shù)據(jù)進(jìn)行了分析,結(jié)合空間轉(zhuǎn)換公式,提出了YUV/YCbCr 4∶2∶2到RGB的轉(zhuǎn)換算法,并分別在VC++和Matlab軟件中進(jìn)行了實(shí)現(xiàn)研究。
1 顏色空間理論
為了科學(xué)地定量描述和使用顏色,人們提出了各種顏色模型。目前常用的顏色模型有RGB,CMYK,HSI和YUV。下面主要對(duì)RGB和YUV顏色模型進(jìn)行簡(jiǎn)單介紹。
1.1 RGB顏色模型
RGB (Red, Green, Blue)是顯示和保存彩色圖像的最常見(jiàn)的色彩空間,它通過(guò)CIE規(guī)定的三基色,即紅、綠、藍(lán)三種基色的加權(quán)混合得到各種顏色。這里可用圖1的單位立方體來(lái)說(shuō)明[2]。三維空間的3個(gè)軸分別與R(紅)、G(綠)和B(藍(lán))3個(gè)分量相對(duì)應(yīng)。原點(diǎn)對(duì)應(yīng)黑色,與原點(diǎn)最遠(yuǎn)的定點(diǎn)對(duì)應(yīng)白色。在這個(gè)模型中,從黑到白的灰度值分布在從黑色原點(diǎn)白色頂點(diǎn)的連線上,立方體上或其內(nèi)部的點(diǎn)對(duì)應(yīng)不同的顏色,可用從原點(diǎn)到該點(diǎn)的矢量表示。
圖1 RGB顏色空間RGB(紅、綠、藍(lán))模型主要用于面向硬件設(shè)備,被廣泛應(yīng)用于視頻監(jiān)視器、彩色攝像機(jī)或打印機(jī)等[5]。
1.2 YUV/YCbCr顏色模型
YUV是被歐洲電視系統(tǒng)所采用的一種顏色編碼方法(屬于PAL)。YUV主要用于優(yōu)化彩色視頻信號(hào)的傳輸,使其向后兼容老式黑白電視[6]。其中“Y”表示明亮度(Luminance),也就是灰度值;而“U”和“V”表示的則是色度(Chrominance),作用是描述影像色彩及飽和度,用于指定像素的顏色。YCbCr是YUV通過(guò)縮放和偏移衍變而成的。其中Y與YUV中的Y含義一致,Cb,Cr同樣都指色彩,只是在表示方法上不同而已。一般情況下YUV大多是指YCbCr。在本文中,U一詞相當(dāng)于Cb,V一詞相當(dāng)于Cr。
YUV格式通常有2大類(lèi):打包(Packed)格式和平面(Planar)格式。前者將YUV分量存放在同一個(gè)數(shù)組中,通常是幾個(gè)相鄰的像素組成一個(gè)宏像素(Macropixel);而后者使用3個(gè)數(shù)組分開(kāi)存放Y,U,V三個(gè)分量,就像是一個(gè)三維平面一樣。常用的YUV 4∶2∶2和YUV 4∶4∶4均為打包格式。
YUV的優(yōu)點(diǎn)之一是,色度頻道的采樣率可比Y頻道低,同時(shí)不會(huì)明顯降低視覺(jué)質(zhì)量。通常采用A:B:C表示法來(lái)描述U和V與Y的采樣頻率比例,常用的采樣頻率比例有:YUV 4∶4∶4表示色度頻道沒(méi)有下采樣。YUV 4∶2∶2表示2∶1的水平下采樣,沒(méi)有垂直下采樣,對(duì)于每?jī)蓚€(gè)U樣例或V樣例,每個(gè)掃描行都包含4個(gè)Y樣例,每像素16位。4∶2∶2格式包含YUY2和UYVY兩種格式,它們之間的區(qū)別只是字節(jié)順序的不同,如圖2,圖3所示。
要在屏幕上顯示圖像,就必須以RGB表示圖像的顏色。所以需要把YCrCb模型向RGB模型轉(zhuǎn)換。具體的YCbCr與RGB的彩色空間變換關(guān)系如下[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) 通過(guò)變換得出的R,G,B值可能超出了其定義域,所以在變換之后要對(duì)RGB數(shù)值進(jìn)行檢查,如果大于255,則賦值為255;如果小于0,則賦值為0。
2 系統(tǒng)的實(shí)現(xiàn)
為了驗(yàn)證和比較圖像數(shù)據(jù)在顏色空間轉(zhuǎn)換后的圖像質(zhì)量,本論文設(shè)計(jì)了一種基于CMOS圖像傳感器的簡(jiǎn)易計(jì)算機(jī)視覺(jué)系統(tǒng)[8]。目的是為了通過(guò)硬件平臺(tái),并結(jié)合上位機(jī)的軟件系統(tǒng),采集圖像數(shù)據(jù),對(duì)數(shù)據(jù)進(jìn)行顏色空間的轉(zhuǎn)換,從而檢驗(yàn)顏色空間轉(zhuǎn)換算法的可行性和有效性。實(shí)現(xiàn)視覺(jué)系統(tǒng)的主要部件以及硬件系統(tǒng)如圖4所示。
圖4 硬件實(shí)現(xiàn)模塊在設(shè)計(jì)中選用的是具有超小型1/6\"的光學(xué)尺寸,分辨率為640×480像素的CMOS圖像傳感器。它有著出色的彩色視頻性能和很小包裝,并且功耗極低。在圖像傳輸方面,由于USB能夠?qū)崿F(xiàn)數(shù)據(jù)的快速、雙向、同步傳輸,而且成本較低并可以實(shí)現(xiàn)熱拔插。所以此處選用USB控制器作為數(shù)據(jù)傳輸接口,并采用的是Cypress公司的EZUSB FX2LP系列USB設(shè)備[9]。通過(guò)USB控制器的8051完成對(duì)CMOS傳感器的時(shí)序控制,并由USB的Slave FIFO同步傳輸數(shù)據(jù)于PC機(jī)進(jìn)行接收。由此完成了簡(jiǎn)潔的硬件系統(tǒng)的設(shè)計(jì)。
圖像數(shù)據(jù)接收的軟件平臺(tái)主要是基于VC++來(lái)實(shí)現(xiàn)的。通過(guò)調(diào)用Cypress公司提供的開(kāi)發(fā)包Development Kits的驅(qū)動(dòng)程序CYUSB.SYS,以及C++編程類(lèi)庫(kù)CyAPI.lib,來(lái)完成對(duì)USB設(shè)備的打開(kāi)、關(guān)閉和圖像數(shù)據(jù)的實(shí)時(shí)采集、圖像的動(dòng)態(tài)顯示。在VC++中編寫(xiě)圖像數(shù)據(jù)接收程序,創(chuàng)建一個(gè)單獨(dú)的線程函數(shù)來(lái)接收一幀的圖像的數(shù)據(jù)。當(dāng)接收完一幀圖像數(shù)據(jù)之后,保存到txt文件中,以待后期的處理。
3 顏色空間的轉(zhuǎn)換
對(duì)于YCbCr 4∶2∶2格式的圖像,每個(gè)像素是16位,因此一幀640×480像素的YCbCr 4∶2∶2格式圖像的數(shù)據(jù)大小為640×480×2 B,即614 400 B。24位的真彩圖像,每個(gè)像素的R,G,B分量分別是8位,共24位。因此同樣的一幀640×480像素的RGB圖像的數(shù)據(jù)大小為640×480×3 B,即為921 600 B。所以在YCbCr到RGB轉(zhuǎn)換的過(guò)程中首先要對(duì)Cb和Cr進(jìn)行補(bǔ)值,然后完成顏色空間的轉(zhuǎn)換。
3.1 基于VC++實(shí)現(xiàn)顏色空間的轉(zhuǎn)換
在VC++中把接收到的一幀YCrCb圖像數(shù)據(jù)轉(zhuǎn)換成一幀RGB圖像數(shù)據(jù)。首先讀入txt文件中的數(shù)據(jù)到內(nèi)存中,按行列的方式讀取每一個(gè)像素,對(duì)Y,Cb,Cr值進(jìn)行提取,轉(zhuǎn)成R,G,B格式,然后進(jìn)行顯示?;舅惴ㄈ鐖D5所示。
圖5 VC++中實(shí)現(xiàn)顏色空間轉(zhuǎn)換的基本算法其中i表示圖像的高度,j表示圖像的寬度。讀取的txt文件的數(shù)據(jù)放入ImageData中。本文中按照YUY2格式進(jìn)行轉(zhuǎn)換,由前面可知,YUY2在內(nèi)存中的存放次序第一個(gè)字節(jié)為Y0,每二個(gè)字節(jié)為U0,依次排列如下:[Y0,U0,Y1,V0][Y2,U1,Y3,V1][Y4,U2,Y5,V2] …。相應(yīng)的U和Cb對(duì)應(yīng),V和Cr對(duì)應(yīng),所以在ImageData中,讀出的第一個(gè)數(shù)據(jù)是Y,然后根據(jù)j是否能被2整除,判斷讀出Cb和Cr。按照式(2),對(duì)Y,Cb,Cr值進(jìn)行轉(zhuǎn)換,得到相應(yīng)的R,G,B值。最后對(duì)RGB圖像進(jìn)行顯示,如圖6所示。
由圖像可以看出,日光燈和對(duì)太陽(yáng)光強(qiáng)烈反光的地方,圖像的顏色出現(xiàn)了異樣,這是因?yàn)樵谏厦娴乃惴ㄖ?,提取出?lái)的每一個(gè)像素都擁有一個(gè)Y值,但是對(duì)于Cb和Cr,每個(gè)像素只包含了其中的一個(gè)值。所以造成了有強(qiáng)光照到的地方,在轉(zhuǎn)換后得到的圖像中,出現(xiàn)了顏色的異樣。在這種算法中,此類(lèi)問(wèn)題是無(wú)法避免的。而對(duì)于沒(méi)有被強(qiáng)光照到的地方,由于人類(lèi)視覺(jué)系統(tǒng)(其實(shí)就是人的眼睛)對(duì)亮度的感覺(jué)比對(duì)顏色更加敏感,所以即使在像素缺少Cb或Cr值的情況下,人用眼睛并不會(huì)察覺(jué)到畫(huà)面質(zhì)量的變化[10]。
基于VC++實(shí)現(xiàn)顏色空間轉(zhuǎn)換的優(yōu)點(diǎn)在于可以通過(guò)用戶編程,在操作界面上完成多種對(duì)視頻流或圖像的操作,使得應(yīng)用程序的功能更加的強(qiáng)大和方便。
圖6 VC++中轉(zhuǎn)換成的RGB圖像3.2 基于Matlab實(shí)現(xiàn)顏色空間的轉(zhuǎn)換
Matlab圖像處理工具箱中集成了有關(guān)顏色空間轉(zhuǎn)換的函數(shù),其中從YCbCr顏色模型轉(zhuǎn)換到RGB模型的的轉(zhuǎn)換函數(shù)為YcbCr2RGB。此函數(shù)是基于YCbCr 4∶4∶4格式的,所以在調(diào)用此函數(shù)之前,要先把YCbCr4∶2∶2格式的數(shù)據(jù)中的Y,Cb,Cr值進(jìn)行提取,然后通過(guò)插值法補(bǔ)全Cr和Cb的值,從而實(shí)現(xiàn)了YCbCr4∶2∶2格式到Y(jié)CbCr4∶4∶4格式的轉(zhuǎn)換。本論文中采用了最簡(jiǎn)單的插值法進(jìn)行插值,即使用臨近的Cb,Cr值進(jìn)行插值。對(duì)Y,Cb,Cr值進(jìn)行提取和補(bǔ)值的函數(shù)如下:
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);
對(duì)得到的Y,Cb,Cr數(shù)組進(jìn)行合并,然后通過(guò)YcbCr2RGB函數(shù)進(jìn)行轉(zhuǎn)換得到RGB。在YCbCr色彩空間中,它的亮度信號(hào)和色度 信號(hào)是分離的。如果只有Y信號(hào)分量而沒(méi)有Cb,Cr分量,那么這樣表示的圖像就是黑白灰度圖像。所以將Y分量寫(xiě)入文件,只顯示圖片的Y分量即得到黑白圖像,如圖7所示。
將轉(zhuǎn)換得到R,G,B分量分別寫(xiě)入文件并讀取成矩陣,然后將矩陣轉(zhuǎn)置,合并成三維數(shù)組,即為圖像的RGB值數(shù)組,直接可通過(guò)Imshow函數(shù)進(jìn)行顯示。圖8為轉(zhuǎn)換得到的RGB真彩圖像。
由同一幀圖像的數(shù)據(jù),轉(zhuǎn)換得到的RGB圖像,可以明顯地看出,由Matlab中得到的圖像質(zhì)量更加好一些。說(shuō)明用臨近的Cb,Cr值對(duì)YCbCr值進(jìn)行補(bǔ)全,可以有效地改善圖像質(zhì)量。而且Matlab中集成了YcbCr2RGB轉(zhuǎn)換函數(shù),使得編程更加容易和簡(jiǎn)便,只要完成相應(yīng)的Cb,Cr的插值,即可有效地完成圖像顏色空間的轉(zhuǎn)換和顯示。
圖7 提取Y分量得到的黑白圖像
圖8 Matlab中轉(zhuǎn)換得到的RGB圖像4 結(jié) 語(yǔ)
由于計(jì)算機(jī)視覺(jué)系統(tǒng)中,對(duì)圖像的顯示是必不可少的環(huán)節(jié),如果圖像的顯示質(zhì)量不能達(dá)到一定的要求,往往會(huì)對(duì)系統(tǒng)的整體性能帶來(lái)很大的影響。所以本文針對(duì)在計(jì)算機(jī)視覺(jué)系統(tǒng)中,必然會(huì)遇到的在圖像顯示過(guò)程中的顏色空間的轉(zhuǎn)換的理論進(jìn)行了闡述,并在相應(yīng)的硬件的基礎(chǔ)上,提出了一種簡(jiǎn)單實(shí)用的轉(zhuǎn)換算法,并對(duì)得到的圖像進(jìn)行了比較和分析。本文提出的算法可經(jīng)過(guò)修改,方便地應(yīng)用到Y(jié)UV/YCbCr的其它采樣格式的顏色空間轉(zhuǎn)換中,所以具有較好的實(shí)用性和拓展性。
參 考 文 獻(xiàn)
[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] 王靜.嵌入式系統(tǒng)移動(dòng)視頻監(jiān)控終端平臺(tái)安全性[J].現(xiàn)代電子技術(shù),2010,33(4):7779.
[4] 閔祥龍, 王江安.三級(jí)管道流水線算法實(shí)現(xiàn)紅外點(diǎn)目標(biāo)跟蹤[J].光電工程,2009,36(2):2328.
[5] 徐杰.數(shù)字圖像處理[M].武漢:華中科技大學(xué)出版社,2009.
[6] 朱習(xí)軍.Matlab在信號(hào)與圖像處理中的應(yīng)用[M].北京:電子工業(yè)出版社,2009.
[7] 劉禾.數(shù)字圖像處理及應(yīng)用[M].北京:中國(guó)電力出版社,2006.
[8] 許敬,王曉峰.基于特征點(diǎn)和區(qū)域生長(zhǎng)的目標(biāo)圖像分割方法[J].探測(cè)與控制學(xué)報(bào),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] 張百清.基于嵌入式系統(tǒng)的違章車(chē)輛視頻檢測(cè)系統(tǒng)[J].現(xiàn)代電子技術(shù),2012,35(11):164166.
作者簡(jiǎn)介: 向方明 女,1973年出生,工程師。現(xiàn)主要從事嵌入式系統(tǒng)的研究與開(kāi)發(fā)工作。
朱遵義 男,1957年出生,高級(jí)工程師?,F(xiàn)主要從事漏電斷路器的設(shè)計(jì)與開(kāi)發(fā)及低壓電器智能電網(wǎng)技術(shù)的開(kāi)發(fā)。
許 敬 女,1984年出生,碩士。主要研究方向?yàn)閳D像處理電路設(shè)計(jì)及算法研究。