当前位置: 首页 > ai >正文

matlab实现图像压缩编码

一、基于DCT的JPEG压缩(有损)

1. 核心步骤
  1. 图像分块:将图像划分为8×8的小块。
  2. 离散余弦变换(DCT):对每个块进行DCT变换。
  3. 量化:对DCT系数进行量化以减少高频信息。
  4. 熵编码:使用哈夫曼或算术编码压缩量化后的数据。
2. MATLAB代码实现
% 读取图像并转换为灰度图
img = imread('lena.jpg');
img_gray = rgb2gray(img);
img_double = im2double(img_gray); % 转换为double类型% 定义JPEG量化表(标准亮度量化表)
Q = [16 11 10 16 24 40 51 61;12 12 14 19 26 58 60 55;14 13 16 24 40 57 69 56;14 17 22 29 51 87 80 62;18 22 37 56 68 109 103 77;24 35 55 64 81 104 113 92;49 64 78 87 103 121 120 101;72 92 95 98 112 100 103 99];% 图像分块(8×8)
block_size = 8;
[rows, cols] = size(img_double);
num_blocks_row = floor(rows / block_size);
num_blocks_col = floor(cols / block_size);
blocks = mat2cell(img_double(1:num_blocks_row*block_size, 1:num_blocks_col*block_size), ...repmat(block_size, 1, num_blocks_row), repmat(block_size, 1, num_blocks_col));% DCT变换与量化
quantized_blocks = cell(size(blocks));
for i = 1:numel(blocks)block = blocks{i};dct_block = dct2(block); % DCT变换quant_block = round(dct_block ./ Q); % 量化quantized_blocks{i} = quant_block;
end% 熵编码(使用MATLAB内置函数)
compressed_data = mat2huff(quantized_blocks(:)); % 哈夫曼编码% 解码与重建(逆量化 + 逆DCT)
reconstructed_blocks = cell(size(quantized_blocks));
reconstructed_data = huff2mat(compressed_data); % 哈夫曼解码
reconstructed_data = reshape(reconstructed_data, size(quantized_blocks));
for i = 1:numel(blocks)quant_block = reconstructed_data{i};dequant_block = quant_block .* Q; % 反量化idct_block = idct2(dequant_block); % 逆DCTreconstructed_blocks{i} = idct_block;
end% 合并分块并显示结果
reconstructed_img = cell2mat(reconstructed_blocks);
figure;
subplot(1,2,1); imshow(img_gray); title('原始图像');
subplot(1,2,2); imshow(reconstructed_img); title('重建图像');% 计算PSNR
psnr_value = psnr(reconstructed_img, img_gray);
disp(['PSNR: ', num2str(psnr_value), ' dB']);
3. 关键说明
  • 量化表:决定压缩率和图像质量,可根据需求调整。
  • 分块处理mat2cell函数用于分块,idct2实现逆变换。
  • 熵编码:使用MATLAB的mat2huffhuff2mat实现哈夫曼编码。

二、基于DPCM的哈夫曼编码(无损)

1. 核心步骤
  1. 预测编码:使用前一个像素预测当前像素值,计算残差。
  2. 哈夫曼编码:对残差进行变长编码。
  3. 代码 图像压缩编码码matlab实现:DM编码、变换编码、算术编码、行程编码、Huffman编码、线性预测编码
2. MATLAB代码实现
% 读取图像
img = imread('lena.jpg');
img_gray = rgb2gray(img);
img_gray = im2double(img_gray);% DPCM编码
pred = zeros(size(img_gray));
diff = zeros(size(img_gray));
pred(1) = img_gray(1);
diff(1) = img_gray(1) - pred(1);
for i = 2:numel(img_gray)pred(i) = 0.5 * (img_gray(i-1) + img_gray(i)); % 线性预测diff(i) = img_gray(i) - pred(i);
end% 哈夫曼编码
[dict, avglen] = huffmandict(unique(diff), ... % 生成哈夫曼字典arrayfun(@(x) normpdf(x, mean(diff(diff~=0)), std(diff(diff~=0))), unique(diff)));
compressed_data = huffmanenco(diff, dict);% 解码
decoded_diff = huffmandeco(compressed_data, dict);
reconstructed_img = zeros(size(img_gray));
reconstructed_img(1) = img_gray(1);
for i = 2:numel(img_gray)reconstructed_img(i) = reconstructed_img(i-1) + decoded_diff(i);
end% 显示结果
figure;
subplot(1,2,1); imshow(img_gray); title('原始图像');
subplot(1,2,2); imshow(reconstructed_img); title('DPCM重建图像');
psnr_value = psnr(reconstructed_img, img_gray);
disp(['PSNR: ', num2str(psnr_value), ' dB']);

三、方法对比

方法压缩类型压缩率图像质量适用场景
JPEG(DCT)有损可控(依赖量化表)通用图像压缩
DPCM+哈夫曼无损完全保真医学图像、卫星图像

四、扩展方向

  1. 改进JPEG:引入熵编码优化(如算术编码)或自适应量化表。
  2. 深度学习压缩:使用CNN学习图像特征进行端到端压缩。
  3. 混合压缩:结合有损和无损方法(如JPEG-LS)。

通过上述代码,您可以直接在MATLAB中实现图像压缩与重建,并通过调整参数(如量化表、预测模型)优化性能。

http://www.xdnf.cn/news/9545.html

相关文章:

  • 4.8.3 利用SparkSQL统计每日新增用户
  • 微信小程序返回上一页监听
  • PG技术分享
  • 数据结构之队列实验
  • Nacos 服务注册发现案例:nacos-spring-cloud-example 详解
  • world quant教程学习二
  • 基于亚博K210开发板——物体分类测试
  • 【设计模式】责任链
  • PostgreSQL 内置扩展列表
  • HTML应用指南:利用GET请求获取全国罗森门店位置信息
  • 8000字回顾所有的HTML标签~
  • BSS / OSS 是什么
  • DBus总线详解
  • 华为OD机试真题——数字加减游戏(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • uni-app 提供的页面跳转方法详细解释及其区别
  • 麒麟v10,arm64架构,编译安装Qt5.12.8
  • IEEE PRMVAI 2025 WS 26:计算机视觉前沿 Workshop 来袭!
  • 第十一章 管理Linux软件包和进程
  • 阅读笔记——理解什么是LLM大语言模型
  • 解决 NestJS 中热重载与实体类自动导入不能兼容的问题
  • 使用nvm use切换版本号,报exit status 5
  • spring4第3课-ioc控制反转-详解依赖注入的4种方式
  • 独立站引流新策略:AB站投放法助力突破瓶颈
  • JavaScript 中,require 和 import
  • zabbix6.x 监控mysql数据库
  • 【深度剖析】义齿定制行业数字化转型模式创新研究(上篇:行业概况)
  • Vulnhub_Zico2_wp
  • LNMP 架构部署
  • 《基于AIGC的智能化多栈开发新模式》研究报告重磅发布! ——AI重塑软件工程,多栈开发引领未来
  • 腾讯混元开源语音数字人模型 HunyuanVideo-Avatar:开启数字人 “能说会唱” 新时代