MATLAB 图像压缩

f=[119 123 168 119;123 119 168 168];
f=[f;119 119 107 119;107 107 119 119];    %f有8个不同的值
p=hist(f(:),8);                           %求得p中每个元素出现的次数
p=p/sum(p);                               %求得p中每个值出现的概率
h=entropy(f);                      %求得f的熵

f2=uint8([2 3 4 2; 3 2 4 4; 2 2 1 2; 1 1 2 2]);   %f2是4x4数组
whos('f2')     ;                                 %打印f2的相关信息
%先统计f2中的数据出现的概率,然后进行Huffman编码
c=huffman(hist(double(f2(:)),4));             %c是码表,共4个元素
hlf2=c(f2(:))'      %利用码表c对原矩阵f2进行编码,显示编码后的数据
whos('hlf2')       %由于采用double类型编码,编码后长度加大
h3f2=mat2huff(f2);%利用mat2huff函数对f2进行Huffman编码,输出为二进制流的形式
whos('h3f2')       %输出h3f2为一个结构体,存储有码表信息和编码信息
hcode=h3f2.code;          %hcode 是编码后的码流
                          %以二进制的方式显示编码流
dec2bin(double(hcode))
f=imread('你的图');  
c=mat2huff(f);            %对f进行Huffman编码
cr1=imratio(f,c)          %计算图像压缩比率

f1=imread('你的图');     
imshow(f1);
c1=mat2huff(f1);            %对f2进行Huffman编码
entropy(f1)                 %打印f1的熵
imratio(f1,c1)               %打印图像压缩比率
                          
f2=imread('你的图')
figure,imshow(f2);
c2=mat2huff(f2);          %对f2进行Huffman编码
entropy(f2)             %打印f2的熵
imratio(f2,c2)          %打印图像压缩比率
%**************************无损预测编码************************
f=imread('你的图');    
e=mat2lpc(f);                 %对f进行线性预测编码,e是预测误差图像
imshow(mat2gray(e));          %将预测误差图像缩放到[0,1]之间,然后显示出来
entropy(e)                  %打印预测误差图像的熵
c=mat2huff(e);                %对预测误差图像进行Huffman编码

f=imread('你的图');   
imshow(f);                    %对f进行IGS量化,q是量化系数
q=quantize(f,4,'igs');      %quantize 是量化函数
qs=double(q)/16;              %对q的值进行缩小
e=mat2lpc(qs);                %对量化系数进行线性预测编码
c=mat2huff(e);                 %对预测误差进行Huffman编码
imratio(f,c)                  %计算并打印图像压缩比率
%**************************解码过程***********************************
ne=huff2mat(c);               %ne是Huffman解码后的矩阵
nqs=lpc2mat(ne);
nq=16*nqs;                    %反量化
compare(q,nq);                %比较q和nq之间的差值
rmse=compare(f,nq);           %图像压缩后的均方根误差,由量化引起

 f=imread('你的图');      
imshow(f);
% 调用im2jpeg函数对图像进行JPEG压缩,采用默认量化参数。
c1 = im2jpeg(f);		   
f1=jpeg2im(c1);		      % JPEG图像解压
imratio(f, c1)		          % 计算并打印图像压缩比率
compare(f, f1, 3)	          % 计算图像压缩后的误差
c4 = im2jpeg(f, 4);	          % 图像压缩,采用4倍的量化参数
f4 = jpeg2im(c4);		      % JPEG图像解压
imratio(f, c4);	          % 计算并打印图像的压缩比
compare(f, f4, 3);	          % 计算并打印图像压缩后的误差

发布了125 篇原创文章 · 获赞 31 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Fiverya/article/details/90400026