压缩编码之变换的选择之离散余弦变换(DCT)和离散傅立叶变换(DFT)——数字图像处理

这篇具有很好参考价值的文章主要介绍了压缩编码之变换的选择之离散余弦变换(DCT)和离散傅立叶变换(DFT)——数字图像处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原理

变换的选择是一个关键的考量因素,它决定了数据是如何被压缩的。选择变换时考虑以下几个重要原则:

数据去关联性:变换的目的之一是减少数据中的相关性。例如,在图像压缩中,像素间往往高度相关。通过适当的变换,如离散余弦变换(DCT),可以将这些相关性转化为更加独立的形式,从而提高压缩效率。

能量集中:理想的变换应该能将数据的能量(或信息)集中到尽可能少的系数中。这样,通过仅编码这些主要系数,就可以在保留大部分信息的同时实现有效的压缩。

可逆性:对于无损压缩,变换必须是可逆的,这意味着从压缩数据中可以完全恢复原始数据。对于有损压缩,这一要求可以放宽,允许在接受某种程度信息损失的前提下获得更高的压缩比。

计算效率:变换过程应该足够高效,以便于在实际应用中快速处理大量数据。这通常意味着变换算法需要能够被有效地实现,且计算复杂度可接受。

适应性:在某些情况下,变换应该具有适应性,能够根据数据的特性进行调整。例如,在音频和视频压缩中,根据内容的不同,可能需要使用不同的变换策略。

编码后的数据特性:变换应该产生便于编码的数据。例如,高效的压缩算法通常会生成具有高峰值和长尾分布的数据,这使得熵编码等技术更加有效。
变换的选择取决于特定应用的需求和特性。

以下是几种常用于数据压缩的变换:

离散余弦变换(DCT):这种变换广泛用于图像和视频压缩,例如在JPEG图像格式中。DCT能有效地将图像数据从空间域转换到频率域,使得图像中的高频信息(通常是细节部分)和低频信息(图像的主要部分)得以分离,从而便于进行更高效的压缩。

小波变换:小波变换在图像和视频压缩中也很流行,特别是在JPEG 2000图像格式中。与DCT相比,小波变换提供了更好的尺度和位置控制,使其在处理具有不同尺度特征的图像时更加有效。

离散傅立叶变换(DFT):虽然DFT在图像压缩中不如DCT常用,但它在音频压缩和通信系统中非常重要。DFT可以将时域信号转换为频域信号,使得频域中的能量分布更加明显,从而便于压缩。

Karhunen-Loève变换(KLT):这种变换在理论上可以提供最佳的数据压缩,但由于其高计算复杂性和数据依赖性,它在实际应用中不太常用。

**奇异值分解(**SVD):虽然SVD的计算成本较高,但它在某些特定应用中,如图像压缩的特定场景中,能提供优秀的压缩效果。

选择哪种变换取决于多种因素,包括压缩的目标(无损或有损)、数据类型(图像、视频、音频等)、处理速度要求、以及最终压缩数据的预期用途。在实际应用中,这些变换通常与其他压缩技术(如量化和熵编码)结合使用,以达到最优的压缩效果。

python实现下图

压缩编码之变换的选择之离散余弦变换(DCT)和离散傅立叶变换(DFT)——数字图像处理,算法,人工智能,机器学习,opencv,图像处理,计算机视觉,深度学习

提示

结果显示了原图的两种变换后近似。先将原图分割为大小为8×8的子图像,并对每个子图像进行DCT和DFT变换,之后保留幅值最大的32个系数,最后对截尾后的系数阵列进行反变换得到近似图像,并计算原图与近似图之间的误差图像。
注意:dct变换可以通过函数cv2.dct(img)来实现,需要注意img在做dct变换之前需要转换为float类型。此外,为了增加误差图像的对比度,可用如下语句显示误差图像axs[i, j].imshow(img, vmin=img.min()*0.1, vmax=img.max()*0.1, cmap=‘gray’)

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
dct_inv_img = np.zeros(img.shape)
dft_inv_img = np.zeros(img.shape)
dct_dif_img = np.zeros(img.shape)
dft_dif_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])
        dft = np.fft.fft2(img[i:i+8, j:j+8])
        # idx = np.argpartition(dct.ravel(), 32)[:32]
        # idx2d = np.unravel_index(idx, dct.shape)
        # dct[idx2d] = 0
        med = np.median(np.abs(dct))
        dct[np.abs(dct) < med] = 0
        med = np.median(np.abs(dft))
        dft[np.abs(dft) < med] = 0

        dct_inv_img[i:i+8, j:j+8] = cv2.idct(dct)
        dft_inv_img[i:i+8, j:j+8] = np.abs(np.fft.ifft2(dft))
dct_dif_img=img-dct_inv_img
dft_dif_img=img-dft_inv_img


img_list = [img, dct_inv_img, dct_dif_img, img, dft_inv_img, dft_dif_img]
img_name_list = ['original', 'dct', 'dct_diff', 'original', 'dft', 'dft_diff']
_,axs=plt.subplots(2,3)

for i in range(2):
    for j in range(3):
        if j==2:
            axs[i, j].imshow(img_list[i*3+j], vmin=img_list[i*3+j].min()*0.1, vmax=img_list[i*3+j].max()*0.1, cmap='gray')
        else:
            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()

结果展示

压缩编码之变换的选择之离散余弦变换(DCT)和离散傅立叶变换(DFT)——数字图像处理,算法,人工智能,机器学习,opencv,图像处理,计算机视觉,深度学习

总结

在变化编码中,其性能与所选用的正交变换类型,图像类型,变化块的大小,压缩方式和压缩程度等因素有关。在变换方式确定之后,变换块的大小选择就显得尤为重要,因为大多数图像统计结果显示,大多数图像仅在约20个相邻像素间有较大的相关性,而且一般当子图像尺寸n>16(像素)时,其性能已经改善不大。同时,如果子图像块过大,其中所包含的像素就越多,变换时所需要的计算量也就越大,因此一般子图像块的大小选为8像素8像素或16像素16像素。对图像进行字块划分的好处是:小块图像的变换计算容易,它可以将传输误差造成的图像损伤限制在子图像的范围之内,从而避免误码的扩散。文章来源地址https://www.toymoban.com/news/detail-781418.html

到了这里,关于压缩编码之变换的选择之离散余弦变换(DCT)和离散傅立叶变换(DFT)——数字图像处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Python图像处理【10】基于离散余弦变换的图像压缩

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

    2024年02月04日
    浏览(64)
  • FFCNet:基于傅立叶变换的频率学习和复杂卷积网络用于结肠疾病分类

    提出了一种基于傅立叶的频率复杂网络(FFCNet)用于结肠疾病分类: 将复杂卷积网络与频率学习相结合,以克服实际卷积操作造成的相位信息损失 傅立叶变换将图像的平均亮度转移到光谱中的一个点(DC分量),通过解耦图像内容和亮度来减轻亮度不均匀的影响。 FFCNet中的

    2024年02月06日
    浏览(37)
  • 图像处理之图像的离散余弦变换

    一、前言 离散余弦变换(Discrete Cosine Transform, DCT)是 以一组不同频率和幅值的余弦函数和来近似一幅图像,实际上是傅立叶变换的实数部分 。离散余弦变换有一个重要的性质,即 对于一幅图像,其大部分可视化信息都集中在少数的变换系数上 。因此,离散余弦变换经常用于图

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

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

    2023年04月16日
    浏览(73)
  • 10 DCT变换对灰度图像压缩(matlab程序)

    1. 简述 一、设计任务 1、在图像的变换和压缩中,常常用到离散余弦变换(DCT)。DCT变换用于图像的压缩实例。请在测试图像中验证你的结论。 2、请编程实现图像的真彩色增强。 3、通过直方图均衡化的方法实现图像的灰度变换,在测试图像中验证你的结论,分析程序结果。

    2024年02月12日
    浏览(60)
  • STM32CubeMx移植DSP库 傅立叶变化(FFT)测试

    本篇文章采用的是ST公司的STM32L496的DSP库进行FFT函数测试,将计算得到的数据通过串口工具打印出来,其他支持DSP库的型号也是类似做法。 STM32L496为超低功耗Cortex-M4内核的MCU,具有64个引脚,并且外设资源丰富(4个IIC硬件通信接口、5个串口通信接口、3个SPI通信接口、3个12位

    2023年04月08日
    浏览(46)
  • 傅立叶之美:深入研究傅里叶分析背后的原理和数学

            T傅里叶级数及其伴随的推导是数学 在现实世界 中最 迷人的 应用 之一。我一直主张通过理解数学来理解我们周围的世界。 从使用线性代数设计神经网络,从混沌理论理解 太阳系 ,到弦理论理解 宇宙的基本组成部分 ,数学无处不在。         当然,这些是

    2024年04月12日
    浏览(44)
  • Matlab|数字图像处理02|图像的傅里叶变换(平移/旋转性质)及图像的离散余弦变换

    问题1:x,y方向同时平移后频谱有何变化? 答:经过平移后的傅里叶变换幅值图与原图像得到的傅里叶变换幅值图基本相同,平移不改变频谱的幅值。 代码运行结果: 代码: 问题2:编程验证一幅图旋转45度后,其傅里叶谱图也旋转了45度。 代码: 问题3:第8行10的数字大小对

    2024年02月08日
    浏览(47)
  • 【红外与可见光图像融合】离散平稳小波变换域中基于离散余弦变换和局部空间频率的红外与视觉图像融合方法(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码及文献 基于

    2024年02月07日
    浏览(46)
  • dct变换(dct变换矩阵)

    1。双离合器变速器(DCT)仍然像手动变速器一样是由众多齿轮、同步器、液压控制单元、电子控制单元和各轴等部件组成的,速比变化靠计算机控制来实现,而且各挡速比是固定不变的。 2。无论6挡DSG变速器,还是7挡DSG变速器,它们的基本原理是一致的,简单地说,就是将两套

    2023年04月08日
    浏览(77)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包