利用代码如何做网站,wordpress怎样修改字体大小,搜狗网站录入,邢台做网站找谁相关最全的一篇文章链接#xff1a;https://www.cnblogs.com/wtysos11/p/14089482.html
YUV基础知识
Y表示亮度分量#xff1a;如果只显示Y的话#xff0c;图像看起来会是一张黑白照。 U#xff08;Cb#xff09;表示色度分量#xff1a;是照片蓝色部分去掉亮度#x…相关最全的一篇文章链接https://www.cnblogs.com/wtysos11/p/14089482.html
YUV基础知识
Y表示亮度分量如果只显示Y的话图像看起来会是一张黑白照。 UCb表示色度分量是照片蓝色部分去掉亮度Y。 VCr表示色度分量是照片红色部分去掉亮度Y。
YUV Formats分成两个格式
紧缩格式打包格式packed formats将Y、U、V值储存成Macro Pixels阵列和RGB的存放方式类似。 平面格式planar formats将Y、U、V的三个分量分别存放在不同的矩阵中。
YUV422平面 YUV420平面格式 YUV420内存布局 转到YCbCr色彩空间后就可以将 CbU) 和 Cr(V) 这两个通道进行降采样这里一般是将 22 个像素变为 11 个像素虽然分辨率下降到了四分之一但对于人眼来说差别是不大的。
YUV422spSemi-Planar Semi半平面模式 RGB24一帧的大小sizewidth×heigth×3 BRGB32的sizewidth×heigth×4YUV标准格式420 的数据量是 sizewidth×heigth×1.5 B
平面格式与交错格式内存存储 YUV与RGB变换 YUV编码例子
https://zhuanlan.zhihu.com/p/106355033
Level Offset 零电平偏置下移
该步骤的作用是图像内容平均亮度较高将0电平移到中间平均亮度降低 便于DCT变换量化后直流的系数大大降低也就降低了数据量。
将灰度级 2 n 2^n 2n的像素值全部减去 2 n − 1 2^{n-1} 2n−1 数据形式由无符号数变为有符号数(补码)单极性数据变为双极性数据。
Z形编码 DCT变换
将图像分为8×8的像块对于宽高不是8的整数倍的图像使用图像边缘像素填充以不改变频谱分布。然后对每一个子块进行DCTDiscrete Cosine Transform离散余弦变换 其中C是8x8的DCT变换二维核矩阵F ( u , v ) 是原始的数据。由于DCT变换是一个正交变换故 C T C − 1 C^T C^{-1} CTC−1
变换核矩阵如下所示 量化
JPEG系统分别规定了亮度分量和色度分量的量化表色度分量相应的量化步长比亮度分量大。
对亮度和色度分量的DCT系数进行量化使用如下量化表该量化表是从广泛的实验中得出的。当然也可以自定义量化表。
//标准亮度分量量化表
static const unsigned int std_luminance_quant_tbl[DCTSIZE2] {16, 11, 10, 16, 24, 40, 51, 61,12, 12, 14, 19, 26, 58, 60, 55,14, 13, 16, 24, 40, 57, 69, 56,14, 17, 22, 29, 51, 87, 80, 62,18, 22, 37, 56, 68, 109, 103, 77,24, 35, 55, 64, 81, 104, 113, 92,49, 64, 78, 87, 103, 121, 120, 101,72, 92, 95, 98, 112, 100, 103, 99
};//标准色度分量量化表
static const unsigned int std_chrominance_quant_tbl[DCTSIZE2] {17, 18, 24, 47, 99, 99, 99, 99,18, 21, 26, 66, 99, 99, 99, 99,24, 26, 56, 99, 99, 99, 99, 99,47, 66, 99, 99, 99, 99, 99, 99,99, 99, 99, 99, 99, 99, 99, 99,99, 99, 99, 99, 99, 99, 99, 99,99, 99, 99, 99, 99, 99, 99, 99,99, 99, 99, 99, 99, 99, 99, 99
};对DCT变换进行量化后得到的量化结果会出现大量的0使用Z形扫描可以将大量的0连到一起减小编码后的大小。越偏离左上方表示频率越高通过量化将图像的高频信息干掉了。
编码
直流编码DPCM VLC 可变长熵编码采用Huffman
8×8图像块经过DCT变换之后得到的DC直流系数有两个特点
系数的数值比较大相邻8×8图像块的DC系数值变化不大冗余
根据这个特点JPEG算法使用了差分脉冲调制编码(DPCM)技术对相邻图像块之间量化DC系数的差值DIFF进行编码 对DPCM后算出的DIFF差值使用Huffman编码。所以DC系数会产生一张长度为16的Huffman码表。 交流ZigZag Scan Run Length EncodingVLC
对于量化后的数据我们将其分为两路进行处理。一路是AC通路一路是DC通路。
ZigZag ScanRLE是用于AC通路的这是因为AC分量出现较多的0。JPEG采用对0系数的游程长度编码。而对非0值则要保存所需数和实际值。 在编码之前需要把二维的变换系数矩阵转换为一维序列由于量化之后右下角高频系数大部分为零采用ZigZag Scan读取可以制造较长的零游程提高编码效率。在扫描中如果后续的系数全部为零则用“EOB”表示块结束。 RLE编码的过程
例例如现有一个字符串如下所示
57,45,0,0,0,0,23,0,-30,-8,0,0,1,000…
经过RLE之后将呈现出以下的形式
(0,57) ; (0,45) ; (4,23) ; (1,-30) ; (0,-8) ; (2,1) ; (0,0)
注意如果AC系数之间连续0的个数超过16则用一个扩展字节(15,0)来表示16连续的0。 所以最后总共有4张Huffman码表亮度DC亮度AC色度DC色度AC。
那么这些码表如何存储源数据又放在哪里针对这些未解之谜接下来我们就分析JPEG的存储结构。
JPEG编码示例
1.1 分块
某个图象的一个8*8方块的亮度值 1.2 Level Offset
Level Offset 后每个点值减去128 1.3 DCT变换
DCT变换后 1.4 量化 其中参照的量化表是 量化时使用量化前的值除以量化表中相应位置的值。具体计算公式如下 B [ i ] B [ i ] 0.5 Q [ i ] B[i] \frac{B[i] 0.5}{Q[i]} B[i]Q[i]B[i]0.5
在可以损失一部分精度的情况下如何用更少的空间存储这些浮点数答案是使用量子化 Quantization 简称量化。比如把要量化值分成16个区间用0到16这样的整数来表示这样只用4个bit就足够了。
随后对于这个8*8方块的亮度量化后的数据分别进行AC和DC两路的编码。
量化过程可以参看如下网址的说明 https://blog.csdn.net/weixin_43876729/article/details/121733344
1.5 编码
1.1 建立哈夫曼树
1第一个码字必定为0。 如果第一个码字位数为1则码字为0 如果第一个码字位数为2则码字为00 如此类推。
2从第二个码字开始 如果它和它前面的码字位数相同则当前码字为它前面的码字加1 如果它的位数比它前面的码字位数大则当前码字是前面的码字加1后再在后边添若干个0直至满足位数长度为止。
由于没有1位的码字所以第一个码字的位数为2即码字为00 由于2位的码字有两个所以第二个码字位数仍为2即码字为00101 第三个码字为3位比第二个码字长1位所以第三个码字为01110然后再添1个“0”得100
如此类推最后得到这个哈夫曼树如下
哈夫曼表ID和表类型
这个字节的值为一般只有四个0x00、0x01、0x10、0x11。 0x00表示DC直流0号表 0x01表示DC直流1号表 0x10表示AC交流0号表 0x11表示AC交流1号表。 查阅标记SOF0可以得到图像不同颜色分量的采样因子即Y、Cr、Cb三个分量各自的水平和垂直采样因子。
大多图片的采样因子为411或111。
411 即22111*1
111 即11111*1
记三个分量中水平采样因子最大值为Hmax垂直采样因子最大值为Vmax那么单个MCU矩阵的宽就是Hmax8像素高就是Vmax8像素。
JPEG的压缩方法与BMP文件有所不同它不是把每个像素的颜色分量连续存储在一起的而是把图片分成YCrCb三张子图然后分别压缩。
解压缩实现细节https://www.cnblogs.com/leaven/archive/2010/04/06/1705846.html
JPEG文件
JPEG的文件格式一般有两种文件扩展名.jpg和.jpeg。严格来讲JPEG的文件扩展名应该为.jpeg由于DOS时代的8.3文件名命名原则就使用了.jpg的扩展名这种情况类似于.htm和.html的区别。
1992年颁布了JPEG File Interchange FormatJFIF目前在互联网上用的最多的jpeg格式接着又出现了EXIF格式主要用于数码产品记录了媒体的时间地点信息。
JPEG文件由一系列字段组成每个字段都有marker标记由0xff开头。 1SOF markerStart of Frame这个字段定义了文件的起始 2APP0(Application-specific)这个字段定义了JFIF格式 3APPn(Application-specific)定义了其它格式如APP1表示exif格式 4DQTDefine Quantization Table(s)定义了量化表 需要注意的问题
jpeg文件使用网络字节顺序
参考链接
https://zhuanlan.zhihu.com/p/62286932https://blog.csdn.net/weixin_44874766/article/details/117444843https://blog.csdn.net/yun_hen/article/details/78135122