数字图像处理(七)图像压缩-无损编码/压缩算法+matlab

article/2025/9/25 1:31:54

要求:

无损编码/压缩算法:

  • 问题1: 实现行程编码压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析;
  • 问题2: 实现哈夫曼压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析;
  • 问题3: 实现一维无损预测压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析.

1、问题及说明

(1)实现行程编码压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析。

基本思路是把数据看成一个线性序列,而这些数据序列组织方式分成两种情况:一种是连续的重复数据块,另一种是连续的不重复数据块。对于连续的重复数据块采用的压缩策略是用一个字节表示数据块重复的次数,然后在这个数据字节后面存储对应的数据字节本身;对于连续不重复的数据序列,表示方法和连续的重复数据块序列的表示方法一样,只不过前面的数据重数属性字节的内容为1。

(2)实现哈夫曼压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析

基本思路是给定有权重的一系列数据(带权重),从中挑选最小权重的两个数据,组成一棵树,得到的父节点再插入到数据系列当中。

(3)实现一维无损预测压缩, 肉眼观察压缩效果,并计算原图和压缩以后的尺寸,计算压缩率并比较分析。

基本思想是通过对每个像素中新增信息进行提取和编码,以此来消除像素间的冗余,这里新增信息是指像素当前实际值和预测值的差。也就是说,如果已知图像一个像素离散幅度的真实值,利用其相邻像素的相关性,预测它的可能数值,再求两者的差。利用这种具有预测性质的差值,再量化、编码传输,其效果更佳,这种方法称为DPCM法。

2、效果展示

(1)行程编码压缩

(2)哈夫曼压缩

(3)一维无损预测压缩

3、实验结果分析

1)RLE压缩方案是一种极其成熟的压缩方案,特点是无损失压缩,既节省了磁盘空间又不损失任何图像数据。RLE有一个缺点,如果内容像ABCABCABC的话使用这种算法文件会增大,就是1A1B1C1A1B1C1A1B1C了,更长,就达不到压缩的效果了。

上面两张图片,由于其内容序列的优劣,它们的压缩比就不同。

2)因为要用额外的位保存和传输Huffman树而消耗掉一些存储位,所以为了编解码的方便,本已经减少的数据量又增加了一些。

如果文件比较大的话,这一点的数据根本不算什么,所占比例很小。但是,如果压缩的文件本来就很小的话,那么这就不少了。一般来说,经典的Huffman算法的压缩比不是很高,这是无损压缩的“通病”。

4.完整代码

(1)RLE

clear
I1=imread('lena.tiff');%转换为二值图像
J=rgb2gray(I1);
I2=J(:);
I2length=length(I2);
figure,imshow(J);for i=1:1:I2lengthif I2(i)>=127I2(i)=255;else I2(i)=0;end
endI3=reshape(I2,512,512);         %重建二维数组图像
figure,imshow(I3);%对原图像进行行程编码
X=I3(:);                        %令X为新建的二值图像的一维数据组
x=1:1:length(X);                %显示行程编码之前的图像数据
figure,plot(x,X(x));
j=1;
I4(1)=1;%行程编码程序段
for z=1:1:(length(X)-1)if X(z)==X(z+1)I4(j)=I4(j)+1;else data(j)=X(z);          %data(j)代表相应的像素数据j=j+1;I4(j)=1;end
enddata(j)=X(length(X));           %最后一个像素数据赋值给data
I4length=length(I4);            %计算行程编码后的所占字节数
y=1:1:I4length;                 %显示编码后数据信息
figure,plot(y,I4(y));
CR=I4length/I2length;           %比较压缩前后的大小
disp(['原图 Bit:                  ',num2str(I2length),' bit']);
disp(['压缩图像 Bit:               ',num2str(I4length),' bit']);
disp(['压缩率:                     ',num2str(CR)]);

(2)哈夫曼压缩

clear;
clear all;
A=imread('baboon.tiff');
I=rgb2gray(A);[M,N] = size(I);
I1 = I(:);
P = zeros(1,256);
%获取各符号的概率;
for i = 0:255P(i+1) = length(find(I1 == i))/(M*N);
endk = 0:255;
dict = huffmandict(k,P); %生成字典
enco = huffmanenco(I1,dict); %编码
deco = huffmandeco(enco,dict); %解码
Ide = col2im(deco,[M,N],[M,N],'distinct'); %把向量重新转换成图像块;decolength=length(deco); 
encolength=length(enco); subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(uint8(Ide));title('压缩');OB=encolength;
sumcode=decolength;
CR=sumcode/OB;
disp(['原图 Bit:                  ',num2str(OB),' bit']);
disp(['压缩图像 Bit:               ',num2str(sumcode),' bit']);
disp(['压缩率:                     ',num2str(CR)]);

(3)一维无损预测压缩

I=imread('baboon.tiff'); I=rgb2gray(I);
x=double(I);
y=LPCencode(x);   
xx=LPCdecode(y);figure(1);
subplot(121);
imshow(I);
subplot(122);
imshow(mat2gray(y));e=double(x)-double(xx);
[m, n]=size(e);
erms=sqrt(sum(e(:).^2)/(m*n))    figure(2);
subplot(121);
[h, f]=hist(x(:));    
bar(f, h, 'k');subplot(122);
[h, f]=hist(y(:));    
bar(f, h,'k');

 

 


http://chatgpt.dhexx.cn/article/9PrIUMuJ.shtml

相关文章

图像压缩原理-JPEG

搬来一个基础啊 给自己看~~ 非技术指正勿扰 图像的格式有很多种,比如PNG,JPEG等等,但当我们把一张图用工具变成各种其他格式时,其在计算机文件系统显示的文件大小各不一样,但是当你打开显示时,从视觉角度…

图像压缩算法简介

理论基础 香农的信息论,在不产生任何失真的前提下,通过合理的编码,对于每个信源符号分配不等长的码字,平均码长可以任意接近于信源的熵。在这个理论框架下产生了几种不同的无失真的信源编码方法:哈夫曼编码&#xff0c…

图像压缩原理

原文网址:http://blog.csdn.net/newchenxf/article/details/51693753 转载请注明出处。 1 图像可压缩的原因 一张原始图像(1920x1080),如果每个像素32bit表示(RGBA),那么,图像需要的内存大小 1920x1080x…

JPEG图像压缩算法详解

转载自 http://www.ibm.com/developerworks/cn/linux/l-cn-jpeg/ JPEG压缩算法之前已有很多前辈详细讲解过,我就不在这里画蛇添足了(主要是我懒。。),转载两篇JPEG压缩算法介绍,拼为一篇。侵删。 JPEG图像压缩算法详解…

图片压缩知识

一、图片压缩算法 有损算法: JPEG,我们最为常用的算法。他是通过离散余弦变换,对图片质量尽量小的时候进行有损压缩,该算法对高中波特率下效果很好,但是对低波特率下,就会出现方格之类的,比如1…

imadjust函数分析一

声明:本文涉及到的行数皆指本文提供的附件imadjust.m的代码中行数 本文只讨论imadjust函数是一种用法,即 J IMADJUST(I,[LOW_IN; HIGH_IN],[LOW_OUT; HIGH_OUT],GAMMA) 处理效果如下图 图像矩阵I要求数据类型uint8、uint16、double、single和int16&…

matlab灰度变换函数imadjust、stretchlim

1、imadjust函数 gimadjust(f,[low_in,high_in],[low_out,high_out],gamma) f为输入灰度图像,将low_in和high_in之间的灰度值映射到low_out到high_out之间 gamma大于1,映射函数下凸;小于1,上凸;gamma默认为1&#x…

Matlab中库函数imadjust()的使用细节

不知道大家有没有使用这个函数时,出现结果异常、过曝的情况我在使用时,发现在官方文档中并未声明的细节。 结合开源的程序源码和实验结果发现该函数对矩阵进行处理时,会对参数指明的处理数据以外的内容进行调整,错误使用会导致图像…

stretchlim matlab,matlab灰阶变换函数imadjust和stretchlim的c++实现

灰阶变换 首先介绍一下灰阶变换,一幅图像数据本身在存储的数据结构上为一个二维的矩阵,即一幅图像为m*n个密密麻麻的像素点构成。 image.png 然后,这些像素点有着一个值,这个值成为灰度值或者亮度值,值的范围为[0,255]…

在OpenCV里实现函数imadjust

imadjust 函数是针对灰度图像进行灰度变换的基本图像。 J = imadjust(f,[low_in; high_in],[low_out; high_out],gamma) 此函数将 f 的灰度值映像到 g 中的新值, 也就是将 low_in 与high in 之间的值映射到 low out 与 high out 之间的值。 low in 以下与 high in 以上的值可…

imadjust使用opencv实现

实现函数功能 J low_out (high_out - low_out).* ((I - low_in)/(high_in - low_in)).^ gamma [cpp] view plain copy print ? IplImage* ImageAdjust(IplImage *src, IplImage *dst, double low_in, double high_in, double low_out, double h…

python实现matlab stretchlim函数和imadjust函数

matlab 代码: [img,map]imread(“/home/zhongjia/test.png”); LOW_HIGHstretchlim(img); Jimadjust(img,[LOW_HIGH(1) LOW_HIGH(2)],[0 1],1); imwrite(J,"/home/zhongjia/test_result.png"); 实现功能是:对16位深度1024*1024大小的test.…

MATLAB图像处理imadjust()函数调节图像的对比度示例

imadjust()函数 Jimadjust(I) 将强度图像为I的值映射到J中的新值,使得1%的数据在低强度和高强度I时饱和。这将增加了输出图像J的对比度。 J imadjust(I,[LOW_IN; HIGH_IN],[LOW_OUT; HIGH_OUT])将强度图…

matlab常用语句imadjust作用,matlab中imadjust函数的作用及应用举例

imadjust简介 imadjust是一个计算机函数,该函数用于调节灰度图像的亮度或彩色图像的颜色矩阵。在matlab的命令窗口中键入: doc imadjust或者help imadjust就行了获得该函数的帮助信息, 键入type imadjust可以查看函数的源码。 调用格式&#…

matlab imadjust函数,imadjust从用法到原理—Matlab灰度变换函数之一

imadjust函数是MATLAB的一个工具箱函数,一般的语法调用格式为: f1=imadjust(f,[low_in high_in],[low_out high_out],gamma) (注:本文所述图像数据均为Uint8,对于Matlab,矩阵中的一个元素即是一个像素点) 该函数的意义如图1所示,把图像f灰度变换到新图像f1的过程中,f…

matlab imadjust函数,浅析matlab中imadjust函数

imadjust imadjust是一个计算机函数,该函数用于调节灰度图像的亮度或彩色图像的颜色矩阵。在matlab的命令窗口中键入: doc imadjust或者help imadjust即可获得该函数的帮助信息, 键入type imadjust可以查看函数的源代码。 函数功能&#xff1…

matlab图像灰度调整——imadjust函数的使用

在MATLAB中,通过函数imadjust()进行图像灰度的调整,该函数调用格式如下: Jimadjust( I ) 对图像I进行灰度调整 Jimadjust( I,[low_in;high_in],[low_out;high_out]) [low_in;high_in]为原图像…

matlab——imadjust函数

作用: 对进行图像的灰度变换,即调节灰度图像的亮度或彩色图像的颜色矩阵。 格式: g imadjust(f,[low_in; high_in],[low_out; high_out]) 将图像I中的亮度值映射到J中的新值。即将low_in至high_in之间的值映射到low_out至high_out之间的值。…

4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波)、有约束滤波器(维纳滤波器)

4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波)、有约束滤波器(维纳滤波器) 文章目录 4.3 Python图像处理之图像恢复-无约束滤波器(逆滤波)、有约束滤波器(维纳滤波器)1 算法原…

MATLAB图像的恢复

一、实验类型:验证性实验 二、实验目的 1. 掌握退化模型的建立方法。 2. 掌握图像恢复的基本原理。 三、实验设备:安装有MATLAB 软件的计算机 四、实验原理 一幅退化的图像可以近似地用方程gHfn 表示,其中g 为图像,H为变形算…