颜色空间、位深、压缩算法

126 阅读2分钟

位深

表示像素的数据长度 8bit范围【0,255】
10bit范围【0,1023】

灰度图像
每个像素点只有一个分量,表示亮度,8bit=0000 0000是黑色,8bit=0111 1111近白色,8bit=1111 1111是白色(值255)

彩色图像
每个像素点有多个颜色分量,每个颜色分量被称为一个通道(channel).图像中所有像素点的通道数是一致的。
每个分量都是一副图像,只是颜色不同。比如RGB图像,每个通道都是一个灰度图,每个像素点38=24bit.如果是ARGB,A是透明度,则每个像素点48=32bit。

一副RGB图像19201080像素=19201080*24bit=49766400bit,约6.22MB。

颜色空间

RGB和YUV=Y`CrCb

压缩算法

  • 无损压缩:基于预测或熵编码的算法,比如PNG,BMP,GIF
  • 有损压缩:基于变换和量化编码的算法,比如JPEG

游程编码:将一串连续的,重复的字符用简单的“数目+字符”表示。比如AAAACCBD=4A2C1B1D.
哈夫曼编码:一种特殊的二叉树,根据出现的频率构建,终端节点表示一种字符,右子节点(非终端节点)代表0,左子节点(非终端节点)代表1,从根节点(根节点不算在内)到中端节点的路径代表一种字符,比如110表示C;

字符串:"ABRACADABRA"
频率:C (1), D (1), B (2), R (2), A (5)
                  [根: 11]
               /            \
           A (0,5)         [节点:6]
                        /            \
                   [节点:4]         [节点:2]
                  /      \          /      \
              B(100,2) R(101,2) C(110,1)   D(111,1)                      
说明:括号内为 编码:频率

JEPG格式压缩编码过程

  1. 转为YUV420
  2. 每个分量分成多个8像素*8像素的像素块。
  3. 每个像素块经过离散余弦变换(DCT)为值频域,并且根据量化表,量化成特定的值。
  4. 变化系数,直流分量系数通过DPCM编码后输出数据;或者交流分量系统则通过“之”字形扫描转换成一维数据,再通过游程编码后输出数据。
  5. 熵编码,比如哈夫曼编码等。
  6. 生成压缩码流输出。