图像压缩所解决的主要问题是尽量减少表示数字图像时所需要的数据量。减少数据量的基本原理是去除其中多余的数据。本博客将给定的图像进行压缩处理,使Huffman编码方法,并计算压缩比,分析图像压缩后的视觉效果。
文章目录
-
- 一、主要设计思想
- 二、实现算法及程序流程图
- 三、源程序
- 四、主要技术问题的处理方法
- 五、实验结果及分析
一、主要设计思想 首先将彩色图像灰度化,转化为单通道灰度图像。然后对每个像素对应的灰度级进行统计,以及对应的编码记录存放在像素数组中,接着把像素数组中的灰度像素个数从大到小进行排序,建立Huffman解码矩阵计算出灰度级最小两位像素个数的和,对图像灰度统计数据按Huffman算法编码,输出图像前通过解码矩阵对图像进行解码,最后,输出解码后的图像与原图相对比并计算图像压缩比。
二、实现算法及程序流程图
文章图片
三、源程序
I=imread('D:/pic/baby.jpg');
% 读取测试图像I =rgb2gray(I);
% 转化为灰度图像[m,n]=size(I);
len=m*n;
S = zeros(1,256);
In = I(:);
% 获取各符号的概率
for p=0:255;
j=find(i==p-1);
S(p+1)=length(j)/(len);
endt = 0:255;
dict = huffmandict(t,S);
%生成字典
enco = huffmanenco(In,dict);
%编码
deco = huffmandeco(enco,dict);
%解码
Ide = col2im(deco,[m,n],[m,n],'distinct');
%把向量重新转换成图像块;subplot(1,2,1);
imshow(I);
title('原始图像');
subplot(1,2,2);
imshow(uint8(Ide));
title('压缩后的图像');
fprintf("图像的压缩比: %f\n", 1-size(enco)/8/size(deco)) %将编码后的数值看作二进制后进行计算
四、主要技术问题的处理方法 对一般尺寸的彩色图像,输入的图像是维数阶数较高的矩阵,按照Huffman编码的计算方法耗时会长,所以先将图像转化为单通道灰度图像,这样就不用对R、G、B三个通道进行处理。在视觉效果上两幅图像基本看不出差别,但是运算速度不够理想。
五、实验结果及分析
文章图片
图像的压缩比:0.142416
从RGB三通道转化为单通道灰度图像,速度有提升,但不明显。Huffman算法是无损压缩,解码效果来看,两幅图像基本无差别。但是运算速度不够理想,按照Huffman编码这种统计算法耗时比较长,算法有待进一步改进。
推荐阅读
- 机器人学习|【机器人】Car-Like小车移动机器人控制实验(word报告+matlab程序代码)
- 数据可视化|小波变换进行图像变换Matlab实现
- 数据可视化|离散余弦变换进行图像变换Matlab实现
- matlab|FPGA实现sobel边缘检测并Modelsim仿真,与MATLAB实现效果对比
- fpga开发|FPGA高斯滤波实现并Modelsim仿真,与MATLAB高斯滤波进行对比
- pytorch|pytorch_lesson16.1 OpenCV索贝尔算子/拉普拉斯算子调用+pytorch中构建cnn+复现经典模型(LeNet5+AlexNet)
- 卷积神经网络概念及使用 PyTorch 简单实现
- 基于matlab因子指标赋权(主成分分析+熵值法+博弈论的组合赋权法)
- matlab|【转】电子毕业设计题目