數字視頻基本知識探討
End Type
在BMP中記錄的圖像數據不一定就是RGB或Y的值,可以只是一個(gè)”編號”,而這個(gè)”編號”對應的實(shí)際RGB顏色要從顏色表中查出來(lái)。24位真彩圖因為直接記錄了RGB值,所以是不需要顏色表的,因此在24位真彩BMP文件中沒(méi)有顏色表這部分,而其它的情況下就必須有一個(gè)顏色表。顏色表一共256項,每一項4個(gè)字節,前三個(gè)字節分別代表B、G、R值,最后一個(gè)字節為0。我們來(lái)以8位灰度圖舉例說(shuō)明,8位灰度圖是黑白圖像,記錄的實(shí)際上就是亮度分量Y,根據RGB三基色原理,R=Y、B=Y、G=Y的時(shí)候合成的就是一個(gè)亮度為Y的灰色像素,極限的情況,當R=255、G=255、B=255時(shí)表示最白的像素,當R=0、G=0、B=0時(shí)表示最黑的像素。因此顏色表的值應為:0,0,0,0,1,1,1,0,2,2,2,0,3,3,3,0……..255,255,255,0。
BMP文件的最后部分記錄圖像數據,也是數據量最大的部分。一幀圖像的像素數據填入BMP文件的順序是:先填最下面的一行,從左到右依次一個(gè)個(gè)像素依次填入,這樣一行行一直到填完最上面的一行。對于8位灰度圖,對每個(gè)像素數據只需填入一個(gè)字節的Y值。對于24位真彩圖,要填3個(gè)字節,注意:先填B值,再填G值,最后是R值。
總結一下:灰度圖的BMP文件由“文件頭+圖像特征描述塊+顏色表+圖像數據Y”組成。24位真彩圖由“文件頭+圖像特征描述塊+圖像數據BGR”組成。如果讀者對于這些不熟悉,可以在WINDOWS的畫(huà)圖工具中畫(huà)一副圖,保存為上面的格式,然后用二進(jìn)制編輯工具比如UltraEdit 來(lái)觀(guān)察和分析文件的內容。關(guān)于BMP文件的更多知識,讀者可以進(jìn)一步查閱資料。
現在再回頭討論一下視頻保存為BMP圖像的格式。對于數字視頻流,由于一幀中有效的行數是固定的576行,所以如果把它轉換成576行的BMP圖像,當然最簡(jiǎn)單,而且可以取得較好的效果。而如果取別的值,比如600行或者400行,那么就必須進(jìn)行插值運算,依據現有的行計算出假想中的行,這樣的轉換其運算量很大,對圖像的質(zhì)量也有一定損失,一般要用專(zhuān)門(mén)的硬件來(lái)實(shí)現(一般高檔的視頻捕捉卡帶有這樣的功能)。那么是不是說(shuō)只能轉換成576行呢?當然也不是,比如可以轉換成288行,隔一行取一行,實(shí)際上就是只采集了一場(chǎng)。另外還可以丟棄一些行,比如只取中間的480行,而上下各丟掉48行,這樣得到的圖像雖然被裁剪了,但清晰度不會(huì )下降。再來(lái)看看一行中應該采多少個(gè)像素。由于模擬視頻信號幅值在一行中是連續變化的,因此采樣數沒(méi)有行數那樣的限制。比如我們可以采400個(gè)像素,當然也可以采401個(gè)像素,這取決于我們對水平分辨率的要求,一行中所采得的像素越多,則分辨率越高,但需要注意亮度信號的帶寬是有限的,采樣率高到一定程度后,再提高就沒(méi)有意義了。前面說(shuō)了,CCIR601標準的規定是一行采720個(gè)有效像素。除了這個(gè)標準外,比較常用的另一種標準是一行采768個(gè)有效像素。說(shuō)到這兒,順便說(shuō)一下,在計算機上用視頻捕捉卡捕捉圖像時(shí),驅動(dòng)程序提供的圖像格式是固定的幾種,比如768*576、720*576、384*288、320*288等,為什么只提供這些格式,以前不明白的讀者現在知道了吧!
現在我們知道了模擬視頻變換為數字視頻流后的格式,也知道了怎樣創(chuàng )建和保存BMP文件,但是我們還不能把從數字視頻流中截取的圖像數據保存為BMP文件,因為數字視頻流是用YUV描述的,而B(niǎo)MP文件是用RGB描述的。它們之間怎么轉換呢?這就是色彩空間轉換的問(wèn)題。
RGB和YUV的對應關(guān)系用代數方程式表示如下:
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標準中定義的值與上面略有不同。在考慮了人的視覺(jué)系統和CRT顯示器的非線(xiàn)性特性之后,推薦的轉換方程如下:
R = Y + 1.371 V
G = Y - 0.698 *V - 0.336 U
B = Y + 1.732 U
不過(guò)讀者要注意,上面的方程中的UV值因為符號擴展的原因平移了128,實(shí)際應該使用下面的這個(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)說(shuō)明:1、有一些采集卡會(huì )指定U、V為有符號數或無(wú)符號數,使用上面的方程時(shí)不要考慮這些,而認為Y、U、V是從采集卡得到的一個(gè)0到255之間的無(wú)符號的值。2、用上面的公式計算出的R、G、B值可能會(huì )超出0到255的范圍,應該在計算完后進(jìn)行檢查,如果值小于0,則修正為0,如果值大于255,則修正為255。上面的轉換方法經(jīng)過(guò)我的實(shí)際使用,證明其效果是良好的。

空談了這么多,來(lái)點(diǎn)更直觀(guān)的吧!我們來(lái)看看一幀實(shí)際的圖像。右邊這幀圖像是用武漢萬(wàn)德數碼技術(shù)有限公司生產(chǎn)的VC302嵌入式視頻捕捉卡得到的,信號源是電視機的視頻輸出。圖像的像素分辨率是320*240(采集了一場(chǎng)中的288行,每行360個(gè)像素,但只從中截取了240行,每行截取了320個(gè)像素),第一幅是Y分量描述出的黑白圖像,第二幅是U分量描述,第三幅是V分量描述,第四幅是YUV合成后的彩色圖像。黑白圖像與如此模糊的UV分量圖合成后竟然可以得到色彩這么真實(shí)的彩色圖像,你是不是有點(diǎn)難以相信?我也不敢相信,但這就是事實(shí)!從這些圖的比較中我們可以得出這樣的結論:1、Y分量基本上保留了彩色圖像的輪廓細節,其分辨率是較高的。2、UV分量主觀(guān)感覺(jué)十分模糊,分辨率低,只是大約地描述了整塊的色彩,這正是所謂的“大面積著(zhù)色”。3、我們在觀(guān)察合成的彩色圖像的時(shí)候并沒(méi)有覺(jué)得圖像的色彩模糊,這說(shuō)明人眼對色彩細節的分辨能力是多么差!
接著(zhù),我們來(lái)討論一下圖像的顯示問(wèn)題。這個(gè)問(wèn)題屬于軟件的范疇,大部分讀者都比較熟悉,我不準備說(shuō)太多。一種方法是把得到的YUV數據轉換成RGB后來(lái)顯示。另一種辦法是直接用YUV數據來(lái)顯示,現在的顯卡都具備把YUV數據通過(guò)硬件直接轉換為RGB的能力,通過(guò)使用Direct Draw技術(shù),把YUV數據直接提交給顯卡,這樣就省掉了軟件轉換所花費的CPU時(shí)間。在嵌入式領(lǐng)域,可以使用數字接口的液晶顯示器顯示,要根據其具體情況來(lái)處理。
最后,說(shuō)一下視頻開(kāi)發(fā)中常見(jiàn)的一些問(wèn)題。1、首先要注意區分視頻信號的制式。我國的電視臺發(fā)送的信號是PAL制信號,所以電視機的視頻輸出是PAL制。但是電視機也可以接受其它制式的信號,比如VCD機的視頻輸出有很多是NTSC制的,在電視機上也可以播放。在我國市場(chǎng)上銷(xiāo)售的攝像機(我說(shuō)的是工業(yè)攝像機,而不是家用的攝錄像機)大部分是PAL制的,但也有的是NTSC制,而且有的可以通過(guò)機身上的撥碼開(kāi)關(guān)來(lái)設定制式。2、有些DVD機采用了一些特別的辦法來(lái)提高清晰度,比如所謂的“逐行掃描”,它們輸出的信號與標準信號相比有一些差別,在電視機上播放是不會(huì )有問(wèn)題的,但是一些采集卡卻不能識別,導致采集的圖像紊亂,所以在調試過(guò)程中要慎用DVD作信號源。3、分辨率的問(wèn)題。分辨率一般是指垂直方向能分辨的等間隔排列的黑白條紋的最大線(xiàn)數。我們先來(lái)看看模擬視頻,視頻信號行正程的時(shí)間是52μs,而視頻信號的帶寬最大6 MHz,假定1Hz可以描述2個(gè)像素點(diǎn),這樣算來(lái)最多的線(xiàn)數=52μ*6M*2=624線(xiàn)。而實(shí)際上在編輯、存儲、傳輸、還原過(guò)程中會(huì )有很多損失,所以電視機上的圖像分辨率是遠低于這個(gè)值的,一般約在240-340線(xiàn)左右。對于攝像機的視頻輸出,有的黑白攝像機標稱(chēng)分辨率高達600線(xiàn),理論上這個(gè)分辨率是有可能達到的。而彩色攝像機標稱(chēng)的分辨率有380線(xiàn)、420線(xiàn)、480線(xiàn)等規格。再來(lái)看看數字視頻流,數字視頻中一行采樣的像素數是固定的,CCIR601的規定是720個(gè)像素,如果用線(xiàn)來(lái)表示,極限值是720線(xiàn),可見(jiàn)大于模擬視頻的分辨率。 在安防監控工程中,最常用的視頻源是420線(xiàn)或480線(xiàn)的彩色攝像機,扣除傳輸過(guò)程中的損失,最后能達到380線(xiàn)就不錯了,保存為圖像時(shí)每行取360像素比較恰當,再增加像素數,清晰度雖然仍有提高,但已不太明顯。在工業(yè)領(lǐng)域,有時(shí)對分辨率有特別苛刻的要求,
評論