压缩编码之JPEG变换编码不同压缩率的模拟的实现——数字图像处理

原理

离散余弦变换(DCT)和量化是图像压缩中的两个关键步骤,尤其是在JPEG压缩标准中。

离散余弦变换(DCT):DCT的目的是将图像从空间域(即像素表示)转换到频率域。这种转换后,图像的能量会集中在少数几个系数中,特别是低频系数中。
图像的大部分视觉信息都包含在低频成分中,而高频成分通常与图像细节(如边缘、纹理)相关。
**量化:**量化是压缩过程中降低DCT系数精度的步骤。它通过使用一个预定义的量化矩阵来完成,该矩阵决定了每个DCT系数被缩减的程度。
量化的过程实际上是一种有损压缩。较大的量化值导致更多的数据丢失,但也提供了更高的压缩比。量化矩阵通常设计为对高频成分进行更激烈的量化(因为人眼对高频细节的敏感度较低),而保留更多的低频成分。

图像质量与量化级别的关系:

低量化级别:使用较低的量化级别(或者说量化矩阵的缩放参数小)会保留更多的DCT系数,从而保留更多的图像细节和质量,但这会导致较低的压缩比。
高量化级别:较高的量化级别(量化矩阵的缩放参数大)会导致更多的DCT系数被减少或归零,从而提高压缩比,但同时会导致图像质量下降,表现为模糊和块状伪影(尤其在高频细节区域)。
视觉感知和压缩效率:

人眼对不同频率的细节有不同的敏感度。通过利用这一点,量化可以被设计成在保持相对较好的视觉质量的同时,实现有效的数据压缩。
在实际应用中,量化矩阵和量化级别的选择取决于目标压缩比和可接受的图像质量损失。

总结:DCT和量化是实现图像压缩的关键步骤。DCT帮助集中图像数据的能量,而量化则减少数据的精度以减小文件大小。量化级别的选择对压缩效率和图像质量有直接影响。较低的量化级别保留更多的细节但压缩率低,而较高的量化级别虽然提高压缩率,但会导致显著的图像质量下降。正确的平衡取决于特定应用的需求和对图像质量的容忍度。

python实现

在这里插入图片描述

提示

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

python代码

import  cv2
import numpy as np
import matplotlib.pyplot as plt

img=cv2.imread("lena_gray_512.tif",0)
img=img.astype(np.float)
rows,cols=img.shape

img_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压缩编码原理介绍中就知道整个JPEG压缩原理就是通过DCT变换去空间冗余来达到图片压缩的。经过DCT变换之后DCT系数只保留的左上角的数据(低频分量数据),右下角部分均变成0.因此,想要进一步压缩就可以从量化表下手。量化表的量化系数越大,得到的量化后的DCT系数就越小,高频信息消失的更多,图片容量就越小。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

dp--62. 不同路径/medium 理解度A

62. 不同路径 1、题目2、题目分析3、复杂度最优解代码示例4、抽象与扩展 1、题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中…

利用Python的csv(CSV)库读取csv文件并取出某个单元格的内容的学习过程

csv库在python3中是自带的。 利用它可以方便的进行csv文件内容的读取。 注意:要以gbk的编码形式打开,因为WPS的csv文件默认是gbk编码,而不是utf-8。 01-读取表头并在打印每一行内容时一并输出表头 表头为第1行,现在要读取并打…

【GaussDB数据库】序

参考链接:国产数据库华为高斯数据库(GaussDB)功能与特点总结 GaussDB简介 官方网站:云数据库GaussDB GaussDB是华为自主创新研发的分布式关系型数据库。该产品支持分布式事务,同城跨AZ部署,数据0丢失&#…

IOC之Spring统一资源加载策略

前言 在学 Java的时候,我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Resource Locator),但是我们知道它的实现基本只限于网络形式发布的资源的查找和定位。然而,实…

layui实现地址下拉框模糊查询

layui实现地址下拉框模糊查询 HTML代码 注意&#xff1a;千万不要少 lay-search <div class"layui-col-md4"><label class"layui-form-label"><em>*</em>始发地&#xff1a;</label><div class"layui-input-bloc…

必示科技助力中国联通智网创新中心通过智能化运维(AIOps)通用能力成熟度3级评估

2023年12月15日&#xff0c;中国信息通信研究院隆重公布了智能化运维AIOps系列标准最新批次评估结果。 必示科技与中国联通智网创新中心合作的“智能IT故障监控定位分析能力建设项目”通过了中国信息通信研究院开展的《智能化运维能力成熟度系列标准 第1部分&#xff1a;通用能…

MiniTab的拟合回归模型的分析

拟合回归模型概述 使用拟合回归模型和普通最小二乘法可以描述一组预测变量和一个连续响应之间的关系。可以包括交互作用项和多项式项、执行逐步回归和变换偏斜数据。 例如&#xff0c;房地产评估人员想了解城市公寓与多个预测变量&#xff08;包括建筑面积、可用单元数量、建…

Linux Mii management/mdio子系统分析之一 总体概述

Linux Mii management/mdio子系统分析之一 总体概述 &#xff08;转载&#xff09;原文链接&#xff1a;https://blog.csdn.net/u014044624/article/details/123303099 从本章开始&#xff0c;我们介绍linux的mii management对应的mdio子模块&#xff0c;该模块主要用于管理phy…

分布式光伏运维平台在提高光伏电站发电效率解决方案

摘要&#xff1a;伴随着能源危机和环境恶化问题的日益加重&#xff0c;科技工作者进一步加大对新能源的开发和利用。太阳能光伏发电作为新型清洁能源的主力军&#xff0c;在实际生产生活中得到了广泛的应用。然而&#xff0c;光伏发电效率偏低&#xff0c;成为制约光伏发电发展…

6、CLIP:连接文本和视觉世界的预训练模型

目录 一、论文题目 二、背景与动机 三、创新与卖点 四、技术细节 模型结构 简易代码 clip实现zero shot分类 五、为什么是CLIP?为什么是对比学习&#xff1f; 六、一些资料 在人工智能领域&#xff0c;文本和图像是两个极其重要的数据形式。传统上&#xff0c;机器学…

2019年认证杯SPSSPRO杯数学建模B题(第二阶段)外星语词典全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于统计和迭代匹配的未知语言文本片段提取模型 B题 外星语词典 原题再现&#xff1a; 我们发现了一种未知的语言&#xff0c;现只知道其文字是以 20 个字母构成的。我们已经获取了许多段由该语言写成的文本&#xff0c;但每段文本只是由字母…

基于深度学习的实例分割的Web应用

基于深度学习的实例分割的Web应用 1. 项目简介1.1 模型部署1.2 Web应用 2. Web前端开发3. Web后端开发4. 总结 1. 项目简介 这是一个基于深度学习的实例分割Web应用的项目介绍。该项目使用PaddlePaddle框架&#xff0c;并以PaddleSeg训练的图像分割模型为例。 1.1 模型部署 …

小程序中使用微信同声传译插件实现语音识别、语音合成、文本翻译功能----语音识别(一)

官方文档链接&#xff1a;https://mp.weixin.qq.com/wxopen/plugindevdoc?appidwx069ba97219f66d99&token370941954&langzh_CN#- 要使用插件需要先在小程序管理后台的设置->第三方设置->插件管理中添加插件&#xff0c;目前该插件仅认证后的小程序。 语音识别…

通过myBatis将sql语句返回的值自动包装成一个java对象(3)

1.如果sql字段和java字段名字不一样怎么办&#xff1f; 之前我们将sql返回值转换为java对象时&#xff0c;每条sql的返回值的字段名和java类中的字段名是一一对应的&#xff0c;ie&#xff1a;sql选择的user有username和password两个字段&#xff0c;java中的user对象也有两个…

Web 服务器渗透测试清单

Web 服务器渗透测试在三个重要类别下进行&#xff1a;身份、分析和报告漏洞&#xff0c;例如身份验证弱点、配置错误和协议关系漏洞。 1. “进行一系列有条不紊且可重复的测试”是测试网络服务器是否能够解决所有不同应用程序漏洞的最佳方法。 2.“收集尽可能多的信息”关于…

canvas截取视频图像(图文示例)

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

【Java数据结构】03-二叉树,树和森林

4 二叉树、树和森林 重点章节&#xff0c;在选择&#xff0c;填空&#xff0c;综合中都有考察到。 4.1 掌握二叉树、树和森林的定义以及它们之间的异同点 1. 二叉树&#xff08;Binary Tree&#xff09; 定义&#xff1a; 二叉树是一种特殊的树结构&#xff0c;其中每个节点…

【图形学】探秘图形学奥秘:区域填充的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《图形学 | 图像解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1f30c;1. 初识模式识别 …

精确掌控并发:滑动时间窗口算法在分布式环境下并发流量控制的设计与实现

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;15&#xff09;篇&#xff0c;也是流量控制系列的第&#xff08;2&#xff09;篇。点击上方关注&#xff0c;深入了解支付系统的方方面面。 上一篇介绍了固定时间窗口算法在支付渠道限流的应用以及使用redis…

Golang 里的 context

context 的作用 go 的编程中&#xff0c;常常会在一个 goroutine 中启动多个 goroutine&#xff0c;然后有可能在这些 goroutine 中又启动多个 goroutine。 如上图&#xff0c;在 main 函数中&#xff0c;启动了一个 goroutine A 和 goroutine B&#xff0c;然后 goroutine A …