微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 数字电路视频教程

数字电路视频教程

时间:04-24 来源:互联网 点击:

视频信号起初是以模拟信号的形式保存在录像磁带上的,而现在随着数字技术的发展,可以变成数字信号保存在光盘或计算机硬盘中,当然这些离不开功能强大的计算机,实际上,在嵌入式领域,数字视频也是可以应用的,比如用单片机或DSP来处理数字视频数据。下面,我们就来讨论数字视频数据的格式、转换、保存、显示等方面的问题。
从哪个问题开始呢?我们先来讨论一下模拟视频信号解码并量化成连续的数字视频流后所包含的一些信号元素。前面我们已经讨论了,模拟视频信号每秒25帧,每帧周期40ms,而每帧又分为2场,每场20ms,先输出的是奇场,然后是偶场,奇场的行号为第1至312.5行,偶场的行号为第312.5至625行,其中,奇场的第23.5至310行包含有效的视频信号,偶场的第336至622.5行包含有效的视频信号。把模拟视频信号解码为YUV分量后,分别进行A/D量化采样,转换为数字视频流,时间上也应该是按上面的顺序依次输出。有几个相关的国际标准对此作了一些约定。比如1994年国际无线电咨询委员会出台了CCIR601标准,这个标准主要是针对演播室的要求制定的,其中规定亮度信号的采样频率是13.5 MHz,色度信号的采样频率是6.75 MHz,采用8位PCM编码。这样,每行的Y采样数为864个,其中有效的Y采样数为720个。而每行的U或V采样数为432个,有效的U或V采样数为360个。平均描述每个像素的YUV的位数分别为8bit、4bit、4bit,又叫做YUV422编码方案(当然还有很多别的方案,如YUV411等)。国际无线电咨询委员会还出台了CCIR656建议,其中规定视频数据的量化值中的0和255保留不用,而量化数据串行输出的顺序是:U0、Y0、V0、Y1,U2,Y2,V2,Y3,U4,Y5,V4,Y6,如此循环。通过上面的讨论,我们可以看出,数字视频流应包含的元素有:奇偶场指示信号FI(有的称为ODD)、场同步信号、行同步信号、像素时钟、YUV数据输出。在此我们顺便计算一下数字视频流的数据量,每秒的数据量=(720像素*576行*25帧)*2字节=20736000字节,数据率约165Mbps,由此可见数字视频的数据量之大,数据率之高!
可以想象,保存和描述数字视频流的最简单办法当然就是记录和描述连续的一帧帧的静止图像。保存静止图像的最简单格式是BMP格式,就是位图。我们现在就来分析一下BMP文件格式。BMP文件记录图像的方式实际上有很多种,甚至可以直接在其中记录YUV分量,但是我不准备讨论那么多。BMP文件由文件头、图像特征描述、颜色表、图像数据四部分构成。为了简单起见,下面用的是VB的语法,下面用到的数字没特别说明的都是十进制表示。
BMP文件头数据结构如下:
Type BitMapFileHeader‘共14字节
bfType As Integer ‘2个字节,填入字符”BM”,即 4D42(16进制)
bfSize As Long‘4个字节,填入整个BMP文件的字节数大小
bfReserverd1 As Integer‘2个字节,保留,填入0
bfReserverd2 As Integer‘2个字节,保留,填入0
bfOffBits As Long ‘4个字节,表示图像数据在整个BMP文件中的起始位置
End Type
图像特征描述块的数据结构如下:
Type BitMapInfoHeader ‘共40字节
biSize As Long‘4个字节,表示本结构的字节数大小,填入固定的值40
biWidth As Long‘4个字节,填入图像水平方向像素数,其值必须是4的整数倍
biHeight As Long ‘4个字节,填入图像垂直方向像素数
biPlanes As Integer‘2个字节,填入固定的值1
biBitCount As Integer ‘2个字节,表示每个像素的位数,灰度图填8,24位真彩图填24
biCompression As Long ‘4个字节,填入0表示不压缩
biXSizeImage As Long ‘4个字节,表示图像的像素总数
biXPelsPerMeter As Long ‘4个字节,填入固定值3780
biYPelsPerMeter As Long ‘4个字节,填入固定值3780
biClrUsed As Long ‘4个字节,填入固定值0
biClrlmportant As Long ‘4个字节,填入固定值0
End Type
?在BMP中记录的图像数据不一定就是RGB或Y的值,可以只是一个”编号”,而这个”编号”对应的实际RGB颜色要从颜色表中查出来。24位真彩图因为直接记录了RGB值,所以是不需要颜色表的,因此在24位真彩BMP文件中没有颜色表这部分,而其它的情况下就必须有一个颜色表。颜色表一共256项,每一项4个字节,前三个字节分别代表B、G、R值,最后一个字节为0。我们来以8位灰度图举例说明,8位灰度图是黑白图像,记录的实际上就是亮度分量Y,根据RGB三基色原理,R=Y、B=Y、G=Y的时候合成的就是一个亮度为Y的灰色像素,极限的情况,当R=255、G=255、B=255时表示最白的像素,当R=0、G=0、B=0时表示最黑的像素。因此颜色表的值应为:0,0,0,0,1,1,1,0,2,2,2,0,3,3,3,0……..255,255,255,0。
BMP文件的最后部分记录图像数据,也是数据量最大的部分。一帧图像的像素数据填入BMP文件的顺序是:先填最下面的一行,从左到右依次一个个像素依次填入,这样一行行一直到填完最上面的一行。对于8位灰度图,对每个像素数据只需填入一个字节的Y值。对于24位真彩图,要填3个字节,注意:先填B值,再填G值,最后是R值。
总结一下:灰度图的BMP文件由“文件头+图像特征描述块+颜色表+图像数据Y”组成。24位真彩图由“文件头+图像特征描述块+图像数据BGR”组成。如果读者对于这些不熟悉,可以在WINDOWS的画图工具中画一副图,保存为上面的格式,然后用二进制编辑工具比如UltraEdit 来观察和分析文件的内容。关于BMP文件的更多知识,读者可以进一步查阅资料。
现在再回头讨论一下视频保存为BMP图像的格式。对于数字视频流,由于一帧中有效的行数是固定的576行,所以如果把它转换成576行的BMP图像,当然最简单,而且可以取得较好的效果。而如果取别的值,比如600行或者400行,那么就必须进行插值运算,依据现有的行计算出假想中的行,这样的转换其运算量很大,对图像的质量也有一定损失,一般要用专门的硬件来实现(一般高档的视频捕捉卡带有这样的功能)。那么是不是说只能转换成576行呢?当然也不是,比如可以转换成288行,隔一行取一行,实际上就是只采集了一场。另外还可以丢弃一些行,比如只取中间的480行,而上下各丢掉48行,这样得到的图像虽然被裁剪了,但清晰度不会下降。再来看看一行中应该采多少个像素。由于模拟视频信号幅值在一行中是连续变化的,因此采样数没有行数那样的限制。比如我们可以采400个像素,当然也可以采401个像素,这取决于我们对水平分辨率的要求,一行中所采得的像素越多,则分辨率越高,但需要注意亮度信号的带宽是有限的,采样率高到一定程度后,再提高就没有意义了。前面说了,CCIR601标准的规定是一行采720个有效像素。除了这个标准外,比较常用的另一种标准是一行采768个有效像素。说到这儿,顺便说一下,在计算机上用视频捕捉卡捕捉图像时,驱动程序提供的图像格式是固定的几种,比如768*576、720*576、384*288、320*288等,为什么只提供这些格式,以前不明白的读者现在知道了吧!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top