新聞中心

數(shù)字電路視頻教程

作者: 時(shí)間:2011-04-24 來(lái)源:網(wǎng)絡(luò) 收藏

由于工作的需要,我在數(shù)字視頻處理方面做了幾年的開(kāi)發(fā),我所說(shuō)的開(kāi)發(fā)是指應(yīng)用層的開(kāi)發(fā),而不是底層的研究。先后開(kāi)發(fā)出了幾個(gè)產(chǎn)品,比如數(shù)字接口攝像頭、圖像采集卡、TV-VGA視頻轉(zhuǎn)換器、造紙行業(yè)用的在線斑點(diǎn)檢測(cè)儀、數(shù)字偽彩色處理儀等,在開(kāi)發(fā)中也了解了一些關(guān)于CMOS面陣傳感器、CCD面陣傳感器、CCD線陣傳感器、高速攝像、高分辨率攝像、視頻編解碼、圖像壓縮等方面的知識(shí),目前我還在繼續(xù)做類似的開(kāi)發(fā)。前面說(shuō)的產(chǎn)品都有一定的銷量,所以經(jīng)常會(huì)收到用戶打來(lái)的電話,大多數(shù)是咨詢一些很基本的數(shù)字視頻知識(shí)。數(shù)字視頻無(wú)疑是復(fù)雜的,牽扯到很多方面,所以我有了寫這篇文章的想法,我希望用盡量通俗的方式來(lái)說(shuō)明一些基本的問(wèn)題,以期能對(duì)讀者的開(kāi)發(fā)工作有一些幫助(說(shuō)明一下:為了盡量地把問(wèn)題說(shuō)得簡(jiǎn)單一點(diǎn),敘述中我作了一些簡(jiǎn)化,比如把U和Cb都說(shuō)成U、V和Cr都說(shuō)成V等。另外還需要說(shuō)明的是,下面我所說(shuō)的模擬視頻的各個(gè)參數(shù)都是針對(duì)我國(guó)的電視標(biāo)準(zhǔn)——PAL制式而言的,而其它的電視制式則略有差別。讀者在做進(jìn)一步研究時(shí)請(qǐng)注意)。因?yàn)槲业乃绞钟邢蓿?錯(cuò)漏難以避免,有興趣的讀者可以寫信和我一起來(lái)探討。
視頻簡(jiǎn)單地說(shuō)就是活動(dòng)圖像。電影也是活動(dòng)圖像,電影把大量靜止圖像記錄在膠片上,一張一張地連續(xù)顯示出來(lái),就成了我們看到的電影。對(duì)于電視視頻,每秒鐘包含幾十幀靜止圖像,每一幀靜止圖像由幾百個(gè)行組成,每一行又由幾百個(gè)像素點(diǎn)組成。1秒鐘包含的圖像幀數(shù)為幀頻,1秒鐘包含的總行數(shù)為行頻,1秒鐘包含的總像素?cái)?shù)實(shí)際上就是相當(dāng)于視頻帶寬。

首先來(lái)說(shuō)說(shuō)模擬視頻。
遙想起來(lái),在當(dāng)年有限的條件下,用電子管做出電視機(jī)的前輩們實(shí)在是令人佩服的,但是,用現(xiàn)在的眼光來(lái)看,當(dāng)年的電視技術(shù)又實(shí)在是很簡(jiǎn)陋的。我國(guó)的黑白視頻信號(hào)幀頻為25 Hz,就是說(shuō)每秒顯示25幅圖像,之所以規(guī)定為25 Hz,而不是其它的某個(gè)值,主要是因?yàn)閮蓚€(gè)原因。一個(gè)與人的視覺(jué)生理特點(diǎn)有關(guān),當(dāng)圖像的刷新速度達(dá)到5幀/秒的時(shí)候,人開(kāi)始感覺(jué)圖像是活動(dòng)的,而達(dá)到24幀/秒的時(shí)候,人感覺(jué)圖像是完全連續(xù)和流暢的(電影所使用的幀頻就是24 Hz),所以視頻信號(hào)幀頻應(yīng)大于等于24 Hz。理論上來(lái)說(shuō)幀頻越高越好,但是幀頻越高,對(duì)電路的要求也越高,技術(shù)越復(fù)雜,成本也越高(現(xiàn)在有的電腦彩顯幀頻已達(dá)到200Hz),在當(dāng)時(shí)的條件下,只能選擇一個(gè)大于24的盡量小的值。另一個(gè)原因是因?yàn)槲覈?guó)的電網(wǎng)頻率是50Hz,當(dāng)采用25 Hz幀頻時(shí),隔行掃描時(shí)的場(chǎng)頻為50 Hz,正好與電網(wǎng)同頻,這樣,電源對(duì)圖像的干擾是固定的,人眼不容易感覺(jué)出來(lái),或者換個(gè)角度說(shuō):電源就可以不必做得那么精密(那個(gè)時(shí)候開(kāi)關(guān)電源還很少使用,整流電源缺乏穩(wěn)壓措施,紋波很大)。所以選擇了25 Hz幀頻。說(shuō)到這里,又要說(shuō)說(shuō)“場(chǎng)頻”。電視在顯示圖像的時(shí)候,把一幀分成了兩場(chǎng)來(lái)顯示,一個(gè)場(chǎng)由幀中的奇數(shù)行組成,叫做奇場(chǎng),另一個(gè)場(chǎng)由幀中的偶數(shù)行組成,叫做偶場(chǎng)。之所以要這樣做,主要是因?yàn)樵贑RT顯象管上一秒鐘顯示25幀圖像時(shí),人眼感覺(jué)到連續(xù)性還是不太好,而且還有明顯的閃爍,一幀分成兩場(chǎng)后,場(chǎng)頻為50 Hz,圖像更加連續(xù)一些。當(dāng)然還有一些別的原因,與電路設(shè)計(jì)方面有關(guān)。
我國(guó)的黑白視頻信號(hào)規(guī)定每幀圖像共625行,每場(chǎng)為312.5行,行頻15625 Hz,視頻帶寬6MHz。在每場(chǎng)的312.5行中,有一些行要用作場(chǎng)消隱,是不包含視頻信號(hào)的,按照CCIR656標(biāo)準(zhǔn)規(guī)定的行編號(hào)方法,奇場(chǎng)的行號(hào)為第1至312.5行,偶場(chǎng)的行號(hào)為第312.5至625行,其中,奇場(chǎng)的第23.5至310行包含有效的視頻信號(hào),共287.5行,偶場(chǎng)的第336至622.5行包含有效的視頻信號(hào),共287.5行。所以一幀中有效的總行數(shù)為576行,由最上面的半行加上中間的574行加上最下面的半行組成。(說(shuō)到這里又要順便說(shuō)個(gè)問(wèn)題,有經(jīng)驗(yàn)的讀者在PC機(jī)上用視頻捕捉卡捕捉圖像的時(shí)候,如果分辨率設(shè)定為720點(diǎn)*576行,會(huì)發(fā)現(xiàn)最上面的行左邊半邊是黑色的,或者最下面的行右邊半邊是黑色的,就是因?yàn)橐粓?chǎng)中包含有半行的無(wú)效行的原因。)

上面說(shuō)的是黑白視頻信號(hào),那么彩色視頻信號(hào)又是怎么回事呢?當(dāng)科學(xué)家們開(kāi)始研究彩色電視的時(shí)候,黑白電視已經(jīng)大量使用了,所以最好彩色電視信號(hào)能夠與黑白電視信號(hào)保持兼容,以便彩色電視信號(hào)在黑白電視機(jī)上能播放出黑白的圖像。這個(gè)問(wèn)題是很困難的,因?yàn)樯刃盘?hào)也要占用較大的帶寬,而在電視射頻頻帶上,一個(gè)頻道挨著一個(gè)頻道,亮度信號(hào)(實(shí)際上還有調(diào)頻的伴音信號(hào))已經(jīng)把頻帶給塞滿了,幸運(yùn) 的是,后來(lái)終于運(yùn)用壓縮亮度信號(hào)帶寬、大面積著色等技術(shù)解決了這個(gè)問(wèn)題。從頻域的角度來(lái)看,色度信號(hào)(UV色差信號(hào))是插在亮度信號(hào)的頻譜的間隙之中的,具體的位置是插在4.43MHz的地方,帶寬1.3MHz。在接收機(jī)中,簡(jiǎn)單地說(shuō),把收到的信號(hào)中的4.43MHz處的帶寬1.3MHz的信號(hào)取出來(lái)就成了色度信號(hào),而把收到的信號(hào)中的4.43MHz處的這個(gè)信號(hào)濾掉剩下的就是亮度信號(hào)。很多硬件工程師可能不容易理解這是什么意思,不過(guò)沒(méi)關(guān)系。下面我們從時(shí)域的角度來(lái)看看它們的一行的波形,如圖所示,黑白視頻的亮度信號(hào)采用了調(diào)幅制,一行的周期是64μs,其中顯示在屏幕上的信號(hào)占52μs,其余部分為行消隱、行同步頭。對(duì)于彩色信號(hào),還在行同步頭上疊加了一小段4.43MHz的副載波信號(hào),用作接收機(jī)中的4.43MHz信號(hào)的頻率和相位基準(zhǔn)。
上面說(shuō)的是彩色視頻信號(hào)怎么加到原來(lái)的黑白視頻信號(hào)中。那么彩色圖像是怎么還原和顯示出來(lái)的呢?我們知道,黑白圖像的像素只能用亮度(灰度)來(lái)描述。而彩色圖像的像素的描述要復(fù)雜一些,有很多不同的方法,比如在印刷行業(yè)中用的是CMYK(青、品紅、黃、黑)四色合成的方法,而在計(jì)算機(jī)或電視機(jī)的CRT顯象管中都是用的RGB(紅、綠、藍(lán))三基色合成的方法,我也不明白為什么要選這三種顏色,而沒(méi)選別的顏色,我猜想可能是因?yàn)槿搜郯琑GB三種色感細(xì)胞,所以用這三種基色能合成比較多的人眼能識(shí)別的彩色出來(lái),或者因?yàn)檫@三種基色的熒光粉比較容易制造。通過(guò)RGB三基色來(lái)合成某種彩色,或者某種彩色怎樣分解為三基色,這個(gè)是大家都熟悉的。用RGB三基色來(lái)表示彩色的確很直觀,但是如果把這種方法用作圖像傳輸則絕不是一個(gè)好的方法。第一個(gè)缺點(diǎn)是與黑白圖像不兼容,把RGB三基色轉(zhuǎn)換為灰度的方法是:灰度=R*0.3+G*0.59+B*0.11,這個(gè)轉(zhuǎn)換過(guò)程顯然是比較復(fù)雜的。對(duì)于電視機(jī)而言,就意味著必須解碼出RGB信號(hào)才有可能得到黑白圖像,而黑白電視機(jī)沒(méi)有解碼功能,所以不能實(shí)現(xiàn)兼容。第二個(gè)缺點(diǎn)是占用太多帶寬,用RGB三基色表示圖像,每個(gè)分量的帶寬是均等的,都約等于亮度信號(hào)的帶寬,所以對(duì)于每個(gè)分量,都要用較大的帶寬來(lái)描述。第三個(gè)缺點(diǎn)是抗干擾能力差。由于G分量占有亮度值的59%,所以當(dāng)G受到干擾的時(shí)候,像素的亮度值會(huì)受到很大的影響,而人眼對(duì)亮度值的變化是十分敏感的,所以圖像主觀質(zhì)量會(huì)明顯下降?;谶@些原因,在視頻信號(hào)傳輸中采用的是YUV合成的方法。Y代表亮度信息,U代表藍(lán)色色差(就是藍(lán)色信號(hào)與亮度信號(hào)之間的差值),V代表紅色色差。我們來(lái)看看使用這種表示方法的優(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é)省帶寬。說(shuō)這個(gè)問(wèn)題的時(shí)候要先說(shuō)說(shuō)大面積著色原理。實(shí)驗(yàn)發(fā)現(xiàn),人眼對(duì)亮度信息是敏感的,主要通過(guò)亮度差別來(lái)分辨物體形狀的細(xì)節(jié),而對(duì)彩色信息是不敏感的,人眼區(qū)分不出物體顏色上的細(xì)小的變化,或者說(shuō)人眼不容易覺(jué)察出來(lái)圖像的色彩的細(xì)節(jié)部分的變化。因此,可以對(duì)亮度信號(hào)用較高的采樣頻率采樣,而對(duì)色度信號(hào)用較低的采樣頻率采樣(或者用較低的量化深度),比如幾個(gè)相鄰的像素的亮度值不同,但是卻可以使用一個(gè)相同的色度值。這就是大面積著色原理。基于這個(gè)原理,在電視信號(hào)傳輸中,U或V信號(hào)的帶寬遠(yuǎn)小于V信號(hào)的帶寬,這樣就節(jié)約了帶寬。換個(gè)方式來(lái)說(shuō),比如在計(jì)算機(jī)中,用RGB方式描述一個(gè)像素需要R、G、B共3個(gè)字節(jié)。而用YUV方式描述,則對(duì)于每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ì)影響到亮度,主觀感覺(jué)噪聲不會(huì)明顯增加。
在電視機(jī)中,彩色視頻信號(hào)首先分解為亮度信號(hào)Y和色度信號(hào),色度信號(hào)再分解為U色差信號(hào)和V色差信號(hào),最后由YUV三個(gè)分量經(jīng)過(guò)矩陣運(yùn)算變換為RGB信號(hào),以便在顯像管上顯示。那么YUV具體是怎樣變換為RGB呢?這個(gè)問(wèn)題又叫做“彩色空間變換”,我將在本文的后面詳細(xì)地討論這個(gè)問(wèn)題。
通過(guò)前面的討論,我們已經(jīng)知道:黑白視頻信號(hào)帶寬6 MHz,由幀、場(chǎng)、行、像素等組成,像素用亮度值Y來(lái)描述。彩色視頻信號(hào)在黑白視頻信號(hào)中插入了一個(gè)帶寬1.3 MHz的色度信號(hào),由這個(gè)信號(hào)來(lái)得到UV色差信號(hào),最后把YUV變換為RGB來(lái)描述像素。
現(xiàn)在我們來(lái)分析一下視頻信號(hào)的缺點(diǎn)。1、幀頻低。視頻信號(hào)的幀頻只有25 Hz,必然導(dǎo)致圖像閃爍。2、分辨率低。在一幀中有效的行只有576行。由于采用了隔行掃描,一幀圖像要由連續(xù)的兩場(chǎng)來(lái)拼合而成,而實(shí)際上很難保證兩場(chǎng)中的行準(zhǔn)確地錯(cuò)開(kāi)(對(duì)準(zhǔn)間隙),這進(jìn)一步導(dǎo)致垂直方向的分辨能力損失。3、亮色串?dāng)_。亮度信號(hào)和色度信號(hào)混合在一起,解碼的時(shí)候不能很好地分開(kāi),導(dǎo)致亮度信號(hào)和色度信號(hào)互相干擾。4、缺乏改進(jìn)余地。除非重新制定新的標(biāo)準(zhǔn),否則前面提到的三個(gè)問(wèn)題在現(xiàn)有基礎(chǔ)上都很難改進(jìn)。視頻信號(hào)格式有這么多缺點(diǎn),是因?yàn)槭墚?dāng)年制定這個(gè)標(biāo)準(zhǔn)時(shí)的技術(shù)條件制約造成的,而近年來(lái)通過(guò)在電視中加入一些數(shù)字處理的手段,比如倍頻掃描(100 Hz場(chǎng)頻)、使用數(shù)字梳狀濾波器等方法,電視的圖像質(zhì)量也得到一些提高。而現(xiàn)在正在研究的數(shù)字電視,是重新制定的全新的標(biāo)準(zhǔn),用以獲得膠片質(zhì)量的圖像,可能會(huì)徹底淘汰現(xiàn)在的視頻標(biāo)準(zhǔn)和電視設(shè)備,當(dāng)然這是將來(lái)的事情,也不是我討論的主題。
我想討論的是“數(shù)字視頻”,而前面說(shuō)的都是模擬視頻,這是因?yàn)槲宜f(shuō)的數(shù)字視頻是現(xiàn)有的模擬視頻的數(shù)字表示,先搞清楚了模擬視頻,下面的討論就很簡(jiǎn)單了。

視頻信號(hào)起初是以模擬信號(hào)的形式保存在錄像磁帶上的,而現(xiàn)在隨著數(shù)字技術(shù)的發(fā)展,可以變成數(shù)字信號(hào)保存在光盤或計(jì)算機(jī)硬盤中,當(dāng)然這些離不開(kāi)功能強(qiáng)大的計(jì)算機(jī),實(shí)際上,在嵌入式領(lǐng)域,數(shù)字視頻也是可以應(yīng)用的,比如用單片機(jī)或DSP來(lái)處理數(shù)字視頻數(shù)據(jù)。下面,我們就來(lái)討論數(shù)字視頻數(shù)據(jù)的格式、轉(zhuǎn)換、保存、顯示等方面的問(wèn)題。
從哪個(gè)問(wèn)題開(kāi)始呢?我們先來(lái)討論一下模擬視頻信號(hào)解碼并量化成連續(xù)的數(shù)字視頻流后所包含的一些信號(hào)元素。前面我們已經(jīng)討論了,模擬視頻信號(hào)每秒25幀,每幀周期40ms,而每幀又分為2場(chǎng),每場(chǎng)20ms,先輸出的是奇場(chǎng),然后是偶場(chǎng),奇場(chǎng)的行號(hào)為第1至312.5行,偶場(chǎng)的行號(hào)為第312.5至625行,其中,奇場(chǎng)的第23.5至310行包含有效的視頻信號(hào),偶場(chǎng)的第336至622.5行包含有效的視頻信號(hào)。把模擬視頻信號(hào)解碼為YUV分量后,分別進(jìn)行A/D量化采樣,轉(zhuǎn)換為數(shù)字視頻流,時(shí)間上也應(yīng)該是按上面的順序依次輸出。有幾個(gè)相關(guān)的國(guó)際標(biāo)準(zhǔn)對(duì)此作了一些約定。比如1994年國(guó)際無(wú)線電咨詢委員會(huì)出臺(tái)了CCIR601標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)主要是針對(duì)演播室的要求制定的,其中規(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等)。國(guó)際無(wú)線電咨詢委員會(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)。通過(guò)上面的討論,我們可以看出,數(shù)字視頻流應(yīng)包含的元素有:奇偶場(chǎng)指示信號(hào)FI(有的稱為ODD)、場(chǎng)同步信號(hào)、行同步信號(hào)、像素時(shí)鐘、YUV數(shù)據(jù)輸出。在此我們順便計(jì)算一下數(shù)字視頻流的數(shù)據(jù)量,每秒的數(shù)據(jù)量=(720像素*576行*25幀)*2字節(jié)=20736000字節(jié),數(shù)據(jù)率約165Mbps,由此可見(jiàn)數(shù)字視頻的數(shù)據(jù)量之大,數(shù)據(jù)率之高!
可以想象,保存和描述數(shù)字視頻流的最簡(jiǎn)單辦法當(dāng)然就是記錄和描述連續(xù)的一幀幀的靜止圖像。保存靜止圖像的最簡(jiǎn)單格式是BMP格式,就是位圖。我們現(xiàn)在就來(lái)分析一下BMP文件格式。BMP文件記錄圖像的方式實(shí)際上有很多種,甚至可以直接在其中記錄YUV分量,但是我不準(zhǔn)備討論那么多。BMP文件由文件頭、圖像特征描述、顏色表、圖像數(shù)據(jù)四部分構(gòu)成。為了簡(jiǎn)單起見(jiàn),下面用的是VB的語(yǔ)法,下面用到的數(shù)字沒(méi)特別說(shuō)明的都是十進(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)”對(duì)應(yīng)的實(shí)際RGB顏色要從顏色表中查出來(lái)。24位真彩圖因?yàn)橹苯佑涗浟薘GB值,所以是不需要顏色表的,因此在24位真彩BMP文件中沒(méi)有顏色表這部分,而其它的情況下就必須有一個(gè)顏色表。顏色表一共256項(xiàng),每一項(xiàng)4個(gè)字節(jié),前三個(gè)字節(jié)分別代表B、G、R值,最后一個(gè)字節(jié)為0。我們來(lái)以8位灰度圖舉例說(shuō)明,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è)像素依次填入,這樣一行行一直到填完最上面的一行。對(duì)于8位灰度圖,對(duì)每個(gè)像素?cái)?shù)據(jù)只需填入一個(gè)字節(jié)的Y值。對(duì)于24位真彩圖,要填3個(gè)字節(jié),注意:先填B值,再填G值,最后是R值。
總結(jié)一下:灰度圖的BMP文件由“文件頭+圖像特征描述塊+顏色表+圖像數(shù)據(jù)Y”組成。24位真彩圖由“文件頭+圖像特征描述塊+圖像數(shù)據(jù)BGR”組成。如果讀者對(duì)于這些不熟悉,可以在WINDOWS的畫圖工具中畫一副圖,保存為上面的格式,然后用二進(jìn)制編輯工具比如UltraEdit 來(lái)觀察和分析文件的內(nèi)容。關(guān)于BMP文件的更多知識(shí),讀者可以進(jìn)一步查閱資料。
現(xiàn)在再回頭討論一下視頻保存為BMP圖像的格式。對(duì)于數(shù)字視頻流,由于一幀中有效的行數(shù)是固定的576行,所以如果把它轉(zhuǎn)換成576行的BMP圖像,當(dāng)然最簡(jiǎn)單,而且可以取得較好的效果。而如果取別的值,比如600行或者400行,那么就必須進(jìn)行插值運(yùn)算,依據(jù)現(xiàn)有的行計(jì)算出假想中的行,這樣的轉(zhuǎn)換其運(yùn)算量很大,對(duì)圖像的質(zhì)量也有一定損失,一般要用專門的硬件來(lái)實(shí)現(xiàn)(一般高檔的視頻捕捉卡帶有這樣的功能)。那么是不是說(shuō)只能轉(zhuǎn)換成576行呢?當(dāng)然也不是,比如可以轉(zhuǎn)換成288行,隔一行取一行,實(shí)際上就是只采集了一場(chǎng)。另外還可以丟棄一些行,比如只取中間的480行,而上下各丟掉48行,這樣得到的圖像雖然被裁剪了,但清晰度不會(huì)下降。再來(lái)看看一行中應(yīng)該采多少個(gè)像素。由于模擬視頻信號(hào)幅值在一行中是連續(xù)變化的,因此采樣數(shù)沒(méi)有行數(shù)那樣的限制。比如我們可以采400個(gè)像素,當(dāng)然也可以采401個(gè)像素,這取決于我們對(duì)水平分辨率的要求,一行中所采得的像素越多,則分辨率越高,但需要注意亮度信號(hào)的帶寬是有限的,采樣率高到一定程度后,再提高就沒(méi)有意義了。前面說(shuō)了,CCIR601標(biāo)準(zhǔn)的規(guī)定是一行采720個(gè)有效像素。除了這個(gè)標(biāo)準(zhǔn)外,比較常用的另一種標(biāo)準(zhǔn)是一行采768個(gè)有效像素。說(shuō)到這兒,順便說(shuō)一下,在計(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)換的問(wèn)題。
RGB和YUV的對(duì)應(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)中定義的值與上面略有不同。在考慮了人的視覺(jué)系統(tǒng)和CRT顯示器的非線性特性之后,推薦的轉(zhuǎn)換方程如下:
R = Y + 1.371 V
G = Y - 0.698 *V - 0.336 U
B = Y + 1.732 U
不過(guò)讀者要注意,上面的方程中的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)
對(duì)于上面的方程有幾點(diǎn)說(shuō)明:1、有一些采集卡會(huì)指定U、V為有符號(hào)數(shù)或無(wú)符號(hào)數(shù),使用上面的方程時(shí)不要考慮這些,而認(rèn)為Y、U、V是從采集卡得到的一個(gè)0到255之間的無(wú)符號(hào)的值。2、用上面的公式計(jì)算出的R、G、B值可能會(huì)超出0到255的范圍,應(yīng)該在計(jì)算完后進(jìn)行檢查,如果值小于0,則修正為0,如果值大于255,則修正為255。上面的轉(zhuǎn)換方法經(jīng)過(guò)我的實(shí)際使用,證明其效果是良好的。
空談了這么多,來(lái)點(diǎn)更直觀的吧!我們來(lái)看看一幀實(shí)際的圖像。右邊這幀圖像是用武漢萬(wàn)德數(shù)碼技術(shù)有限公司生產(chǎn)的VC302嵌入式圖像采集卡采得的,信號(hào)源是電視機(jī)的視頻輸出(為了減小文件大小,右邊的圖片被壓縮了10倍,原始圖像要比現(xiàn)在顯示的更清晰)。圖像的像素分辨率是320*240(采集了一場(chǎng)中的288行,每行360個(gè)像素,但只從中截取了240行,每行截取了320個(gè)像素),第一幅是Y分量描述出的黑白圖像,第二幅是U分量描述,第三幅是V分量描述,第四幅是YUV合成后的彩色圖像。黑白圖像與如此模糊的UV分量圖合成后竟然可以得到色彩這么真實(shí)的彩色圖像,你是不是有點(diǎn)難以相信?我也不敢相信,但這就是事實(shí)!從這些圖的比較中我們可以得出這樣的結(jié)論:1、Y分量基本上保留了彩色圖像的輪廓細(xì)節(jié),其分辨率是較高的。2、UV分量主觀感覺(jué)十分模糊,分辨率低,只是大約地描述了整塊的色彩,這正是所謂的“大面積著色”。3、我們?cè)谟^察合成的彩色圖像的時(shí)候并沒(méi)有覺(jué)得圖像的色彩模糊,這說(shuō)明人眼對(duì)色彩細(xì)節(jié)的分辨能力是多么差!
接著,我們來(lái)討論一下圖像的顯示問(wèn)題。這個(gè)問(wèn)題屬于軟件的范疇,大部分讀者都比較熟悉,我不準(zhǔn)備說(shuō)太多。一種方法是把得到的YUV數(shù)據(jù)轉(zhuǎn)換成RGB后來(lái)顯示。另一種辦法是直接用YUV數(shù)據(jù)來(lái)顯示,現(xiàn)在的顯卡都具備把YUV數(shù)據(jù)通過(guò)硬件直接轉(zhuǎn)換為RGB的能力,通過(guò)使用Direct Draw技術(shù),把YUV數(shù)據(jù)直接提交給顯卡,這樣就省掉了軟件轉(zhuǎn)換所花費(fèi)的CPU時(shí)間。在嵌入式領(lǐng)域,可以使用數(shù)字接口的液晶顯示器顯示,要根據(jù)其具體情況來(lái)處理。
最后,說(shuō)一下視頻開(kāi)發(fā)中常見(jiàn)的一些問(wèn)題。1、首先要注意區(qū)分視頻信號(hào)的制式。我國(guó)的電視臺(tái)發(fā)送的信號(hào)是PAL制信號(hào),所以電視機(jī)的視頻輸出是PAL制。但是電視機(jī)也可以接受其它制式的信號(hào),比如VCD機(jī)的視頻輸出有很多是NTSC制的,在電視機(jī)上也可以播放。在我國(guó)市場(chǎng)上銷售的攝像機(jī)(我說(shuō)的是工業(yè)攝像機(jī),而不是家用的攝錄像機(jī))大部分是PAL制的,但也有的是NTSC制,而且有的可以通過(guò)機(jī)身上的撥碼開(kāi)關(guān)來(lái)設(shè)定制式。2、有些DVD機(jī)采用了一些特別的辦法來(lái)提高清晰度,比如所謂的“逐行掃描”,它們輸出的信號(hào)與標(biāo)準(zhǔn)信號(hào)相比有一些差別,在電視機(jī)上播放是不會(huì)有問(wèn)題的,但是一些采集卡卻不能識(shí)別,導(dǎo)致采集的圖像紊亂,所以在調(diào)試過(guò)程中要慎用DVD作信號(hào)源。3、分辨率的問(wèn)題。分辨率一般是指垂直方向能分辨的等間隔排列的黑白條紋的最大線數(shù)。我們先來(lái)看看模擬視頻,視頻信號(hào)行正程的時(shí)間是52μs,而視頻信號(hào)的帶寬最大6 MHz,假定1Hz可以描述2個(gè)像素點(diǎn),這樣算來(lái)最多的線數(shù)=52μ*6M*2=624線。而實(shí)際上在編輯、存儲(chǔ)、傳輸、還原過(guò)程中會(huì)有很多損失,所以電視機(jī)上的圖像分辨率是遠(yuǎn)低于這個(gè)值的,一般約在240-340線左右。對(duì)于攝像機(jī)的視頻輸出,有的黑白攝像機(jī)標(biāo)稱分辨率高達(dá)600線,理論上這個(gè)分辨率是有可能達(dá)到的。而彩色攝像機(jī)標(biāo)稱的分辨率有380線、420線、480線等規(guī)格。再來(lái)看看數(shù)字視頻流,數(shù)字視頻中一行采樣的像素?cái)?shù)是固定的,CCIR601的規(guī)定是720個(gè)像素,如果用線來(lái)表示,極限值是720線,可見(jiàn)大于模擬視頻的分辨率。 在安防監(jiān)控工程中,最常用的視頻源是420線或480線的彩色攝像機(jī),扣除傳輸過(guò)程中的損失,最后能達(dá)到380線就不錯(cuò)了,保存為圖像時(shí)每行取360像素比較恰當(dāng),再增加像素?cái)?shù),清晰度雖然仍有提高,但已不太明顯。在工業(yè)領(lǐng)域,有時(shí)對(duì)分辨率有特別苛刻的要求,這時(shí)采用標(biāo)準(zhǔn)視頻信號(hào)輸出的攝像機(jī)已經(jīng)不可能滿足要求,需要采用非標(biāo)準(zhǔn)的攝像機(jī),它們大多是逐行掃描的,采用專門的高分辨率CCD面陣傳感器,常見(jiàn)的分辨率如2048行*2048像素/幀,幀頻可以高達(dá)100Hz,當(dāng)然這樣的視頻信號(hào)無(wú)法在電視機(jī)上顯示出來(lái),一般是采用專用的采集卡采集,在計(jì)算機(jī)上處理。4、場(chǎng)采集與幀采集。這個(gè)問(wèn)題比較特別,理論上講,攝像機(jī)首先應(yīng)拍取一幀圖像,然后分解出兩場(chǎng),還原的時(shí)候,兩場(chǎng)再拼合為一幀。但實(shí)際上,常不是這樣的,有的像機(jī)為了簡(jiǎn)化設(shè)計(jì),是一場(chǎng)一場(chǎng)單獨(dú)采集的,兩場(chǎng)之間有20ms的時(shí)間差,所以兩場(chǎng)拼合的時(shí)候,圖像上活動(dòng)的部分會(huì)出現(xiàn)錯(cuò)位。另外,一些視頻編輯設(shè)備也是對(duì)場(chǎng)單獨(dú)處理的,所以也存在這個(gè)問(wèn)題??措娨暤臅r(shí)候,因?yàn)閳D像連續(xù)變化,所以我們只會(huì)感到圖像是活動(dòng)的,但是如果把圖像截取一幀下來(lái)看,錯(cuò)位就十分明顯。為了避免這個(gè)問(wèn)題,在對(duì)分辨率要求不高的時(shí)候可以單場(chǎng)采集,即連續(xù)的兩場(chǎng)中只取一場(chǎng),事實(shí)上很多采集卡也正是這樣處理的。另外可以在只采一場(chǎng)的同時(shí)在水平方向采集較多的像素,比如共采288行,但每行采720個(gè)像素,這樣至少在水平方向有較高的分辨率,可以改善模式識(shí)別的效果。而對(duì)分辨率要求更高的時(shí)候就只好使用非標(biāo)準(zhǔn)攝像機(jī)了。

色差儀相關(guān)文章:色差儀原理
數(shù)字濾波器相關(guān)文章:數(shù)字濾波器原理


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉