文章目录
Huffman编码
Huffman Coding (霍夫曼编码)是一种无失真编码的编码方式,Huffman 编码是可变字长编码(VLC)的一种。Huffman 编码基于信源的概率统计模型,它的基本思路是,出现概率大的信源符号编短码,出现概率小的信源符号编长码,从而使平均码长最小。
举例:
“this is an example of a huffman tree”,共得132bit的码字
字母 space a e f h i m n s t l o p r u x 频率 7 4 4 3 2 2 2 2 2 2 1 1 1 1 1 1 编码 111 010 000 1101 1010 1000 0111 0010 1011 0110 11001 00110 10011 11000 00111 10010 ![]()
图像编码
RGB
RGB 图像中,每个像素点都有红、绿、蓝三个原色,其中每种原色都占用 8 bit,也就是一个字节,那么一个像素点也就占用 24 bit,也就是三个字节。RGB每个元素的取值范围为:0~255。那么三色组合起来256x256x256=16777216(约1600w种)颜色。由于人眼的解析度有限,以3个字节来描述颜色以及完全够用了,甚至有点多余。 用三字节表示颜色的方式通常称为真彩色。
![Adobe RGB色彩空间- 维基百科,自由的百科全书](https://upload.wikimedia.org/wikipedia/commons/5/53/CIExy1931_AdobeRGB.png)
BMP
BMP文件采用位映射存储格式,大多只通过选择位的大小进行压缩,因此会占用比较大的空间,BMP 文件的图像深度(每个像素用几bit表示)可选 lbit、4bit、8bit、16bit 及 24bit。BMP 文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。(8bit及以下要调色板)BMP文件由4部分组成:
- 位图文件头(bitmap-file header)
typedef struct tagBITMAPFILEHEADER {
WORD bfType; /* 说明文件的类型 */
DWORD bfSize; /* 说明文件的大小,用字节为单位 */
/*注意此处的字节序问题*/
WORD bfReserved1; /* 保留,设置为0 */
WORD bfReserved2; /* 保留,设置为0 */
DWORD bfOffBits; /* 说明从BITMAPFILEHEADER结构开始到实际的图像数据之间的字节偏移量 */
} BITMAPFILEHEADER;
- 位图信息头(bitmap-informationheader)
typedef struct tagBITMAPINFOHEADER {
DWORD biSize; /* 说明结构体所需字节数 */
LONG biWidth; /* 以像素为单位说明图像的宽度 */
LONG biHeight; /* 以像素为单位说明图像的高速 */
WORD biPlanes; /* 说明位面数,必须为1 */
WORD biBitCount; /* 说明位数像素,1、2、4、8、24 */
DWORD biCompression; /* 说明图像是否压缩及压缩类型 BI_RGB,BI_RLE8,BI_RLE4,BI_BITFIELDS */
DWORD biSizeImage; /* 以字节为单位说明图像大小,必须是4的整数倍*/
LONG biXPelsPerMeter; /* 目标设备的水平分辨率,像素/米 */
LONG biYPelsPerMeter; /*目标设备的垂直分辨率,像素/米 */
DWORD biClrUsed; /* 说明图像实际用到的颜色数,如果为0则颜色数为2的biBitCount次方 */
DWORD biClrImportant; /*说明对图像显示有重要影响的颜色索引的数目,如果是0,表示都重要。*/
} BITMAPINFOHEADER;
-
颜色表(color table)
-
颜色点阵数据(bits data)
24位真彩色位图没有颜色表,所以只有1、2、4这三部分。
YUV
- Y 表示明亮度(Luminance,Luma或brightness),也就是灰阶值
- U 和 V 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
YUV像素格式来源于RGB像素格式,通过公式运算,YUV 三分量可以还原出 RGB,YUV 转 RGB 的公式如下:
R = Y + 1.403V
G = Y - 0.344U - 0.714V
B = Y + 1.770U
YUV的采样方式
YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,如何根据其采样格式来从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV值,才能通过YUV与RGB的转换公式提取出每个像素点的RGB值,然后显示出来。
用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。
- YUV 4:4:4采样,每一个Y对应一组UV分量,每像素32位
- YUV 4:2:2采样,每两个Y共用一组UV分量,每像素16位
- YUV 4:2:0采样,每四个Y共用一组UV分量,每像素16位
音频编码
音频特性
声音信号的冗余
时域:幅度非均匀分布,小幅度的样值比大幅度的样值出现的概率高;
频域:功率谱密度非均匀:低频能量高、高频能量低。
听觉特性
**人耳的听觉特性: ** 声音中听不到的东西可以不采样、不编码、不传输。
人耳的听觉掩蔽效应: 一个强纯音会掩蔽在其附近(频率附近)同时发声的弱纯音,听觉阈随声音频率的变化而变化,也随声音的响度变化而变化。
掩蔽效应的利用:去除被掩蔽的信号分量,不理会可能被掩蔽的量化噪声(选择使量化噪声小于最小掩蔽值时的最小量化比特数)
临界频带
当某个纯音被以它为中心频率、且具有一定带宽的连续噪声所掩蔽时,如果该纯音刚好被听到时的功率等于这一频带内的噪声功率,这个带宽为临界频带宽度。
人类听觉系统相当于一个在0KHz~20KHz范围内一个由25个重叠的带通滤波器组成的滤波器组。人耳不能区分同一个频带内同时发生的不同声音。临界频带的宽度用bark来衡量,500Hz以下临界频带宽度约为100Hz,从500Hz起临界频带带宽线性增加。
说明:
-
理想的频带分割应该模仿临界频带,即各子带的宽度不一致,随频率的升高而增加。
-
每个子带根据各自的信号掩蔽比确定相应的量化级数,分配比特使量化噪声和掩蔽阈值越接近,数据压缩越充分。
MPEG音频编码
动态比特分配
在调整到固定的码率之前先确定可用于样值编码的有效比特数,这个数值取决于比例因子、比例因子选择信息、比特分配信息 以及辅助数据所需比特数。比特分配的过程: 对每个子带计算掩蔽-噪声比MNR,是信噪比SNR – 信掩比 SMR,即:MNR = SNR – SMR
视频编码
帧内编码
色度亚采样
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YB54I2ch-1661135013419)(C:\Users\z00598330\AppData\Roaming\Typora\typora-user-images\image-20220801144657854.png)]
帧间预测编码
视频结构
I、P、B帧
宏块搜索
基于运动估计和运动补偿的帧间预测编码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KmXF5S8J-1661135013419)(C:\Users\z00598330\AppData\Roaming\Typora\typora-user-images\image-20220801145110931.png)]
H.264
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1F1MbNXW-1661135013420)(C:\Users\z00598330\AppData\Roaming\Typora\typora-user-images\image-20220801143740374.png)]
整体结构为 变换+预测+量化+熵编码
块匹配法: 在搜索范围内按块计算欧式距离,欧氏距离最小的则为匹配块。
运动估计: 通过对运动部分用更精细的像素维度进行编码,提升运动部分的预测精度。
多参考帧预测估计
SVC
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CW2EoHXn-1661135013420)(C:\Users\z00598330\AppData\Roaming\Typora\typora-user-images\image-20220801145548542.png)]
可分级编码类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zgs1hOVK-1661135013420)(C:\Users\z00598330\AppData\Roaming\Typora\typora-user-images\image-20220801145621667.png)]