压缩编码之不同缩放参数对重建图像质量的影响的python实现——JPEG变换编码不同压缩率的模拟
原理
JPEG(Joint Photographic Experts Group)是一种常用的图像压缩标准,它通过采用离散余弦变换(DCT)和量化来实现图像的压缩。
离散余弦变换(DCT):
JPEG首先将图像分割成8x8的块。对于每个块,使用离散余弦变换(DCT)将空间域的图像数据转换为频域的系数。
DCT变换会将图像信息从原始的空间域转换到频域,这意味着图像中的信息被表示为一系列频率分量。
量化:
对于DCT变换后的每个8x8块,JPEG使用一个量化矩阵将其系数进行量化。量化的目的是减小高频部分的系数,因为在视觉上,人对于高频细节的敏感性较低。
JPEG定义了不同的量化矩阵,而不同的量化矩阵会导致不同的压缩质量。更高的压缩率通常对应着更大的量化值,因此导致更多的系数被舍弃。
熵编码:
量化后,对每个块的系数进行熵编码,通常使用Huffman编码。
Huffman编码是一种变长编码,通过为频繁出现的值分配短码字,为不太频繁出现的值分配长码字,从而进一步减小图像数据的大小。
压缩率控制:
JPEG允许用户通过设置不同的压缩质量参数来控制压缩率。更高的压缩质量通常对应着更小的压缩率,因为它会导致更少的量化失真。
压缩率的选择通常是一个权衡,用户需要根据具体的应用需求和存储/传输限制来确定适当的压缩率。
总的来说,JPEG通过DCT、量化和熵编码的组合来实现图像的有损压缩。不同的压缩率主要通过调整量化矩阵和压缩质量参数来实现。更高的压缩率通常会导致更多的信息损失,但可以获得更小的文件大小。
python实现下图

提示
结果显示了用不同比例因子去乘标准化阵列后得到的DCT编解码结果。先将原图分割为大小为8×8的子图像,并对每个子图像进行DCT变换,之后对系数阵列进行如下运算来对其量化


最后对量化后的系数阵列进行反变换得到近似图像。
代码
import cv2
import numpy as np
import matplotlib.pyplot as pltimg=cv2.imread("lena_gray_512.tif",0)
img=img.astype(np.float)
rows,cols=img.shapeimg_list = []
img_name_list = []
Z = np.array([[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]])
scl_par=[1,2,4,8,16,32]
for scl in scl_par:dct_inv_img = np.zeros(img.shape)for i in range(0, rows, 8):for j in range(0, cols, 8):dct = cv2.dct(img[i:i+8, j:j+8])dct = np.round(dct / (Z * scl))dct_inv_img[i:i+8, j:j+8] = cv2.idct(dct)img_list.append(dct_inv_img)img_name_list.append('scl=' + str(scl))_, axs = plt.subplots(2, 3)for i in range(2):for j in range(3):axs[i, j].imshow(img_list[i*3+j], cmap='gray')axs[i, j].set_title(img_name_list[i*3+j])axs[i, j].axis('off')plt.show()
结果展示

总结
整个JPEG压缩原理就是通过DCT变换去空间冗余来达到图片压缩的。经过DCT变换之后DCT系数只保留的左上角的数据(低频分量数据),右下角部分均变成0.因此,想要进一步压缩就可以从量化表下手。量化表的量化系数越大,得到的量化后的DCT系数就越小,高频信息消失的更多,图片容量就越小。
相关文章:
压缩编码之不同缩放参数对重建图像质量的影响的python实现——JPEG变换编码不同压缩率的模拟
原理 JPEG(Joint Photographic Experts Group)是一种常用的图像压缩标准,它通过采用离散余弦变换(DCT)和量化来实现图像的压缩。 离散余弦变换(DCT): JPEG首先将图像分割成8x8的块…...
大数据导论(2)---大数据与云计算、物联网、人工智能
文章目录 1. 云计算1.1 云计算概念1.2 云计算的服务模式和类型1.3 云计算的数据中心与应用 2. 物联网2.1 物联网的概念和关键技术2.2 物联网的应用和产业2.3 大数据与云计算、物联网的关系 1. 云计算 1.1 云计算概念 1. 首先从商业角度给云计算下一个定义:通过网络…...
有序矩阵中第 K 小的元素
题目链接 有序矩阵中第 K 小的元素 题目描述 注意点 每行和每列元素均按升序排序找到一个内存复杂度优于 O(n) 的解决方案 解答思路 使用二分查找,思路为: (1)因为左上角的元素值更小,右下角的元素值更大…...
Nginx详细介绍(并从技术层面深度剖析)
nginx介绍 1.nginx 介绍2.nginx的优势3.Nginx VS Apache3.1.内核、语言、诞生时间比较3.2.功能比较3.3.Nginx 相对 apache 的优点 4.Nginx为什么有这么多的优势?4.1.IO多路复用(I/O multiplexing【多并发】)4.2.nginx的驱动模型介绍4.3.nginx…...
单元测试基本概念
单元测试一般是开发来做的,但是因为业务需要也曾涉及过单元测试。目前就单元测试的基础概念做下总结。 一、 单元测试定义: 单元测试是软件开发中的一种测试方法,用于验证程序中的最小可测单元——即代码中的单个函数、方法或模块。单元测试…...
ECTouch 电商微信小程序 SQL注入漏洞复现(CVE-2023-39560)
0x01 产品简介 ECTouch是一款开源的电商系统,为中小企业提供最佳的新零售解决方案 0x02 漏洞概述 ECTouch 电商系统 /ectouch-main/include/apps/default/helpers/insert.php 文件中第285行的 insert_bought_notes 函数中,传入的 $arr[id] 参数未进行验证和过滤,导致未经…...
MCM备赛笔记——熵权法
Key Concept 熵权法是一种基于信息熵概念的权重确定方法,用于多指标决策分析中。信息熵是度量信息量的不确定性或混乱程度的指标,在熵权法中,它用来反映某个指标在评价过程中的分散程度,进而确定该指标的权重。指标的分散程度越高…...
vscode设置terminal的最大行数
今天跑代码出现一个问题,就是整个程序跑完,整个程序的输出信息过多,最开始输出的信息已经被vscode的缓存冲掉了,只能看到最后的一部分,具体的原因是vscode的terminal默认只能保存1000行的信息,所以如果想保…...
kafka hang 问题记录
参考文档 https://cloud.tencent.com/developer/article/1821477 9092端口 端口9092通常与Apache Kafka关联。 Kafka是一个开源的分布式事件流平台,用于构建实时的数据管道和流应用。 它能够处理任意大小的数据,以容错的方式处理数据流。 在默认配置…...
Jmeter-BeanShell脚本中for循环里面使用random随机数函数,每次生成的都一样
预想的是每次循环生成的随机数不一样,但实际使用Random函数生成的是重复的。 以下是部分原代码: List updateList new ArrayList(); for(Object o: fieldList){Map map new HashMap();map.put("id", o.get("id"));map.put("…...
高级编程。JavaScript中有哪些类型转换机制?
一、概述 前面我们讲到,JS中有六种简单数据类型:undefined、null、boolean、string、number、symbol,以及引用类型:object 但是我们在声明的时候只有一种数据类型,只有到运行期间才会确定当前类型 let x y ? 1 : …...
Linux系统下常用软件安装汇总,包括mysql,java,git,redis等
01.环境搭建 1.安装列表 MySQL 5.7.11 Java 1.8 Apache Maven 3.6 tomcat8.5 git Redis Nginx python docker 2.安装mysql 1.拷贝mysql安装文件到Linux的某个目录下 2.解压Linux安装包:tar -xvzf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz 3.进入解压后…...
【Linux】——期末复习题(一)
🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:…...
【论文阅读】Speech Driven Video Editing via an Audio-Conditioned Diffusion Model
DiffusionVideoEditing:基于音频条件扩散模型的语音驱动视频编辑 code:GitHub - DanBigioi/DiffusionVideoEditing: Official project repo for paper "Speech Driven Video Editing via an Audio-Conditioned Diffusion Model" paper&#…...
【华为 ICT HCIA eNSP 习题汇总】——题目集4
1、(多选)网络中出现故障后,管理员通过排查发现某台路由器的配置被修改了,那么管理员应该采取哪些措施来避免这种状况再次发生? A、管理员应该通过配置 ACL 来扩展只有管理员能够登录设备 B、管理员应该在路由的管理端…...
hadoop-common: CMake failed with error code 1
问题 在编译hadoop源码时遇到如下错误 hadoop-common: CMake failed with error code 1 看了这个错误表示一脸懵逼 排查 在mvn 的命令中增加 -X 和 -e mvn clean package -e -X -Pdist,native -DskipTests -Dmaven.javadoc.skip -Dopenssl.prefix/usr/local/bin/openssl 在…...
【面试】-科大讯飞日常实习面试
科大讯飞日常实习面试 提问的问题 面试30min,基本就是介绍项目以及提问java八股文,没有算法题 java保证线程安全的方法 需要根据具体场景选择合适的方法来保证线程安全。java中的异步请求如何实现你的SpringBoot项目怎么匹配在线人数请说出spring springMVC springboot之间的…...
MySQL 数据加密
MySQL 数据加密主要用于保护存储在数据库中的敏感信息,如用户密码、个人身份信息等。MySQL 提供了多种数据加密方法,主要包括: 对称加密: AES_ENCRYPT() 和 AES_DECRYPT() 函数:MySQL 支持使用高级加密标准(…...
风丘科技为您提供完整的ADAS测试方案
一 方案概述 随着5G通讯与互联网的快速发展,智能汽车和ADAS辅助系统的研究与发展在世界范围内也在如火如荼地进行。风丘科技紧跟时代脚步,经多年积累沉淀,携手整车厂与高校共同研发打造出了一套完整且适用于国内ADAS测试的系统方案。 | ADAS…...
深入理解Rust基本类型
文章目录 一、概述二、数值类型2.1、整数类型2.2、浮点类型2.3、数字运算2.4、位运算2.5、序列(Range)2.6、有理数和复数 三、字符、布尔、单元类型3.1、字符类型3.2、布尔类型(bool)3.3、单元类型 团队博客: 汽车电子社区 一、概…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...
密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...
聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇
根据 QYResearch 发布的市场报告显示,全球市场规模预计在 2031 年达到 9848 万美元,2025 - 2031 年期间年复合增长率(CAGR)为 3.7%。在竞争格局上,市场集中度较高,2024 年全球前十强厂商占据约 74.0% 的市场…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...
