新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 数字视频基本知识探讨

数字视频基本知识探讨

作者:时间:2012-11-07来源:网络收藏
nbsp; ‘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等,为什么只提供这些格式,以前不明白的读者现在知道了吧!
现在我们知道了模拟视频变换为流后的格式,也知道了怎样创建和保存BMP文件,但是我们还不能把从流中截取的图像数据保存为BMP文件,因为数字视频流是用YUV描述的,而BMP文件是用RGB描述的。它们之间怎么转换呢?这就是色彩空间转换的问题。
RGB和YUV的对应关系用代数方程式表示如下:
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标准中定义的值与上面略有不同。在考虑了人的视觉系统和CRT显示器的非线性特性之后,推荐的转换方程如下:
R = Y + 1.371 V
G = Y - 0.698 *V - 0.336 U
B = Y + 1.732 U
不过读者要注意,上面的方程中的UV值因为符号扩展的原因平移了128,实际应该使用下面的这个修正的方程:
R = Y + 1.371 * (V - 128)
G = Y - 0.698 * (V - 128) - 0.336 * (U - 128)
B = Y + 1.732 * (U - 128)
对于上面的方程有几点说明:1、有一些采集卡会指定U、V为有符号数或无符号数,使用上面的方程时不要考虑这些,而认为Y、U、V是从采集卡得到的一个0到255之间的无符号的值。2、用上面的公式计算出的R、G、B值可能会超出0到255的范围,应该在计算完后进行检查,如果值小于0,则修正为0,如果值大于255,则修正为255。上面的转换方法经过我的实际使用,证明其效果是良好的。hubeitv
空谈了这么多,来点更直观的吧!我们来看看一帧实际的图像。右边这帧图像是用武汉万德数码技术有限公司生产的VC302嵌入式视频捕捉卡得到的,信号源是电视机的视频输出。图像的像素分辨率是320*240(采集了一场中的288行,每行360个像素,但只从中截取了240行,每行截取了320个像素),第一幅是Y分量描述出的黑白图像,第二幅是U分量描述,第三幅是V分量描述,第四幅是YUV合成后的彩色图像。黑白图像与如此模糊的UV分量图合成后竟然可以得到色彩这么真实的彩色图像,你是不是有点难以相信?我也不敢相信,但这就是事实!从这些图的比较中我们可以得出这样的结论:1、Y分量基本上保留了彩色图像的轮廓细节,其分辨率是较高的。2、UV分量主观感觉十分模糊,分辨率低,只是大约地描述了整块的色彩,这正是所谓的“大面积着色”。3、我们在观察合成的彩色图像的时候并没有觉得图像的色彩模糊,这说明人眼对色彩细节的分辨能力是多么差!
接着,我们来讨论一下图像的显示问题。这个问题属于软件的范畴,大部分读者都比较熟悉,我不准备说太多。一种方法是把得到的YUV数据转换成RGB后来显示。另一种办法是直接用YUV数据来显示,现在的显卡都具备把YUV数据通过硬件直接转换为RGB的能力,通过使用Direct Draw技术,把YUV数据直接提交给显卡,这样就省掉了软件转换所花费的CPU时间。在嵌入式领域,可以使用数字接口的液晶显示器显示,要根据其具体情况来处理。
最后,说一下视频开发中常见的一些问题。1、首先要注意区分视频信号的制式。我国的电视台发送的信号是PAL制信号,所以电视机的视频输出是PAL制。但是电视机也可以接受其它制式的信号,比如VCD机的视频输出有很多是NTSC制的,在电视机上也可以播放。在我国市场上销售的摄像机(我说的是工业摄像机,而不是家用的摄录像机)大部分是PAL制的,但也有的是NTSC制,而且有的可以通过机身上的拨码开关来设定制式。2、有些DVD机采用了一些特别的办法来提高清晰度,比如所谓的“逐行扫描”,它们输出的信号与标准信号相比有一些差别,在电视机上播放是不会有问题的,但是一些采集卡却不能识别,导致采集的图像紊乱,所以在调试过程中要慎用DVD作信号源。3、分辨率的问题。分辨率一般是指垂直方向能分辨的等间隔排列的黑白条纹的最大线数。我们先来看看模拟视频,视频信号行正程的时间是52μs,而视频信号的带宽最大6 MHz,假定1Hz可以描述2个像素点,这样算来最多的线数=52μ*6M*2=624线。而实际上在编辑、存储、传输、还原过程中会有很多损失,所以电视机上的图像分辨率是远低于这个值的,一般约在240-340线左右。对于摄像机的视频输出,有的黑白摄像机标称分辨率高达600线,理论上这个分辨率是有可能达到的。而彩色摄像机标称的分辨率有380线、420线、480线等规格。再来看看数字视频流,数字视频中一行采样的像素数是固定的,CCIR601的规定是720个像素,如果用线来表示,极限值是720线,可见大于模拟视频的分辨率。 在安防监控工程中,最常用的视频源是420线或480线的彩色摄像机,扣除传输过程中的损失,最后能达到380线就不错了,保存为图像时每行取360像素比较恰当,再增加像素数,清晰度虽然仍有提高,但已不太明显。在工业领域,有时对分辨率有特别苛刻的要求,


关键词: 数字视频

评论


相关推荐

技术专区

关闭