數(shù)字視頻基本知識(shí)探討
由于工作的需要,我在數(shù)字視頻處理方面做了幾年的開發(fā),我所說的開發(fā)是指應(yīng)用層的開發(fā),而不是底層的研究。先后開發(fā)出了幾個(gè)產(chǎn)品,比如數(shù)字接口攝像機(jī)、嵌入式視頻捕捉卡、Video-VGA視頻轉(zhuǎn)換卡、造紙行業(yè)用的在線斑點(diǎn)檢測儀、數(shù)字偽彩色處理儀等,在開發(fā)中也了解了一些關(guān)于CMOS面陣傳感器、CCD面陣傳感器、CCD線陣傳感器、高速攝像、高分辨率攝像、視頻編解碼、圖像壓縮等方面的知識(shí),目前我還在繼續(xù)做類似的開發(fā)。前面說的產(chǎn)品都有一定的銷量,所以經(jīng)常會(huì)收到用戶打來的電話,大多數(shù)是咨詢一些很基本的數(shù)字視頻知識(shí)。數(shù)字視頻無疑是復(fù)雜的,牽扯到很多方面,所以我有了寫這篇文章的想法,我希望用盡量通俗的方式來說明一些基本的問題,以期能對讀者的開發(fā)工作有一些幫助(說明一下:為了盡量地把問題說得簡單一點(diǎn),敘述中我作了一些簡化,比如把U和Cb都說成U、V和Cr都說成V等。另外還需要說明的是,下面我所說的模擬視頻的各個(gè)參數(shù)都是針對我國的電視標(biāo)準(zhǔn)——PAL制式而言的,而其它的電視制式則略有差別。讀者在做進(jìn)一步研究時(shí)請注意)。因?yàn)槲业乃绞钟邢?,錯(cuò)漏難以避免,有興趣的讀者可以寫信和我一起來探討。
??? 視頻簡單地說就是活動(dòng)圖像。電影也是活動(dòng)圖像,電影把大量靜止圖像記錄在膠片上,一張一張地連續(xù)顯示出來,就成了我們看到的電影。對于電視視頻,每秒鐘包含幾十幀靜止圖像,每一幀靜止圖像由幾百個(gè)行組成,每一行又由幾百個(gè)像素點(diǎn)組成。1秒鐘包含的圖像幀數(shù)為幀頻,1秒鐘包含的總行數(shù)為行頻,1秒鐘包含的總像素?cái)?shù)實(shí)際上就是相當(dāng)于視頻帶寬。
??? 首先來說說模擬視頻。
??? 遙想起來,在當(dāng)年有限的條件下,用電子管做出電視機(jī)的前輩們實(shí)在是令人佩服的,但是,用現(xiàn)在的眼光來看,當(dāng)年的電視技術(shù)又實(shí)在是很簡陋的。我國的黑白視頻信號(hào)幀頻為25 Hz,就是說每秒顯示25幅圖像,之所以規(guī)定為25 Hz,而不是其它的某個(gè)值,主要是因?yàn)閮蓚€(gè)原因。一個(gè)與人的視覺生理特點(diǎn)有關(guān),當(dāng)圖像的刷新速度達(dá)到5幀/秒的時(shí)候,人開始感覺圖像是活動(dòng)的,而達(dá)到24幀/秒的時(shí)候,人感覺圖像是完全連續(xù)和流暢的(電影所使用的幀頻就是24 Hz),所以視頻信號(hào)幀頻應(yīng)大于等于24 Hz。理論上來說幀頻越高越好,但是幀頻越高,對電路的要求也越高,技術(shù)越復(fù)雜,成本也越高(現(xiàn)在有的電腦彩顯幀頻已達(dá)到200Hz),在當(dāng)時(shí)的條件下,只能選擇一個(gè)大于24的盡量小的值。另一個(gè)原因是因?yàn)槲覈碾娋W(wǎng)頻率是50Hz,當(dāng)采用25 Hz幀頻時(shí),隔行掃描時(shí)的場頻為50 Hz,正好與電網(wǎng)同頻,這樣,電源對圖像的干擾是固定的,人眼不容易感覺出來,或者換個(gè)角度說:電源就可以不必做得那么精密(那個(gè)時(shí)候開關(guān)電源還很少使用,整流電源缺乏穩(wěn)壓措施,紋波很大)。所以選擇了25 Hz幀頻。說到這里,又要說說“場頻”。電視在顯示圖像的時(shí)候,把一幀分成了兩場來顯示,一個(gè)場由幀中的奇數(shù)行組成,叫做奇場,另一個(gè)場由幀中的偶數(shù)行組成,叫做偶場。之所以要這樣做,主要是因?yàn)樵贑RT顯象管上一秒鐘顯示25幀圖像時(shí),人眼感覺到連續(xù)性還是不太好,而且還有明顯的閃爍,一幀分成兩場后,場頻為50 Hz,圖像更加連續(xù)一些。當(dāng)然還有一些別的原因,與電路設(shè)計(jì)方面有關(guān)。
??? 我國的黑白視頻信號(hào)規(guī)定每幀圖像共625行,每場為312.5行,行頻15625 Hz,視頻帶寬6MHz。在每場的312.5行中,有一些行要用作場消隱,是不包含視頻信號(hào)的,按照CCIR656標(biāo)準(zhǔn)規(guī)定的行編號(hào)方法,奇場的行號(hào)為第1至312.5行,偶場的行號(hào)為第312.5至625行,其中,奇場的第23.5至310行包含有效的視頻信號(hào),共287.5行,偶場的第336至622.5行包含有效的視頻信號(hào),共287.5行。所以一幀中有效的總行數(shù)為576行,由最上面的半行加上中間的574行加上最下面的半行組成。(說到這里又要順便說個(gè)問題,有經(jīng)驗(yàn)的讀者在PC機(jī)上用視頻捕捉卡捕捉圖像的時(shí)候,如果分辨率設(shè)定為720點(diǎn)*576行,會(huì)發(fā)現(xiàn)最上面的行左邊半邊是黑色的,或者最下面的行右邊半邊是黑色的,就是因?yàn)橐粓鲋邪邪胄械臒o效行的原因。)
??? 上面說的是黑白視頻信號(hào),那么彩色視頻信號(hào)又是怎么回事呢?當(dāng)科學(xué)家們開始研究彩色電視的時(shí)候,黑白電視已經(jīng)大量使用了,所以
最好彩色電視信號(hào)能夠與黑白電視信號(hào)保持兼容,以便彩色電視信號(hào)在黑白電視機(jī)上能播放出黑白的圖像。這個(gè)問題是很困難的,因?yàn)樯刃盘?hào)也要占用較大的帶寬,而在電視射頻頻帶上,一個(gè)頻道挨著一個(gè)頻道,亮度信號(hào)(實(shí)際上還有調(diào)頻的伴音信號(hào))已經(jīng)把頻帶給塞滿了,幸運(yùn)的是,后來終于運(yùn)用壓縮亮度信號(hào)帶寬、大面積著色等技術(shù)解決了這個(gè)問題。從頻域的角度來看,色度信號(hào)(UV色差信號(hào))是插在亮度信號(hào)的頻譜的間隙之中的,具體的位置是插在4.43MHz的地方,帶寬1.3MHz。在接收機(jī)中,簡單地說,把收到的信號(hào)中的4.43MHz處的帶寬1.3MHz的信號(hào)取出來就成了色度信號(hào),而把收到的信號(hào)中的4.43MHz處的這個(gè)信號(hào)濾掉剩下的就是亮度信號(hào)。很多硬件工程師可能不容易理解這是什么意思,不過沒關(guān)系。下面我們從時(shí)域的角度來看看它們的一行的波形,如圖所示,黑白視頻的亮度信號(hào)采用了調(diào)幅制,一行的周期是64μs,其中顯示在屏幕上的信號(hào)占52μs,其余部分為行消隱、行同步頭。對于彩色信號(hào),還在行同步頭上疊加了一小段4.43MHz的副載波信號(hào),用作接收機(jī)中的4.43MHz信號(hào)的頻率和相位基準(zhǔn)。
??? 上面說的是彩色視頻信號(hào)怎么加到原來的黑白視頻信號(hào)中。那么彩色圖像是怎么還原和顯示出來的呢?我們知道,黑白圖像的像素只能用亮度(灰度)來描述。而彩色圖像的像素的描述要復(fù)雜一些,有很多不同的方法,比如在印刷行業(yè)中用的是CMYK(青、品紅、黃、黑)四色合成的方法,而在計(jì)算機(jī)或電視機(jī)的CRT顯象管中都是用的RGB(紅、綠、藍(lán))三基色合成的方法,我也不明白為什么要選這三種顏色,而沒選別的顏色,我猜想可能是因?yàn)槿搜郯琑GB三種色感細(xì)胞,所以用這三種基色能合成比較多的人眼能識(shí)別的彩色出來,或者因?yàn)檫@三種基色的熒光粉比較容易制造。通過RGB三基色來合成某種彩色,或者某種彩色怎樣分解為三基色,這個(gè)是大家都熟悉的。用RGB三基色來表示彩色的確很直觀,但是如果把這種方法用作圖像傳輸則絕不是一個(gè)好的方法。第一個(gè)缺點(diǎn)是與黑白圖像不兼容,把RGB三基色轉(zhuǎn)換為灰度的方法是:灰度=R*0.3+G*0.59+B*0.11,這個(gè)轉(zhuǎn)換過程顯然是比較復(fù)雜的。對于電視機(jī)而言,就意味著必須解碼出RGB信號(hào)才有可能得到黑白圖像,而黑白電視機(jī)沒有解碼功能,所以不能實(shí)現(xiàn)兼容。第二個(gè)缺點(diǎn)是占用太多帶寬,用RGB三基色表示圖像,每個(gè)分量的帶寬是均等的,都約等于亮度信號(hào)的帶寬,所以對于每個(gè)分量,都要用較大的帶寬來描述。第三個(gè)缺點(diǎn)是抗干擾能力差。由于G分量占有亮度值的59%,所以當(dāng)G受到干擾的時(shí)候,像素的亮度值會(huì)受到很大的影響,而人眼對亮度值的變化是十分敏感的,所以圖像主觀質(zhì)量會(huì)明顯下降?;谶@些原因,在視頻信號(hào)傳輸中采用的是YUV合成的方法。Y代表亮度信息,U代表藍(lán)色色差(就是藍(lán)色信號(hào)與亮度信號(hào)之間的差值),V代表紅色色差。我們來看看使用這種表示方法的優(yōu)點(diǎn)。第一個(gè)優(yōu)點(diǎn)是與黑白圖像兼容。假定一個(gè)像素是用YUV表示的,我們只要忽略UV分量,取出Y分量,就可以得到像素的亮度值,從而把彩色圖像轉(zhuǎn)換為黑白圖像。這樣很容易實(shí)現(xiàn)彩色電視信號(hào)與黑白電視信號(hào)的兼容。第二個(gè)優(yōu)點(diǎn)是節(jié)省帶寬。說這個(gè)問題的時(shí)候要先說說大面積著色原理。實(shí)驗(yàn)發(fā)現(xiàn),人眼對亮度信息是敏感的,主要通過亮度差別來分辨物體形狀的細(xì)節(jié),而對彩色信息是不敏感的,人眼區(qū)分不出物體顏色上的細(xì)小的變化,或者說人眼不容易覺察出來圖像的色彩的細(xì)節(jié)部分的變化。因此,可以對亮度信號(hào)用較高的采樣頻率采樣,而對色度信號(hào)用較低的采樣頻率采樣(或者用較低的量化深度),比如幾個(gè)相鄰的像素的亮度值不同,但是卻可以使用一個(gè)相同的色度值。這就是大面積著色原理?;谶@個(gè)原理,在電視信號(hào)傳輸中,U或V信號(hào)的帶寬遠(yuǎn)小于V信號(hào)的帶寬,這樣就節(jié)約了帶寬。換個(gè)方式來說,比如在計(jì)算機(jī)中,用RGB方式描述一個(gè)像素需要R、G、B共3個(gè)字節(jié)。而用YUV方式描述,則對于每2個(gè)像素,Y用2個(gè)字節(jié),U取相同的值,用一個(gè)字節(jié),V取相同的值,用一個(gè)字節(jié),平均每個(gè)像素2個(gè)字節(jié)?;蛘呙總€(gè)像素Y用一個(gè)字節(jié),U用半個(gè)字節(jié),V用半個(gè)字節(jié),共2個(gè)字節(jié)。第三個(gè)優(yōu)點(diǎn)是抗干擾能力強(qiáng)。由于亮度信號(hào)是單獨(dú)表示的,所以如果色差信號(hào)受到干擾,不會(huì)影響到亮度,主觀感覺噪聲不會(huì)明顯增加。
??? 在電視機(jī)中,彩色視頻信號(hào)首先分解為亮度信號(hào)Y和色度信號(hào),色度信號(hào)再分解為U色差信號(hào)和V色差信號(hào),最后由YUV三個(gè)分量經(jīng)過矩陣運(yùn)算變換為RGB信號(hào),以便在顯像管上顯示。那么YUV具體是怎樣變換為RGB呢?這個(gè)問題又叫做“彩色空間變換”,我將在本文的后面詳細(xì)地討論這個(gè)問題。
??? 通過前面的討論,我們已經(jīng)知道:黑白視頻信號(hào)帶寬6 MHz,由幀、場、行、像素等組成,像素用亮度值Y來描述。彩色視頻信號(hào)在黑白視頻信號(hào)中插入了一個(gè)帶寬1.3 MHz的色度信號(hào),由這個(gè)信號(hào)來得到UV色差信號(hào),最后把YUV變換為RGB來描述像素。
??? 現(xiàn)在我們來分析一下視頻信號(hào)的缺點(diǎn)。1、幀頻低。視頻信號(hào)的幀頻只有25 Hz,必然導(dǎo)致圖像閃爍。2、分辨率低。在一幀中有效的行只有576行。由于采用了隔行掃描,一幀圖像要由連續(xù)的兩場來拼合而成,而實(shí)際上很難保證兩場中的行準(zhǔn)確地錯(cuò)開(對準(zhǔn)間隙),這進(jìn)一步導(dǎo)致垂直方向的分辨能力損失。3、亮色串?dāng)_。亮度信號(hào)和色度信號(hào)混合在一起,解碼的時(shí)候不能很好地分開,導(dǎo)致亮度信號(hào)和色度信號(hào)互相干擾。4、缺乏改進(jìn)余地。除非重新制定新的標(biāo)準(zhǔn),否則前面提到的三個(gè)問題在現(xiàn)有基礎(chǔ)上都很難改進(jìn)。視頻信號(hào)格式有這么多缺點(diǎn),是因?yàn)槭墚?dāng)年制定這個(gè)標(biāo)準(zhǔn)時(shí)的技術(shù)條件制約造成的,而近年來通過在電視中加入一些數(shù)字處理的手段,比如倍頻掃描(100 Hz場頻)、使用數(shù)字梳狀濾波器等方法,電視的圖像質(zhì)量也得到一些提高。而現(xiàn)在正在研究的數(shù)字電視,是重新制定的全新的標(biāo)準(zhǔn),用以獲得膠片質(zhì)量的圖像,可能會(huì)徹底淘汰現(xiàn)在的視頻標(biāo)準(zhǔn)和電視設(shè)備,當(dāng)然這是將來的事情,也不是我討論的主題。
??? 我想討論的是“數(shù)字視頻”,而前面說的都是模擬視頻,這是因?yàn)槲宜f的數(shù)字視頻是現(xiàn)有的模擬視頻的數(shù)字表示,先搞清楚了模擬視頻,下面的討論就很簡單了。
??? 視頻信號(hào)起初是以模擬信號(hào)的形式保存在錄像磁帶上的,而現(xiàn)在隨著數(shù)字技術(shù)的發(fā)展,可以變成數(shù)字信號(hào)保存在光盤或計(jì)算機(jī)硬盤中,當(dāng)然這些離不開功能強(qiáng)大的計(jì)算機(jī),實(shí)際上,在嵌入式領(lǐng)域,數(shù)字視頻也是可以應(yīng)用的,比如用單片機(jī)或DSP來處理數(shù)字視頻數(shù)據(jù)。下面,我們就來討論數(shù)字視頻數(shù)據(jù)的格式、轉(zhuǎn)換、保存、顯示等方面的問題。
??? 從哪個(gè)問題開始呢?我們先來討論一下模擬視頻信號(hào)解碼并量化成連續(xù)的數(shù)字視頻流后所包含的一些信號(hào)元素。前面我們已經(jīng)討論了,模擬視頻信號(hào)每秒25幀,每幀周期40ms,而每幀又分為2場,每場20ms,先輸出的是奇場,然后是偶場,奇場的行號(hào)為第1至312.5行,偶場的行號(hào)為第312.5至625行,其中,奇場的第23.5至310行包含有效的視頻信號(hào),偶場的第336至622.5行包含有效的視頻信號(hào)。把模擬視頻信號(hào)解碼為YUV分量后,分別進(jìn)行A/D量化采樣,轉(zhuǎn)換為數(shù)字視頻流,時(shí)間上也應(yīng)該是按上面的順序依次輸出。有幾個(gè)相關(guān)的國際標(biāo)準(zhǔn)對此作了一些約定。比如1994年國際無線電咨詢委員會(huì)出臺(tái)了CCIR601標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)主要是針對演播室的要求制定的,其中規(guī)定亮度信號(hào)的采樣頻率是13.5 MHz,色度信號(hào)的采樣頻率是6.75 MHz,采用8位PCM編碼。這樣,每行的Y采樣數(shù)為864個(gè),其中有效的Y采樣數(shù)為720個(gè)。而每行的U或V采樣數(shù)為432個(gè),有效的U或V采樣數(shù)為360個(gè)。平均描述每個(gè)像素的YUV的位數(shù)分別為8bit、4bit、4bit,又叫做YUV422編碼方案(當(dāng)然還有很多別的方案,如YUV411等)。國際無線電咨詢委員會(huì)還出臺(tái)了CCIR656建議,其中規(guī)定視頻數(shù)據(jù)的量化值中的0和255保留不用,而量化數(shù)據(jù)串行輸出的順序是:U0、Y0、V0、Y1,U2,Y2,V2,Y3,U4,Y5,V4,Y6,如此循環(huán)。通過上面的討論,我們可以看出,數(shù)字視頻流應(yīng)包含的元素有:奇偶場指示信號(hào)FI(有的稱為ODD)、場同步信號(hào)、行同步信號(hào)、像素時(shí)鐘、YUV數(shù)據(jù)輸出。在此我們順便計(jì)算一下數(shù)字視頻流的數(shù)據(jù)量,每秒的數(shù)據(jù)量=(720像素*576行*25幀)*2字節(jié)=20736000字節(jié),數(shù)據(jù)率約165Mbps,由此可見數(shù)字視頻的數(shù)據(jù)量之大,數(shù)據(jù)率之高!
??? 可以想象,保存和描述數(shù)字視頻流的最簡單辦法當(dāng)然就是記錄和描述連續(xù)的一幀幀的靜止圖像。保存靜止圖像的最簡單格式是BMP格式,就是位圖。我們現(xiàn)在就來分析一下BMP文件格式。BMP文件記錄圖像的方式實(shí)際上有很多種,甚至可以直接在其中記錄YUV分量,但是我不準(zhǔn)備討論那么多。BMP文件由文件頭、圖像特征描述、顏色表、圖像數(shù)據(jù)四部分構(gòu)成。為了簡單起見,下面用的是VB的語法,下面用到的數(shù)字沒特別說明的都是十進(jìn)制表示。
??? BMP文件頭數(shù)據(jù)結(jié)構(gòu)如下:
??? Type BitMapFileHeader?????????????? ‘共14字節(jié)
??????? bfType As Integer?????????????? ‘2個(gè)字節(jié),填入字符”BM”,即 4D42(16進(jìn)制)
??????? bfSize As Long????????????????? ‘4個(gè)字節(jié),填入整個(gè)BMP文件的字節(jié)數(shù)大小
??????? bfReserverd1 As Integer???????? ‘2個(gè)字節(jié),保留,填入0
??????? bfReserverd2 As Integer???????? ‘2個(gè)字節(jié),保留,填入0
??????? bfOffBits As Long?????????????? ‘4個(gè)字節(jié),表示圖像數(shù)據(jù)在整個(gè)BMP文件中的起始位置
??? End Type
??? 圖像特征描述塊的數(shù)據(jù)結(jié)構(gòu)如下:
??? Type BitMapInfoHeader?????????????? ‘共40字節(jié)
??????? biSize As Long????????????????? ‘4個(gè)字節(jié),表示本結(jié)構(gòu)的字節(jié)數(shù)大小,填入固定的值40
??????? biWidth As Long???????????????? ‘4個(gè)字節(jié),填入圖像水平方向像素?cái)?shù),其值必須是4的整數(shù)倍
??????? biHeight As Long??????????????? ‘4個(gè)字節(jié),填入圖像垂直方向像素?cái)?shù)
??????? biPlanes As Integer???????????? ‘2個(gè)字節(jié),填入固定的值1
??????? biBitCount As Integer?????????? ‘2個(gè)字節(jié),表示每個(gè)像素的位數(shù),灰度圖填8,24位真彩圖填24
??????? biCompression As Long?????????? ‘4個(gè)字節(jié),填入0表示不壓縮
??????? biXSizeImage As Long??????????? ‘4個(gè)字節(jié),表示圖像的像素總數(shù)
??????? biXPelsPerMeter As Long???????? ‘4個(gè)字節(jié),填入固定值3780
??????? biYPelsPerMeter As Long???????? ‘4個(gè)字節(jié),填入固定值3780
??????? biClrUsed As Long?????????????? ‘4個(gè)字節(jié),填入固定值0
??????? biClrlmportant As Long????????? ‘4個(gè)字節(jié),填入固定值0
??? End Type
??? 在BMP中記錄的圖像數(shù)據(jù)不一定就是RGB或Y的值,可以只是一個(gè)”編號(hào)”,而這個(gè)”編號(hào)”對應(yīng)的實(shí)際RGB顏色要從顏色表中查出來。24位真彩圖因?yàn)橹苯佑涗浟薘GB值,所以是不需要顏色表的,因此在24位真彩BMP文件中沒有顏色表這部分,而其它的情況下就必須有一個(gè)顏色表。顏色表一共256項(xiàng),每一項(xiàng)4個(gè)字節(jié),前三個(gè)字節(jié)分別代表B、G、R值,最后一個(gè)字節(jié)為0。我們來以8位灰度圖舉例說明,8位灰度圖是黑白圖像,記錄的實(shí)際上就是亮度分量Y,根據(jù)RGB三基色原理,R=Y、B=Y、G=Y的時(shí)候合成的就是一個(gè)亮度為Y的灰色像素,極限的情況,當(dāng)R=255、G=255、B=255時(shí)表示最白的像素,當(dāng)R=0、G=0、B=0時(shí)表示最黑的像素。因此顏色表的值應(yīng)為:0,0,0,0,1,1,1,0,2,2,2,0,3,3,3,0……..255,255,255,0。
??? BMP文件的最后部分記錄圖像數(shù)據(jù),也是數(shù)據(jù)量最大的部分。一幀圖像的像素?cái)?shù)據(jù)填入BMP文件的順序是:先填最下面的一行,從左到右依次一個(gè)個(gè)像素依次填入,這樣一行行一直到填完最上面的一行。對于8位灰度圖,對每個(gè)像素?cái)?shù)據(jù)只需填入一個(gè)字節(jié)的Y值。對于24位真彩圖,要填3個(gè)字節(jié),注意:先填B值,再填G值,最后是R值。
??? 總結(jié)一下:灰度圖的BMP文件由“文件頭+圖像特征描述塊+顏色表+圖像數(shù)據(jù)Y”組成。24位真彩圖由“文件頭+圖像特征描述塊+圖像數(shù)據(jù)BGR”組成。如果讀者對于這些不熟悉,可以在WINDOWS的畫圖工具中畫一副圖,保存為上面的格式,然后用二進(jìn)制編輯工具比如UltraEdit 來觀察和分析文件的內(nèi)容。關(guān)于BMP文件的更多知識(shí),讀者可以進(jìn)一步查閱資料。
??? 現(xiàn)在再回頭討論一下視頻保存為BMP圖像的格式。對于數(shù)字視頻流,由于一幀中有效的行數(shù)是固定的576行,所以如果把它轉(zhuǎn)換成576行的BMP圖像,當(dāng)然最簡單,而且可以取得較好的效果。而如果取別的值,比如600行或者400行,那么就必須進(jìn)行插值運(yùn)算,依據(jù)現(xiàn)有的行計(jì)算出假想中的行,這樣的轉(zhuǎn)換其運(yùn)算量很大,對圖像的質(zhì)量也有一定損失,一般要用專門的硬件來實(shí)現(xiàn)(一般高檔的視頻捕捉卡帶有這樣的功能)。那么是不是說只能轉(zhuǎn)換成576行呢?當(dāng)然也不是,比如可以轉(zhuǎn)換成288行,隔一行取一行,實(shí)際上就是只采集了一場。另外還可以丟棄一些行,比如只取中間的480行,而上下各丟掉48行,這樣得到的圖像雖然被裁剪了,但清晰度不會(huì)下降。再來看看一行中應(yīng)該采多少個(gè)像素。由于模擬視頻信號(hào)幅值在一行中是連續(xù)變化的,因此采樣數(shù)沒有行數(shù)那樣的限制。比如我們可以采400個(gè)像素,當(dāng)然也可以采401個(gè)像素,這取決于我們對水平分辨率的要求,一行中所采得的像素越多,則分辨率越高,但需要注意亮度信號(hào)的帶寬是有限的,采樣率高到一定程度后,再提高就沒有意義了。前面說了,CCIR601標(biāo)準(zhǔn)的規(guī)定是一行采720個(gè)有效像素。除了這個(gè)標(biāo)準(zhǔn)外,比較常用的另一種標(biāo)準(zhǔn)是一行采768個(gè)有效像素。說到這兒,順便說一下,在計(jì)算機(jī)上用視頻捕捉卡捕捉圖像時(shí),驅(qū)動(dòng)程序提供的圖像格式是固定的幾種,比如768*576、720*576、384*288、320*288等,為什么只提供這些格式,以前不明白的讀者現(xiàn)在知道了吧!
??? 現(xiàn)在我們知道了模擬視頻變換為數(shù)字視頻流后的格式,也知道了怎樣創(chuàng)建和保存BMP文件,但是我們還不能把從數(shù)字視頻流中截取的圖像數(shù)據(jù)保存為BMP文件,因?yàn)閿?shù)字視頻流是用YUV描述的,而BMP文件是用RGB描述的。它們之間怎么轉(zhuǎn)換呢?這就是色彩空間轉(zhuǎn)換的問題。
??? RGB和YUV的對應(yīng)關(guān)系用代數(shù)方程式表示如下:
??????? Y = 0.299R + 0.587G + 0.114B
??????? U = - 0.147R- 0.289G + 0.436B
??????? V = 0.615R - 0.515G - 0.100B
??? 或者:
??????? R=Y+1.14V
??????? B=Y+2.03U
??????? G=Y-0.58V-0.39U
??? CCIR601標(biāo)準(zhǔn)中定義的值與上面略有不同。在考慮了人的視覺系統(tǒng)和CRT顯示器的非線性特性之后,推薦的轉(zhuǎn)換方程如下:
??????? R = Y + 1.371 V
??????? G = Y - 0.698 *V - 0.336 U
??????? B = Y + 1.732 U
??? 不過讀者要注意,上面的方程中的UV值因?yàn)榉?hào)擴(kuò)展的原因平移了128,實(shí)際應(yīng)該使用下面的這個(gè)修正的方程:
??????? R = Y + 1.371 * (V - 128)
??????? G = Y - 0.698 * (V - 128) - 0.336 * (U - 128)
??????? B = Y + 1.732 * (U - 128)
??? 對于上面的方程有幾點(diǎn)說明:1、有一些采集卡會(huì)指定U、V為有符號(hào)數(shù)或無符號(hào)數(shù),使用上面的方程時(shí)不要考慮這些,而認(rèn)為Y、U、V是從采集卡得到的一個(gè)0到255之間的無符號(hào)的值。2、用上面的公式計(jì)算出的R、G、B值可能會(huì)超出0到255的范圍,應(yīng)該在計(jì)算完后進(jìn)行檢查,如果值小于0,則修正為0,如果值大于255,則修正為255。上面的轉(zhuǎn)換方法經(jīng)過我的實(shí)際使用,證明其效果是良好的。
??? 空談了這么多,來點(diǎn)更直觀的吧!我們來看看一幀實(shí)際的圖像。右邊這幀圖像是用武漢萬德數(shù)碼技術(shù)有限公司生產(chǎn)的VC302嵌入式視頻捕捉卡得到的,信號(hào)源是電視機(jī)的視頻輸出。圖像的像素分辨率是320*240(采集了一場中的288行,每行360個(gè)像素,但只從中截取了240行,每行截取了320個(gè)像素),第一幅是Y分量描述出的黑白圖像,第二幅是U分量描述,第三幅是V分量描述,第四幅是YUV合成后的彩色圖像。黑白圖像與如此模糊的UV分量圖合成后竟然可以得到色彩這么真實(shí)的彩色圖像,你是不是有點(diǎn)難以相信?我也不敢相信,但這就是事實(shí)!從這些圖的比較中我們可以得出這樣的結(jié)論:1、Y分量基本上保留了彩色圖像的輪廓細(xì)節(jié),其分辨率是較高的。2、UV分量主觀感覺十分模糊,分辨率低,只是大約地描述了整塊的色彩,這正是所謂的“大面積著色”。3、我們在觀察合成的彩色圖像的時(shí)候并沒有覺得圖像的色彩模糊,這說明人眼對色彩細(xì)節(jié)的分辨能力是多么差!
??? 接著,我們來討論一下圖像的顯示問題。這個(gè)問題屬于軟件的范疇,大部分讀者都比較熟悉,我不準(zhǔn)備說太多。一種方法是把得到的YUV數(shù)據(jù)轉(zhuǎn)換成RGB后來顯示。另一種辦法是直接用YUV數(shù)據(jù)來顯示,現(xiàn)在的顯卡都具備把YUV數(shù)據(jù)通過硬件直接轉(zhuǎn)換為RGB的能力,通過使用Direct Draw技術(shù),把YUV數(shù)據(jù)直接提交給顯卡,這樣就省掉了軟件轉(zhuǎn)換所花費(fèi)的CPU時(shí)間。在嵌入式領(lǐng)域,可以使用數(shù)字接口的液晶顯示器顯示,要根據(jù)其具體情況來處理。
??? 最后,說一下視頻開發(fā)中常見的一些問題。1、首先要注意區(qū)分視頻信號(hào)的制式。我國的電視臺(tái)發(fā)送的信號(hào)是PAL制信號(hào),所以電視機(jī)的視頻輸出是PAL制。但是電視機(jī)也可以接受其它制式的信號(hào),比如VCD機(jī)的視頻輸出有很多是NTSC制的,在電視機(jī)上也可以播放。在我國市場上銷售的攝像機(jī)(我說的是工業(yè)攝像機(jī),而不是家用的攝錄像機(jī))大部分是PAL制的,但也有的是NTSC制,而且有的可以通過機(jī)身上的撥碼開關(guān)來設(shè)定制式。2、有些DVD機(jī)采用了一些特別的辦法來提高清晰度,比如所謂的“逐行掃描”,它們輸出的信號(hào)與標(biāo)準(zhǔn)信號(hào)相比有一些差別,在電視機(jī)上播放是不會(huì)有問題的,但是一些采集卡卻不能識(shí)別,導(dǎo)致采集的圖像紊亂,所以在調(diào)試過程中要慎用DVD作信號(hào)源。3、分辨率的問題。分辨率一般是指垂直方向能分辨的等間隔排列的黑白條紋的最大線數(shù)。我們先來看看模擬視頻,視頻信號(hào)行正程的時(shí)間是52μs,而視頻信號(hào)的帶寬最大6 MHz,假定1Hz可以描述2個(gè)像素點(diǎn),這樣算來最多的線數(shù)=52μ*6M*2=624線。而實(shí)際上在編輯、存儲(chǔ)、傳輸、還原過程中會(huì)有很多損失,所以電視機(jī)上的圖像分辨率是遠(yuǎn)低于這個(gè)值的,一般約在240-340線左右。對于攝像機(jī)的視頻輸出,有的黑白攝像機(jī)標(biāo)稱分辨率高達(dá)600線,理論上這個(gè)分辨率是有可能達(dá)到的。而彩色攝像機(jī)標(biāo)稱的分辨率有380線、420線、480線等規(guī)格。再來看看數(shù)字視頻流,數(shù)字視頻中一行采樣的像素?cái)?shù)是固定的,CCIR601的規(guī)定是720個(gè)像素,如果用線來表示,極限值是720線,可見大于模擬視頻的分辨率。 在安防監(jiān)控工程中,最常用的視頻源是420線或480線的彩色攝像機(jī),扣除傳輸過程中的損失,最后能達(dá)到380線就不錯(cuò)了,保存為圖像時(shí)每行取360像素比較恰當(dāng),再增加像素?cái)?shù),清晰度雖然仍有提高,但已不太明顯。在工業(yè)領(lǐng)域,有時(shí)對分辨率有特別苛刻的要求,這時(shí)采用標(biāo)準(zhǔn)視頻信號(hào)輸出的攝像機(jī)已經(jīng)不可能滿足要求,需要采用非標(biāo)準(zhǔn)的攝像機(jī),它們大多是逐行掃描的,采用專門的高分辨率CCD面陣傳感器,常見的分辨率如2048行*2048像素/幀,幀頻可以高達(dá)100Hz,當(dāng)然這樣的視頻信號(hào)無法在電視機(jī)上顯示出來,一般是采用專用的采集卡采集,在計(jì)算機(jī)上處理。4、場采集與幀采集。這個(gè)問題比較特別,理論上講,攝像機(jī)首先應(yīng)拍取一幀圖像,然后分解出兩場,還原的時(shí)候,兩場再拼合為一幀。但實(shí)際上,常不是這樣的,有的像機(jī)為了簡化設(shè)計(jì),是一場一場單獨(dú)采集的,兩場之間有20ms的時(shí)間差,所以兩場拼合的時(shí)候,圖像上活動(dòng)的部分會(huì)出現(xiàn)錯(cuò)位。另外,一些視頻編輯設(shè)備也是對場單獨(dú)處理的,所以也存在這個(gè)問題。看電視的時(shí)候,因?yàn)閳D像連續(xù)變化,所以我們只會(huì)感到圖像是活動(dòng)的,但是如果把圖像截取一幀下來看,錯(cuò)位就十分明顯。為了避免這個(gè)問題,在對分辨率要求不高的時(shí)候可以單場采集,即連續(xù)的兩場中只取一場,事實(shí)上很多采集卡也正是這樣處理的。另外可以在只采一場的同時(shí)在水平方向采集較多的像素,比如共采288行,但每行采720個(gè)像素,這樣至少在水平方向有較高的分辨率,可以改善模式識(shí)別的效果。而對分辨率要求更高的時(shí)候就只好使用非標(biāo)準(zhǔn)攝像機(jī)了。
評論
查看更多