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

这篇具有很好参考价值的文章主要介绍了【DCT变换】Python矩阵运算实现DCT变换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

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

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

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

二、方法介绍

第一步:图像分块,将图像分成8×8的块。假设,现处理的图像块数据如下:
【DCT变换】Python矩阵运算实现DCT变换

第二步:根据公式,计算DCT系数。算得,DCT系数矩阵如下:
【DCT变换】Python矩阵运算实现DCT变换

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

首先,按照矩阵乘法规则,计算DCT系数矩阵×图像块矩阵
【DCT变换】Python矩阵运算实现DCT变换

然后,将上述步骤得到的结果矩阵×DCT系数矩阵的转置矩阵
【DCT变换】Python矩阵运算实现DCT变换
最后,得到该图像块的DCT变换结果
【DCT变换】Python矩阵运算实现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变换】Python矩阵运算实现DCT变换

由上表可见,两种方式的计算结果都是相同的。因此,根据以上所介绍的方法,也能够正确实现图像块的DCT变换。文章来源地址https://www.toymoban.com/news/detail-501601.html

到了这里,关于【DCT变换】Python矩阵运算实现DCT变换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 离散数学之矩阵关系运算

    矩阵关系运算前提: (1)第一个矩阵的列数等于第二个矩阵的行数。 (2)两个矩阵的元素均是0或1。 例如:A关系运算B得到C   原理:C11=(A11∧B11)∨(A12∧B21) C12=(A11∧B12)∨(A12∧B22)...... 就是把矩阵乘法中各个元素的乘法变成合取,原来乘法之后进行的相加改为合取后的析取。    

    2024年02月12日
    浏览(43)
  • 基于FPGA的二维DCT变换和逆变换verilog实现,包含testbench

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 数据导入到matlab显示图像 vivado2019.2 matlab2022a         离散余弦变换(Discrete Cosine Transform,DCT)是一种广泛应用于图像和信号处理领域的变换技术。在图像处理中,DCT常被用于

    2024年02月21日
    浏览(60)
  • 基于DCT+huffman变换的图像压缩解压缩FPGA实现

    目录 一、理论基础 二、verilog程序 三、仿真结果        图像压缩和解压缩是数字图像处理中的重要技术。基于DCT(离散余弦变换)和Huffman变换的图像压缩解压缩方法是一种常见的图像压缩标准,它可以将图像数据压缩成更小的体积,同时保持图像的质量和还原性。 一、

    2023年04月16日
    浏览(73)
  • 逆透视变换——变换矩阵的Python实现

    透视变换原理和变换矩阵的python实现 个人理解,可能有误,欢迎讨论。 进行透视变换,需要选择四个点,这些点定义了一个长方形,但是在原始图像中由于照相角度等问题,它并没有呈现出是一个长方形,为了变换视角,我们需要进行透视变换。 透视变换本质上是将图片从

    2024年02月02日
    浏览(39)
  • MATLAB矩阵运算及变换与应用(二)

    1)了解矩阵运算与数组运算的基本原理和规则; 2)掌握矩阵运算和数组运算的方法; 3)熟悉常见运算函数的使用; 4)熟悉矩阵结构变换的方法; 5)掌握线性方程组的求解方法和技巧。 2-1)、已知向量x=[1 2 3],y=[4 5 6],求?的结果。   2-2)、已知 求下列表达式的值 (

    2023年04月15日
    浏览(33)
  • 矩阵的乘法运算与css的3d变换(transform)

    引言:你有没好奇过,在一个使用了transform变换的元素上使用window.getComputedStyle(htmlElement)[\\\'transform\\\'] 查询出来的值代表什么? 为什么硬件加速要使用transform,以及为什么硬件加速会快? 小科普:关于矩阵的乘法 由此,可以看到两个矩阵相乘就是拿第一个的每一行,乘以第二个

    2024年02月08日
    浏览(42)
  • Python实现向量、矩阵运算(dot点积运算)

    1.点积运算概念 点积运算是参与运算的两向量各对应位置上元素相乘后,再将各乘积相加。 两个向量a = [a1, a2,…, an]和b = [b1, b2,…, bn]的点积定义为: a·b=a1b1+a2b2+……+anbn。 . 使用矩阵乘法,点积还可以写为:a·b=(a^T )*b // 这里的a^T指示矩阵a的转置。 numpy库的使用:https:

    2024年02月02日
    浏览(37)
  • Python图像处理【10】基于离散余弦变换的图像压缩

    由于图像中相邻像素间的相关性引起的空间冗余、图像序列中不同帧之间存在相关性引起的时间冗余,因此我们需要对图像数据进行压缩。数据压缩的目的就是通过去除这些数据冗余来减少数据表示所占用的存储空间。随着大数据时代的到来,图像数据在质量提高的同时,其

    2024年02月04日
    浏览(64)
  • 用Python实现矩阵运算【学习笔记】

    Pandas:Python中一个强大的分析结构化数据的工具集,可用于快速实现数据的导入/导出,索引。 Matplotlib:Python基础绘图库,几行代码即可生成绘图,直方图、条形图、散点图等。 NumPy:使用Python进行科学计算的基础软件包。核心:基于N维数组对象ndarray的数组运算。 现有矩阵

    2024年02月11日
    浏览(46)
  • (数字图像处理MATLAB+Python)第四章图像正交变换-第一节:离散傅里叶变换

    一维离散傅里叶变换(Discrete Fourier Transform,DFT) :是一种数学技术,用于将代表离散时间信号的N个复数序列从 时域转换到频域 。DFT被广泛用于许多应用,如音频和图像处理、通信和控制系统。DFT是傅里叶变换的离散版本,傅里叶变换是一种用于分析频域信号的连续数学技

    2023年04月13日
    浏览(94)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包