第一次信源编码作业
2017.03.08
一、图像篇:图形图像与图像的类型
1.1 从生成、显示、处理和存储的角度划分
矢量图
矢量图是用一系列计算机指令来表示一幅图,如画点、画线、 画曲线、画圆、画矩形等。这种方法实际上是用数学方法来描述一幅图。
矢量图文件中存储的是数学表达式和指令,绘制和显示矢量图时,可以采用绘图程序进行处理操作。
将每个图元对象作为一个独立体处理,缩放、旋转、移动时不会影响其它对象。特别适用于要求创建和操作单个对象的图例和几何造型。
常用文件格式:如Adobe Illustrator的*.AI、*.EPS和 SVG(Scalable Vector Graphics) 、AutoCAD的*.dwg和*.dxf、Corel DRAW的*.cdr、windows 标准图元文件*.wmf和增强型图元 文件*.emf 等
优点:计算生成,显示精度高、操 作灵活性大。常常用来设计精细的 线框形图案、商标、标志等适合数 学运算表示的美术作品和图形的生 成技术
缺点:图像显示时花费时间比较长; 真实世界的彩色图像难以转化为矢 量图 (可以把相同或类似的图独立 作为图的构造模块,存到图库中以 便于加速图的生成和减少文件大小)
点位图
点位图是将一副图像在空间上离散化,即将图像分成许许多多的像素,每个象素用若干个二进制位来指定该像素的颜色或灰度值。
![]()
位图即为用图像数据集合的形式对构成图像的各个像素点的颜色和亮度等相关信息进行描述和存储
- 优点:适合表现细致、色彩和层次比较丰富的图像,是所有视觉图像表示方法的基础。显示速度快。真实世界的图像可以通过扫描仪、数码相机、摄像机等设备方便的转化为点位图。
- 缺点:存储和传输时数据量比较大。缩放、旋转时算法复杂且容易失真。
1.2 图形与图像的区别与联系
从图像显示内容的角度
一般来说,图像所表现的显示内容是自然界的真实景物,或利用计算机技术逼真地绘制出的带有光照、阴影等特性的自然界景物,而图形实际上是对图像的抽象,组成图形的画面元素主要是点、线、面或简单立体图形等,与自然界景物的真实感相差很大。
图形更多的用矢量图表示,图像更多的用位图表示。
一旦在屏幕上显示,图形与图像无异,都是以一定的分辨率和颜色深度在屏幕上以点阵的形式显示出来。
二、视频篇:视频信号数字化及标准
- 全信号数字化:直接对复合信号数字化的方式。
- 分量数字化:分别对Y、U、V分量信号数字化方式。
- 优点:Y、U、V分量互不干扰,不需要反复的编码与解码,图像质量高。
正交取样结构:每一场中的样点都重合,而且都对齐
亮度信号的取样频率
亮度信号对取样频率的要求如下:
(1) 按照奈奎斯特取样定理,取样频率至少应为信号上限频率的两倍。
(2) 为了在取样后保证产生足够小的混叠噪声,要求取样频率是信号带宽的2.2~2.7倍。对PAL制信号,取样频率应大于13.2 MHz。
(3)为了获得正交取样结构,取样频率必须是行频的整数倍。
(4)为了使两种扫描制式实现兼容,应采用同一种取样频率,625行制的行频为15.625Hz,525行制的行频为15.734Hz,两者的最小公倍数为2.25 MHz。
结论:取样频率应大于13.2 MHz,故将亮度信号的取样频率定为2.25 MHz的6倍,为13.5 MHz。
色差信号的采样频率
将色差信号的取样频率定为6.75 MHz。取样结构见图所示。
![]()
(1) 视频信号量化位数的确定:8位(bit)
S/N=6n+10. 8(dB) 为视频信号的信噪比计算公式。如果把视频信号的信噪比定为大于50dB,则量化位数应不低于7位。当然位数越高,信噪比也越高,每增加一位,信噪比可提高6dB,但电路的复杂性和设备的成本也会大大提高。对视频信号采用8位(bit)量化位数显然是较为合理的。这样,经一次量化处理后其信噪比可以达59dB。
(2) 量化电平(码电平):
对应模拟信号电平的量化级电平,即量化级所对应的电平值。
(3) 码电平的分配:
为防止信号电平的过载,而将视频信号严格地调整到范围内,并且不把8bit视频量化的256个量化级都分配给满幅度信号,而在上下各留一个保护带。
亮度信号的码电平分配:(单极性信号)上留20级、下留16级为保护带。(16-235)
色差信号的码电平分配:(双极性信号)上下各16级为保护带。(16-240)
YCbCr与RGB的转换关系
YCbCr颜色空间是由YUV颜色空间派生的一种颜色空间,主要用于数字电视系统中。从RGB到YCbCr的转换中,输入、输出都是8位二进制格式。
Y=0.299R+0.587G+0.114B
B-Y=-0.299R-0.587G+0.886B
R-Y=0.701R-0.587G-0.114B
- 亮度分量的取值范围为[16,235]。16表示黑电平值,235表示白电平值。数值范围可认为[0,1]。
- 色差信号的数值范围为[16,240],使用128的偏移量时取值范围为[-112,112]。数值范围应为[-0.5,0.5]
- 因此对B-Y和R-Y分别用(0.5/0.883)和(0.5/0.701)相乘,就将色差信号的范围转换为[-0.5,0.5]
Y = 0.299 R + 0.587 G + 0.114 B
U = - 0.169 R - 0.331 G + 0.5 B + 128
V = 0.5 R - 0.419 G - 0.081 B + 128
反过来,RGB 也可以直接从YUV (256级别) 计算:
R = Y + 1.402 (Cr-128)
G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)
B = Y + 1.772 (Cb-128)
rgb2yuv转换函数
int rgb2yuv(int w,int h,void *rgb,void *y_out,void *u_out,void *v_out)
{
u_int i,j; /定义j为行数,i为列数
u_int8_t *y,*u,*v;/定义中间指针变量,防止出现野指针
u_int8_t *r,*g,*b; /定义中间指针变量,防止出现野指针
if((w%2)||(h%2))
return 1; /确定传入该函数的w,h变量是偶数,即保证行,列都是偶数,好进行压缩,使UV数据只存在于奇数行奇数列
b=(u_int8_t*) rgb;
y=(u_int8_t*) y_out;
u=(u_int8_t*) u_out;
v=(u_int8_t*) v_out;/将函数传入的地址赋给新定义的中间指针变量
for(j=0;j<h;j++)
{ for(i=0;i<w;i++)/逐行逐列进行转化
{
g=b+1;
r=b+2;/在buffer中bgr顺序
*y=(u_int8_t)(0.299*(*r)+0.587*(*g)+0.114*(*b));/Y逐个利用公式变换
if(j%2==0){
if(i%2==0)/在奇数行奇数列uv进行计算
{ *u=(u_int8_t)(-0.168*(*r)-0.332*(*g)+0.500*(*b)+128);
*v=(u_int8_t)(0.500*(*r)-0.419*(*g)-0.081*(*b)+128);
if(*u<16)
*u=16;
if(*u>235)
*u=235;
if(*v<16)
*v=16;
if(*v>235)
*v=235;/确保UV在16,235之间
u++;
v++;/移至下一个地址
}
}
if(*y<16)
*y=16;
if(*y>235)
*y=235;/确保Y在16,235之间
b+=3;/b往后移三个地址
y++;/移至下一个地址
}
}
return 1;
}
图像压缩取样的方式
早期的显示器是以逐行扫描每个横线上的像素来显示图像的,通常是从顶部到底部快速连续的扫描。在每条线被扫描时,色度数值的传送频率比亮度低。
色度取样的方式是水平的。一条线被扫描时传递的亮度值和色度值间的比率常用来描述各种取样方式。这个比率通常基于亮度值,然后以4:X:Y的形式描述,X和Y是每两个色度通道中的数值的相对数量。
亮度分辨率
色度分辨率4:4:4
色度分辨率4:1:1
色度分辨率4:2:0
使用标准的命名规则,4:2:2意味着每个横向的扫描线每4个亮度值对应两个色度值。简单的,4:1:1意味着每4个亮度值对应1个色度值,4:4:4意味着色度值不进行二次采样。不过这不是完全连续的,4:2:0会以1个色度值对应四个亮度值,对于第一个色度元素有两个取样值,第二个色度元素则不进行取样,这不能产生完整的彩色图像。实际当中,4:2:0意味着每条扫描线有两个色度取样,只对隔行进行取样。
4:1:1与4:2:0的异同:
首先相同之处在于4:1:1和4:2:0格式对亮度Y信号的处理是相同的,都已 ‘A’ MHz抽样频率采样,区别在色差信号的处理方面。对于4:1:1来说,比较好理解,即色差信号Cr和Cb分别以 ‘1/4*A’ MHz的频率取样,Y,Cr,Cb的比值为4:1:1。在数据传送时,每一行传送亮度值Y为 ‘B’ 个,色差样本Cr和Cb各 ’1/4*B‘ 个,Cr和Cb样值的总和为 ’1/2*B‘ 个。对于4:2:0来说,则采用了另一种处理方式,即对Cr和Cb都已 ’1/2*A‘ 的频率抽样,但在传送时,除亮度样值Y为 ’B‘ 个外,每一行只传送两种色差样值Cr和Cb其中的一种,其样值和也为 ’1/2*B‘ 个,两种色差样值每行交替传送,这就是通常所说的4:2:0取样格式。在这两种系统中,Cr和Cb取样的起点和Y是相同的。在这里我们要注意的4:2:0中的0,他表示的是两种色差值在传送时时每行交替进行的,而绝不是有一个色差信号不取样。
三、音频篇
3.1 音频信号的获取和存储
获取:
声波是随时间而连续变化的物理量,通过能量转换装置,可用随声波变化而改变的电压或电流信号来模拟。以模拟电压的幅度来表示声音的强弱。
为使计算机能处理音频,必须对声音信号数字化。
采样:
即按一定的时间间隔(T)在模拟声波上截取一个振幅值(通常为反映某一瞬间声波幅度的电压值),得到离散信号x(nT)(n为整数)。若输入信号所包含的最高频率成分为fs,则不低于2fs的采样频率对信号进行采样,所得采样值可以无失真的构建原信号。
采样率:
采样率实际上是指当将声音储存至计算机中,必须经过一个录音转换的过程,转换些什么呢?就是把声音这种模拟信号转成计算机可以辨识的数字信号,在转换过程中将声波的波形以微分方式切开成许多单位,再把每个切开的声波以一个数值来代表该单位的一个量,以此方式完成采样的工作,而在单位时间内切开的数量便是所谓的采样频率,说明白些,就是模拟转数字时每秒对声波采样的数量,像是CD音乐的标准采样频率为44.1KHz,这也是目前声卡与计算机作业间最常用的采样频率。
另外,在单位时间内采样的数量越多就会越接近原始的模拟信号,在将数字信号还原成模拟信号时也就越能接近真实的原始声音;相对的越高的采样率,资料的大小就越大,反之则越小,当然也就越不真实了。数字数据量的大小与声道数、采样率、音质分辨率有着密不可分的关系。
前面提到CD音乐的采样率为44.1KHz,而在计算机上的DVD音效则为48KHz (经声卡转换) ,一般的电台FM广播为32KHz,其它的音效则因不同的应用有不同的采样率,像是以Net Meeting之类的应用就不要使用高的采样率,否则在传递这些声音数据时会是一件十分痛苦的事。
当然,目前比较盛行的蓝光的采样率就相当的高,达到了192kHz。而目前的声卡,绝大多数都可以支持44.1kHz、48kHz、96kHz,高端产品可支持192kHz甚至更高。
量化编码:
把采样值用二进制数字表示的过程成为量化编码。
量化精度:
声波在转为数字的过程中不是只有采样率会影响原始声音的完整性,另一个亦具有举足轻重的参数——量化精度,也是相当的重要。一般来说,音质分辨率就是大家常说的bit数。目前,绝大多数的声卡都已经可以支持24bit的量化精度。
那么,什么是量化精度呢?前面曾说明采样频率,它是针对每秒钟所采样的数量,而量化精度则是对于声波的“振幅”进行切割,形成类似阶梯的度量单位。所以,如果说采样频率是对声波水平进行的X轴切割,那么量化精度则是对Y轴的切割,切割的数量是以最大振幅切成2的n次方计算,n就是bit数。
举个例子,如果是8bit,那么在振幅方面的采样就有256阶,若是16bit,则振幅的计量单位便会成为65536阶,越多的阶数就越能精确描述每个采样的振幅高度。如此,也就越接近原始声波的“能量”,在还原的过程序也就越接近原始的声音了。
另外,bit的数目还决定了声波振幅的范围(即动态范围,最大音量与最小音量的差距)。如果这个位数越大,则能够表示的数值越大,描述波形更精确。每一个Bit的数据可以记录约等于6dB动态的信号。一般来说,16Bit可以提供最大96dB的动态范围(加高频颤动后只有92dB)。每增加一个Bit的量化精度,这个值就增加6dB。因此,我们可以推断出20Bit可以达到120dB的动态范围,而24Bit则可以提供高达144dB的动态范围。
那么,动态范围大了,会有什么好处呢?动态范围是指系统的输出噪音功率和最大不失真音量功率的比值,这个值越大,则系统可以承受很高的动态。比如1812序曲中的炮声,如果系统动态过小,高于动态范围的信号将被削波(Clipping, 高于0dB的溢出信号将被砍掉,会导致噼里啪啦的声音)。
16bit/44.1kHz、24bit/48kHz、24bit/192kHz
这三种采样,16bit/44.1kHz是CD中音频的采样、24bit/48kHz是DVD中音频的采样(区分:不是DVD Audio),而24bit/192kHz是蓝光中音频的采样。
存储格式:
*.cda格式,这就是CD音轨了。其实唱片上的一首首歌曲,并非我们通常理解的一个个的文件。为了在电脑上更方便地使用CD音轨,就在电脑上规定:一个CD音轨为一个*.cda文件。所以,不论CD音乐的长短,在电脑上看到的“*.cda”文件都是44字节长。
*.wav是微软制定的声音格式,播放*.wav文件,可达到CD音质。但是这是一种未经压缩的格式,故比较“臃肿”。一般的,可以播放一分钟声音的*.wav文件,大小在10M左右。
MP1/.MP2/.mp3格式是VCD的孪生兄弟。*.mp3压缩比12:1和较好的音质创造了一个全新的音乐领域,相同长度的音乐文件,一般只有*.wav文件的1/10,而音质大体接近CD的水平。
*.wma是微软格式。这种格式在录制时可以对音质进行调节。同一格式,音质好的可与CD媲美,压缩率较高的可用于网络广播。由于微软的大力推广,这种格式在高音质领域直逼*.mp3,在网络广播方面,也正在瓜分Real打下的天下。
*.mid格式记录了一段音乐,但是*.mid文件不是声音的“模样”,而是告诉电脑里的声卡如何发音,所以音质的好坏全在声卡的档次。*.mid格式的最大用处是在电脑作曲领域。
*.VQF即TWINVQ是由NTT与YAMAHA共同开发的一种音频压缩技术。VQF的音频压缩率可以达到18:1左右,甚至更好。其音质与MP3相当。
*.AIFF是音频交换文件格式的英文缩写。是APPLE公司开发的一种音频文件格式,被MACINTOSH平台及其应用程序所支持。AIFF支持ACE2、ACE8、MAC3和MAC6压缩。支持16位44.1KHZ立体声。
*.AU文件原先是UNIX操作系统下的数字声音文件。由于早期INTERNET上的WEB服务器主要是基于UNIX的,所以,AU格式的文件在如今的INTERNET中也是常用的声音文件格式。
以*.wav格式为例
WAVE 文件作为多媒体中使用的声音波形文件格式之一,它是以RIFF(Resource Interchange File Format)格式为标准的。每个WAVE文件的头四个字节便是“RIFF”。同样的,WAVE 文件由文件头和数据体两大部分组成。其中文件头又分为 RIFF/WAV 文件标识段和声音数据格式说明段两部分。WAVE文件各部分内容及格式见后文。
常见的声音文件主要有两种,分别对应于单声道(11.025KHz 采样率、8Bit 的采样值)和双声道(44.1KHz 采样率、16Bit 的采样值)。采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为八位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16位的整数(int),高八位和低八位分别代表左右两个声道。
WAVE 文件数据块包含以脉冲编码调制(PCM)格式表示的样本。WAVE 文件是由样本组织而成的。在单声道 WAVE 文件中,声道0代表左声道,声道1代表右声道。在多声道WAVE文件中,样本是交替出现的。
WAVE 文件除了前面一小段文件头对数据组织进行说明之外,Data 块就是声音的原始采样数据,WAVE 文件虽然可以压缩,但一般都使用不压缩的格式。44.1KHz 采样率、16Bit的分辨率、双声道,所以WAVE可以保存音质要求非常高的声音文件,CD 采用的也是这种格式,声音方面的专家或是音乐发烧友们应该非常熟悉。但这种文件的体积也非常大,以 44.1KHz 16bit 双声道的数据为例,一分钟的声音数据量为:41002byte*2channel*60s/1024/1024=10.09M 。所以不合适在网上传送。
WAVE 文件的格式:
endian | field name | Size | |
---|---|---|---|
big | ChunkID | 4 | 文件头标识,一般就是” RIFF” 四个字母 |
little | ChunkSize | 4 | 整个数据文件的大小,不包括上面ID和Size本身 |
big | Format | 4 | 一般就是” WAVE” 四个字母 |
big | SubChunk1ID | 4 | 格式说明块,本字段一般就是”fmt “ |
little | SubChunk1Size | 4 | 本数据块的大小,不包括ID和Size字段本身 |
little | AudioFormat | 2 | 音频的格式说明 |
little | NumChannels | 2 | 声道数 |
little | SampleRate | 4 | 采样率 |
little | ByteRate | 4 | 比特率,每秒所需要的字节数 |
little | BlockAlign | 2 | 数据块对齐单元 |
little | BitsPerSample | 2 | 采样时模数转换的分辨率 |
big | SubChunk2ID | 4 | 真正的声音数据块,本字段一般是”data” |
little | SubChunk2Size | 4 | 本数据块的大小,不包括ID和Size字段本身 |
little | Data | N | 音频的采样数据 |
以下是对各个字段的详细解说:
ChunkID | 4bytes | ASCII 码表示的“RIFF”。(0x52494646) |
---|---|---|
ChunkSize | 4bytes | 36+SubChunk2Size,或是4+(8+SubChunk1Size)+(8+SubChunk2Size ), 这是整个数据块的大小(不包括ChunkID和ChunkSize的大小) |
Format | 4bytes | ASCII 码表示的“WAVE”。(0x57415645) |
SubChunk1ID | 新的数据块(格式信息说明块) ASCII 码表示的“fmt ”——最后是一个空格。(0x666d7420) | |
SubChunk1Size | 4bytes | 本块数据的大小(对于PCM,值为16)。 |
AudioFormat | 2bytes | PCM = 1 (比如,线性采样),如果是其它值的话,则可能是一些压缩形式 |
NumChannels | 2bytes | 1 => 单声道 | 2 => 双声道 |
SampleRate | 4bytes | 采样率,如 8000,44100 等值 |
ByteRate | 4bytes | 等于: SampleRate * numChannels * BitsPerSample / 8 |
BlockAlign | 2bytes | 等于:NumChannels * BitsPerSample / 8 |
BitsPerSample | 2bytes | 采样分辨率,也就是每个样本用几位来表示,一般是 8bits 或是 16bits |
SubChunk2ID | 4bytes | 新数据块,真正的声音数据 ASCII 码表示的“data ”——最后是一个空格。(0x64617461) |
SubChunk2Size | 4bytes | 数据大小,即,其后跟着的采样数据的大小。 |
Data | N bytes | 真正的声音数据 |
参考资料:
1.http://16b8888.blog.163.com/blog/static/215463420076146494627/?hasChannelAdminPriv=true
2.https://my.oschina.net/liusicong/blog/323090
3.中国传媒大学数据压缩实验课件
4.http://www.ithao123.cn/content-8026195.html
5.http://www.vmovier.com/45052?from=backstage_left