jpeg压缩过程
jpeg压缩过程博客一
jpeg压缩过程博客二
jpeg压缩过程博客三
jpeg维基百科
压缩率(品质因数)与量化矩阵的关系(Stack Overflow)
综合上述内容,总结提炼:
-
将任意原始图像经过jpeg压缩,是一个有损压缩过程,信息量的损失是按照量化矩阵对DCT系数进行round到整数量化时出现的,不同的量化矩阵会导致不同的jpeg压缩率。随着压缩率的增加相应的图像清晰度也会变低,具体压缩率与量化矩阵的关系见此链接。
-
压缩率由品质因数(Q)反应,Q的取值范围从1-100,取1时图像压缩率最高,最不清晰,量化矩阵的所有元素值均为255;取100时图像没有压缩,与原图相同,量化矩阵的所有元素值都为1;当Q取50时,就是现有博客中常见的量化矩阵系数:
-
量化矩阵作用在YUV通道经过DCT处理后的8*8矩阵上,同时需要注意的是量化矩阵有两种,一种为亮度量化矩阵,作用在Y通道,一种为色度量化矩阵,作用在U、V通道。
用MATLAB生成任意压缩率的jpeg图片
知道上述理论后,可以通过MATLAB制作任意压缩率的jpeg图片。在互联网上任意下载一图片并存储在m文件的同一文件夹下,虽然下载的图片也是jpg格式的,但是当在MATLAB中处理时,由于imread函数直接读取得到图片的RGB,因此,相对地,我们可以将其当成是原始图片,记为Ireference。
Ireference = imread('下载.jpg');
imwrite(Ireference,fullfile('下载Quality10.jpg'),'Quality',10);
imwrite(Ireference,fullfile('下载Quality50.jpg'),'Quality',50);
imwrite(Ireference,fullfile('下载Quality100.jpg'),'Quality',100);
imwrite(Ireference,fullfile('下载Quality1.jpg'),'Quality',1);
imwrite(Ireference,fullfile('下载Quality60.jpg'),'Quality',60);
I10 = imread(fullfile('下载Quality10.jpg'));
I50 = imread(fullfile('下载Quality50.jpg'));
I100 = imread(fullfile('下载Quality100.jpg'));
I1 = imread(fullfile('下载Quality1.jpg'));
I60 = imread(fullfile('下载Quality60.jpg'));
montage({I1,I10,I50,I60,I100,Ireference},'Size',[2 3])
title('JPEG-Compressed Images with Quality Factor: 1,10,50,60,100 and origin (left to right,up to dow