【DCT变换】Python矩阵运算实现DCT变换

news2024/9/28 3:29:09

一、前言

DCT变换(离散余弦变换) 是数字图像处理过程中广泛采用的一种操作,用于将空域的图像转换为频域表示,从而能够更有效地进行压缩、滤波和特征提取等处理。它在许多应用领域中发挥着重要的作用,尤其在图像和视频压缩中,DCT变换常被用作预处理步骤。

例如在JPEG压缩中,一个关键步骤就是应用DCT变换。通过将图像划分为小的图像块,并对每个块进行DCT变换,可以将图像转换为频域表示。DCT变换能够将图像中的能量集中在较低频率分量上,这样就可以利用量化技术对高频分量进行更有效的压缩,从而实现较高的压缩比。

现在,介绍一种简单而有效的矩阵运算方法来实现DCT变换。

二、方法介绍

第一步:图像分块,将图像分成8×8的块。假设,现处理的图像块数据如下:
在这里插入图片描述

第二步:根据公式,计算DCT系数。算得,DCT系数矩阵如下:
在这里插入图片描述

第三步:通过矩阵乘法实现每个图像块的DCT变换。流程如下:

首先,按照矩阵乘法规则,计算DCT系数矩阵×图像块矩阵
在这里插入图片描述

然后,将上述步骤得到的结果矩阵×DCT系数矩阵的转置矩阵
在这里插入图片描述
最后,得到该图像块的DCT变换结果
在这里插入图片描述

三、程序实现

import torch
import numpy as np

#  1.构造图像块伪数据 
image = torch.arange(1, 65).reshape(1, 1, 8, 8)
image_dct_int = torch.cat(torch.cat(image.split(8, 2), 0).split(8, 3), 0)
image_dct = image_dct_int.float()
print("原始图像块:\n", image_dct)

# 2. 构造DCT变换系数
coff = torch.zeros((8, 8), dtype=torch.float)
coff[0, :] = 1 * np.sqrt(1 / 8)
for i in range(1, 8):
    for j in range(8):
        coff[i, j] = np.cos(np.pi * i * (2 * j + 1) / (2 * 8)) * np.sqrt(2 / 8)

# 3. 执行DCT变换
image_dct = torch.matmul(coff, image_dct)
coff_permute = coff.permute(1, 0)
image_dct1 = torch.matmul(image_dct, coff_permute)

image_dct2 = torch.cat(torch.cat(image_dct1.chunk(1, 0), 3).chunk(1, 0), 2)
print("DCT变换后的结果:\n", image_dct2)

四、对比验证

这里我们采用OpenCV的库函数实现同样的DCT变换,将其与以上结果进行对比验证。

import numpy as np
import cv2

image = np.arange(1, 65).reshape(8, 8)
image = np.float32(image)
print("原始图像块数据:\n", image)

dct_array = cv2.dct(image)
print("DCT变换结果:\n", dct_array)

在这里插入图片描述

由上表可见,两种方式的计算结果都是相同的。因此,根据以上所介绍的方法,也能够正确实现图像块的DCT变换。

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

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

相关文章

感知机(Perceptron)的原理及实现

1.感知机(Perceptron)的原理及实现 声明:笔记来源于《白话机器学习的数学》 感知机是接受多个输入后将每个值与各自权重相乘,最后输出总和的模型。 单层感知机因过于简单,无法应用于实际问题,但它是神经网络…

一文让你搞定接口测试

一、什么是接口测试? 所谓接口,是指同一个系统中模块与模块间的数据传递接口、前后端交互、跨系统跨平台跨数据库的对接。而接口测试,则是通过接口的不同情况下的输入,去对比输出,看看是否满足接口规范所规定的功能、…

二叉树知识小结

思维导图: 一,树 树,这是一种对计算机里的某种数据结构的形象比喻。比如这种: 这种: 这种: 这几种都是树形结构。在百度百科中对树形结构的定义如下: 树形结构指的是数据元素之间存在着“一对多”的树形关系…

津津乐道设计模式 - 建造者模式详解(教你如何构造一个专属女友)

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…

接口测试断言详解(Jmeter)

接口测试是目前最主流的自动化测试手段,它向服务器发送请求,接收和解析响应结果,通过验证响应报文是否满足需求规约来验证系统逻辑正确性。接口的响应类型通过Content-Type指定,常见的响应类型有: • text/html &…

Android Jetpack Compose之轻松添加分隔线:Divider组件

引言: 在构建用户界面时,有效地组织和分隔内容是至关重要的。这就是Android Jetpack Compose的Divider组件派上用场的地方。在这篇博客中,我们将详细了解Divider组件的功能和用法,并通过示例展示如何将其融入您的Compose UI。 Je…

自动化测试和性能测试面试题精选

自动化测试相关 包含 Selenium、Appium 和接口测试。 1. 自动化代码中,用到了哪些设计模式? 单例模式工厂模式PO模式数据驱动模式 2. 什么是断言? 检查一个条件,如果它为真,就不做任何事,用例通过。如果…

8年资深测试总结,自动化测试成功实施,你不知道的都在这...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 什么项目&#xf…

python:并发编程(二十七)

前言 本文将和大家一起探讨python并发编程的实际项目:Locust性能测试(篇一,共N篇),系列文章将会从零开始构建项目,并逐渐完善项目,最终将项目打造成适用于高并发场景的应用。 本文为python并发…

分支定价算法求解VRPTW问题(代码非原创)

参考文献:微信公众号“程序猿声”关于分支定价求解VRPTW的代码 A tutorial on column generation and branch-and-price for vehicle routing problems 框架 对于VRPTW问题,先做线性松弛,调用列生成算法(一种解决大型线性规划问…

Docker网络之Network Namespace

Docker网络中相关的命令非常少,但需要掌握的底层原理却又非常多。 1.Network Namespace Docker网络底层原理是Linux的Network Namespace,所以说对于Linux Network Namespace的理解对Docker网络底层原理的理解就显得尤为重要了。 2.需求 通过手工的方式…

ICC2与INNOVUS命令对照表

ICC2与INNOVUS命令对照表 TargetICC2INNOVUS设置多CPU set_host_options -max_cores16 setMultiCpuUsage -localCpu 16 获得物体的属性 get_attribute

DSP,国产C2000横空出世,QX320F280049,替代TI 的 TMS320F280049,支持国产

一、特性参数 1、独立双核,32位CPU,单核主频400MHz 2、IEEE 754 单精度浮点单元 (FPU) 3、三角函数单元 (TMU) 4、1MB 的 FLASH (ECC保护) 5、1MB 的 SRAM (ECC保护&…

全网最全,Selenium自动化测试POM模式总结(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在UI自动化测试中…

Python+Selenium+Unittest 之selenium7--元素定位6-CSS定位1(定位所有、定位class、定位id、tag定位)

目录 一、CSS简介 二、 定位方式 三、实践操作 1、*(定位所有元素) 2、. (定位class属性) 3、#(定位id属性) 4、tag定位 一、CSS简介 CSS属于是一种计算机语言,主要是用来为结构化文档的外…

软件测试期末速成(背题家出列!)

文章目录 一、前言二、选择题(15 X 2)1、概述2、相关概念3、黑盒测试4、白盒测试5、单元测试6、集成测试7、系统测试8、自动化测试9、实用软件测试技术 三、判断题(10 X 1’)四、简答题(4 X 5)1、软件测试生…

一文学会Nginx做图片服务器

Nginx做图片服务器 前言: Nginx是一个高性能的HTTP和反向代理web服务器,以及负载均衡器。根据nginx是高性能的http服务器,因此可以用作图片服务器使用。 本案例是在docker安装nginx来操作的。 什么是Nginx? Nginx是一款高性能的Web服务器和反向代理服…

linux入门之浅谈shell及权限的概念

文章目录 目录 文章目录 一、shell命令以及运行原理 二、linux权限的概念 1.Linux权限管理 a.文件访问者的分类(人) b.文件类型和访问权限 1)文件类型 2)基本权限 3)文件权限值的表示方法 4)文件访问权限的相…

docker快速部署oracle19c、oracle12c,测试环境问题复现demo快速搭建笔记

Oracle 19c测试环境快速搭建 安装 # 下载镜像 19.3.0.0.0 docker pull registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c # 创建文件 mkdir -p /mymount/oracle19c/oradata # 授权,不授权会导致后面安装失败 chmod 777 /mymount/oracle19c/oradatadocker run …

01背包思路解析+代码

01背包 题目链接:01背包 思路:题目要求是获取背包能装的最大重量。一个物品有体积和重量两个属性。而当我们判断一个物品是否要放进背包,第一取决于他的体积是否足以放进背包,第二取决于他的重量是否足以让我们取出已经放入的一部…