用c语言从JPEG(文件后缀为.jpg)中提取jpeg压缩的亮度和色度量化矩阵(luminance,chroma quantization matrix)

jpeg压缩过程

jpeg压缩过程博客一
jpeg压缩过程博客二
jpeg压缩过程博客三
jpeg维基百科
压缩率(品质因数)与量化矩阵的关系(Stack Overflow)
综合上述内容,总结提炼:

  1. 将任意原始图像经过jpeg压缩,是一个有损压缩过程,信息量的损失是按照量化矩阵对DCT系数进行round到整数量化时出现的,不同的量化矩阵会导致不同的jpeg压缩率。随着压缩率的增加相应的图像清晰度也会变低,具体压缩率与量化矩阵的关系见此链接

  2. 压缩率由品质因数(Q)反应,Q的取值范围从1-100,取1时图像压缩率最高,最不清晰,量化矩阵的所有元素值均为255;取100时图像没有压缩,与原图相同,量化矩阵的所有元素值都为1;当Q取50时,就是现有博客中常见的量化矩阵系数:
    在这里插入图片描述
    在这里插入图片描述

  3. 量化矩阵作用在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 down)')

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值