基于DCT变换的图像压缩解压缩算法matlab仿真

news2024/9/22 23:27:58

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

4.1、DCT变换原理

4.2、基于DCT的图像压缩

4.3、基于DCT的图像解压缩

5.算法完整程序工程


1.算法运行效果图预览

2.算法运行软件版本

MATLAB2022a

3.部分核心程序

....................................................................
%调用8x8矩阵的量化等级  
load Q10.mat

% 对R、G、B通道应用压缩函数func_ys,得到压缩后的图像Rys、Gys、Bys  
Rys  = func_ys(R1,Coff_dct,Q_dct,Bsize);
Gys  = func_ys(G1,Coff_dct,Q_dct,Bsize);
Bys  = func_ys(B1,Coff_dct,Q_dct,Bsize);

% 将压缩后的通道数据合并成一个新的图像I1ys  
I1ys(:,:,1) = Rys;
I1ys(:,:,2) = Gys;
I1ys(:,:,3) = Bys;
imwrite(I1ys,'TMPS\Iys.jpg');% 将图像I1ys写入到文件'TMPS\Iys.jpg'中  

% 对压缩后的图像应用解压缩函数func_deys,得到解压缩后的图像Rdeys、Gdeys、Bdeys  
Rdeys        = func_deys(Rys,Coff_dct,Q_dct,Bsize);
Gdeys        = func_deys(Gys,Coff_dct,Q_dct,Bsize);
Bdeys        = func_deys(Bys,Coff_dct,Q_dct,Bsize);
% 将解压缩后的通道数据合并成一个新的图像I2deys,并转换为uint8类型  
I2deys(:,:,1) = uint8(Rdeys);
I2deys(:,:,2) = uint8(Gdeys);
I2deys(:,:,3) = uint8(Bdeys);
imwrite(I2deys,'TMPS\Ideys.jpg');% 将图像I2deys写入到文件'TMPS\Ideys.jpg'中  



% 获取原始图像文件和压缩后的图像文件的大小(字节) 

%压缩率
ys_rate = SIZE1/SIZE2;

% 显示三个图像:压缩后的图像、解压后的图像、原始图像  
figure(1)
subplot(131)
imshow(I1ys);
title('压缩图像')
subplot(132)
imshow(I2deys);
title('解压图像')
subplot(133)
imshow(I0);
title('原始图像')


I00 = imread('TMPS\Ideys.jpg');
err = (double(I0) - double(I00)) .^ 2;
mse1= sum(err(:)) / (64*64); 
%PSNR 
Max_pixel = 255;
PSNR      = 20*log10((Max_pixel^2)./sqrt(mse1));
 

save R1.mat ys_rate PSNR
00084

4.算法理论概述

       基于DCT(离散余弦变换)的图像压缩与解压缩算法。我们深入探讨了DCT变换的原理、其在图像编码中的应用,并给出了相应的数学公式和算法实现细节。随着数字技术的快速发展,图像数据在日常生活中呈现爆炸性增长。因此,如何有效地压缩图像数据,同时确保良好的图像质量,成为了一个重要的研究课题。DCT变换由于其良好的能量集中特性和与人类视觉系统的匹配度,被广泛应用于图像压缩标准中,如JPEG。

4.1、DCT变换原理

      离散余弦变换(DCT)是傅里叶变换的一种变种。它将信号从时域变换到频域,使得信号的能量大部分集中在几个频率分量上。对于图像而言,DCT可以有效地将图像的能量集中在左上角的低频部分。

一维DCT变换公式如下:

      二维DCT变换(通常用于图像处理)可以通过两次一维DCT变换实现,首先对行进行变换,再对列进行变换。

        可以发现,二维DCT变换其实是在一维DCT变换的基础上,再做一次一维DCT变换。二维DCT也可以写成矩阵相乘的形式:

         二维DCT变换的复杂度达到O(n^4),所以进行DCT变换的矩阵不宜过大。在实际处理图片的过程中,需要先把矩阵分块,一般分为8x8或16x16大小,这样DCT变换不至于耗费过多的时间。

4.2、基于DCT的图像压缩

基于DCT的图像压缩主要步骤如下:

分块:将原始图像分为8x8或16x16的小块。
DCT变换:对每个小块进行二维DCT变换。
量化:使用预定的量化表对DCT系数进行量化,这一步骤是有损的,会丢失部分信息。
编码:采用Zig-Zag扫描将量化后的系数排列为一维序列,并使用霍夫曼编码进行进一步压缩。
通过以上的步骤,我们可以实现图像的压缩。需要注意的是,量化步骤是有损的,因此解压后的图像与原始图像会存在一定的差异。

4.3、基于DCT的图像解压缩

解压缩是压缩的逆过程,主要包括以下步骤:

解码:使用霍夫曼解码对编码后的数据流进行解码。
反量化:使用与压缩时相同的量化表对解码后的数据进行反量化。
反DCT变换:对反量化后的数据进行二维反DCT变换。
重构:将反DCT变换后的块组合成完整的图像。

5.算法完整程序工程

OOOOO

OOO

O

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1244775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

消息中间件——RabbitMQ(六)理解Exchange交换机核心概念!

前言 来了解RabbitMQ一个重要的概念:Exchange交换机 1. Exchange概念 Exchange:接收消息,并根据路由键转发消息所绑定的队列。 蓝色框:客户端发送消息至交换机,通过路由键路由至指定的队列。 黄色框:交换…

案例022:基于微信小程序的行政复议在线预约系统

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

微信小程序实现【点击 滑动 评分 评星(5星)】功能

wxml文件&#xff1a; <view class"wxpl_xing"><view class"manyidu">{{scoreContent}}</view><view><block wx:for{{scoreArray}} wx:for-item"item"><view classstarLen bindtapchangeScore data-sy"{{…

微机原理_2

一、单项选择题(本大题共15小题,每小题3分,共45分。在每小题给出的四个备选项中,选出一个正确的答案&#xff0c;请将选定的答案填涂在答题纸的相应位置上。&#xff09; 下列数中最大的数为&#xff08;&#xff09; A. 10010101B B. (126)8 C. 96H D. 100 CPU 执行 OUT 60H,…

【Java 进阶篇】Redis 命令操作:轻松掌握基本操作

Redis是一款高性能的键值对存储系统&#xff0c;以其快速、灵活的特性而备受开发者推崇。本文将详细介绍Redis的基本命令操作&#xff0c;包括键值操作、数据查询、事务处理等方面&#xff0c;帮助初学者更好地理解和使用Redis。 基本命令 1. 键值操作 1.1 SET&#xff1a;设…

Redis的性能,哨兵模式,集群,

Redis的性能管理; redis的数据保存在内存中 redis-cli info memory redis内存使用info memory命令参数解析 used_memory:236026888 由 Redis 分配器分配的内存总量&#xff0c;包含了redis进程内部的开销和数据占用的内存&#xff0c;以字节&#xff08;byte&#xff09…

CentOS虚拟机重置账号密码

虚拟机忘记密码了 一般来说&#xff0c;虚拟机的账号密码&#xff0c;工作中都会有文档记录&#xff0c;如果忘记了可以查看文档。但是也有特例&#xff0c;虚拟机的密码没有记录到文档中&#xff0c;尝试了很多次依然登录失败&#xff0c;这时候就只能重置账号密码了。 1.重…

61 权限提升-RedisPostgre令牌窃取进程注入

目录 演示案例:Redis数据库权限提升-计划任务PostgreSQL数据库权限提升Windows2008&7令牌窃取提升-本地Windows2003&10进程注入提升-本地pinjector进程注入工具针对-win2008以前操作系统pexec64 32进程注入工具针对-win2008及后操作系统- (佛系) 涉及资源: postgersql是…

配置华为云镜像加速器

登录华为云官网&#xff0c;点击控制台 在服务列表里面寻找swr服务 点击镜像中心&#xff0c;点击镜像加速器 {"registry-mirrors": [ "https://301dc05233c6419b810bdb22135af9eb.mirror.swr.myhuaweicloud.com" ]}配置镜像加速器 vim /etc/docker…

数据提取PDF SDK的对比推荐

PDF 已迅速成为跨各种平台共享和分发文档的首选格式&#xff0c;它作为一种数据来源&#xff0c;常见于公司的各种报告和报表中。为了能更好地分析、处理这些数据信息&#xff0c;我们需要检测和提取 PDF 中的数据&#xff0c;并将其转换为可用且有意义的格式。而数据提取的 PD…

基于Python实现汽车销售数据可视化+预测【500010086.1】

导入模块 import numpy as np import pandas as pd from pylab import mpl import plotly.express as px import matplotlib.pyplot as plt import seaborn as sns设置全局字体 plt.rcParams[font.sans-serif][kaiti]获取数据 total_sales_df pd.read_excel(r"./data/中…

【Web题】狼追兔问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

CSS特效017:球体涨水的效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

基于遗传优化的多属性判决5G-Wifi网络切换算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 .......................................................................... %接收功率、网…

Python中match-case语法: 引领新的模式匹配时代

更多Python学习内容&#xff1a;ipengtao.com Python在其最新的版本中引入了match-case语法&#xff0c;这是一项强大的功能&#xff0c;为开发者提供了更加灵活和直观的模式匹配方式。本文将深入探讨match-case的各个方面&#xff0c;并通过丰富的示例代码&#xff0c;帮助大家…

MES管理系统与自动化系统如何实现相辅相成

随着科技的飞速发展&#xff0c;制造企业正面临着数字化转型的巨大挑战与机遇。在这一过程中&#xff0c;自动化系统无疑扮演了重要角色&#xff0c;然而&#xff0c;仅仅依赖自动化系统还不足以支撑起整个数字化转型的大厦。这就是为什么我们需要推行MES管理系统解决方案的原因…

【数字信号处理】傅里叶变换的离散性与周期性

傅里叶变换的离散性与周期性 2023年11月21日 #elecEngeneer 文章目录 傅里叶变换的离散性与周期性1. 符号说明2. 具体分析3. 序列的序号表示的DFT下链 1. 符号说明 t : 连续时间(时域)变量 ω : 频域变量&#xff0c;aka角频率 g : 时域函数 G : 频域函数 n : 时域采样序列序号…

Go iota简介

当声明枚举类型或定义一组相关常量时&#xff0c;Go语言中的iota关键字可以帮助我们简化代码并自动生成递增的值。本文档将详细介绍iota的用法和行为。 iota关键字 iota是Go语言中的一个预定义标识符&#xff0c;它用于创建自增的无类型整数常量。iota的行为类似于一个计数器…

vue3 终端实现 (vue3+xterm+websocket)

目录 一、xterm介绍 二、效果展示 三、vue文件实现代码 一、xterm介绍 xterm是一个使用 TypeScript 编写的前端终端组件&#xff0c;可以直接在浏览器中实现一个命令行终端应用&#xff0c;通常与websocket一起使用。 二、效果展示 三、vue文件实现代码 <template>…

网络安全如何自学?

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…