离散余弦变换(Discrete Cosine Transform)本质上也是离散傅里叶变换(Discrete Fourier Transform),但是只有实数部分。有这样一个性质:如果信号

在给定区间内满足狄利赫里条件,且为实对称函数,则可以展开成仅含有余弦项的傅里叶级数,即离散余弦变换。所以,我们在构造离散信号的周期函数的时候,要对其进行偶延拓。

1. 一维离散余弦变换

首先,我们回想一下,信号

离散傅里叶变换为

设信号长度为

,然后对其进行偶延拓。

如果序列中不包含0点,即定义域为

,则偶延拓后其对称中心为

点,即

,此时其傅里叶变换可写为

而如果序列包含0点,即定义域为

,偶延拓方式为

,即对称中心为

。为方便,把

右移

变为

,则

,且

。此时自变量

的定语域为

,则其傅里叶变换可写为

因为计算机一般从0开始,所以DCT的标准公式为

系数是为了单位化基底,推导过程可参考这里。将标准DCT公式展开

其中

是系数矩阵

矩阵内的元素为

。(有兴趣的同学也可以验证一下,

是单位正交矩阵)

逆DCT变换为

。(与逆傅里叶变换原理完全相同,不再赘述)

2. 二维离散余弦变换

先给出二维DCT的公式

将上述DCT的公式展开

看作是原始图像,则

为DCT的结果。

在数字图像处理中,处理的图像基本上都为方阵,即

,所以二维DCT可写为

二维逆DCT变换为

3. 二维图像的DCT

我们先总结一下,DCT没有虚部,本质是傅里叶变换(无损)

图像从空间域快速(没有虚部)的变换到了频率域。好像很好用的样子~

先来试一下效果:对Lena进行DCT与iDCT,结果如图1所示。

# 离散余弦变换,并获取其幅频谱

img_dct = cv2.dct(np.float32(image))

img_dct_log = 20 * np.log(abs(img_dct))

# 逆离散余弦变换,变换图像回至空间域

img_back = cv2.idct(img_dct)图1 Lena的DCT与iDCT

从图1中可以看到,左上角亮度高,即Lena的主要能量集中在左上角;而且,从其逆变换可看出,DCT为无损变换。

其次,为了确定哪种能量、有多少能量集中在左上角,我对图1中的DCT of Lena以128像素为步长进行了裁剪,

# 裁剪DCT of Lena

for i in range(image_dct_1.shape[0]):

for j in range(image_dct_1.shape[1]):

if i > (256+128) or j > (256+128):

image_dct_1[i, j] = 0 # 裁剪的实质为像素置0

if i > 256 or j > 256:

image_dct_2[i, j] = 0 # 裁剪的实质为像素置0

if i > 128 or j > 128:

image_dct_3[i, j] = 0 # 裁剪的实质为像素置0

然后再对其进行逆DCT变换,结果如图2所示。图2 压缩(裁剪)DCT后进行iDCT的结果

随着压缩比例的增大,图片中的细节部分逐渐消失。在back Lena 1中还可以明显的看到sharp的边缘,而back Lena 3中,虽然主要的信息还在,但明显的高频信息丢失了。因此,DCT使图片的低频成分集中在左上角。(对,你可能猜到了,这在图像压缩领域用的很多~)

python离散余弦变换_数字图像处理(三)—— 离散余弦变换相关推荐

  1. python离散余弦变换_在python3下使用OpenCV做离散余弦变换DCT及其反变换IDCT

    对图像处理经常用到DCT, Python下有很多带有DCT算法包, 这里使用OpenCV的DCT做变换, 并简单置0部分数据, 再查看反变换图像的效果. import numpy as np impo ...

  2. python 灰度直方图_数字图像处理灰度变换之灰度直方图及python实现

    图像灰度直方图 灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率.直方图显示图像数据时会以左暗右亮的分布曲线形式呈现出来.横坐标是灰度级,纵坐标是该灰度级出现的频率.图 ...

  3. dct变换的主要优点有哪些_数字图像处理(三)—— 离散余弦变换

    离散余弦变换(Discrete Cosine Transform)本质上也是离散傅里叶变换(Discrete Fourier Transform),但是只有实数部分.有这样一个性质:如果信号 在给定区 ...

  4. 数字图像处理与Python实现-离散余弦变换

    离散余弦变换 离散余弦变换 1. 前言 2.数学表达 3. 代码实现 1. 前言     离散余弦变换(DCT for Discrete Cosine Transform)是与傅里叶变换相关的一种变换 ...

  5. Python 离散余弦变换(DCT)

    文章目录 离散余弦变换(DCT) 离散余弦变换(DCT).离散小波变换(DWT)和离散傅立叶变换(DFT) 离散余弦变换(DCT) 离散余弦变换(Discrete Cosine Transform,D ...

  6. 数字图像处理学习笔记(十八)实现图像的离散余弦变换

    实验截图: 自带函数实现的离散余弦变换: 利用公式求出的DCT和IDCT 实验代码: 代码(1): img=imread('erciyuan.jpg'); img=rgb2gray(img); fig ...

  7. Matlab|数字图像处理02|图像的傅里叶变换(平移/旋转性质)及图像的离散余弦变换

    问题1:x,y方向同时平移后频谱有何变化? 答:经过平移后的傅里叶变换幅值图与原图像得到的傅里叶变换幅值图基本相同,平移不改变频谱的幅值. 代码运行结果: 代码: clc; clear all; I= ...

  8. 图像处理 离散余弦变换

    什么是DCT 一维DCT变换 一维DCT变换时二维DCT变换的基础,所以我们先来讨论下一维DCT变换.一维DCT变换共有8种形式,其中最常用的是第二种形式,由于其运算简单.适用范围广.我们在这里只讨论 ...

  9. 【matlab 图像处理】离散傅里叶变换离散余弦变换K-L变换小波变换

    [matlab 图像处理]离散傅里叶变换&离散余弦变换&K-L变换&小波变换 正交变换是信号处理的一种有效工具.图像信号不仅可以在空间域表示,也可以在频域表示,后者将有利于许多 ...

最新文章

  1. python画柱状图和折线图-Python读取Excel表格,并同时画折线图和柱状图的方法
  2. IOS 关于ipad iphone5s崩溃 解决
  3. sqlDataAdapter的FillSchema用法
  4. html的段落标志中 标注行中断,?HTML的段落标志中,标注行中断的是?
  5. java 1.6u29 下载_jdk1.6 64位下载|JDK 6(Java SE Development Kit)下载6u43 64位官方版_java运行环境 IT猫扑网...
  6. qt 无法打开shell32_在Qt中用默认程序打开文件
  7. win32 sdk C语言菜单,win32 sdk 设定/获取checkbox控件状态
  8. 简单的3个SQL视图搞定所有SqlServer数据库字典 (转载)
  9. 三宝小精灵机器人_三宝小精灵幼育机器人-引领幼教AI新浪潮
  10. 电影:《三少爷的剑》票房折戟,武侠电影还能翻盘吗?
  11. vue项目中常用解决跨域的方法
  12. database link问题解决
  13. QT多线程之:moveToThread
  14. php扩容方案,PHP程序员玩转Linux系列-腾讯云硬盘扩容挂载
  15. c语言自动售货机实验报告,c语言自动售货机实验报告
  16. 跨境支付的噱头,你读懂了吗?
  17. JVM 类加载器(引导类加载器、扩展类加载器、系统类加载器、用户自定义类加载器)
  18. shineblink HC-SR505人体红外感应传感器
  19. 不经一番寒彻骨,怎得梅花扑鼻香,墙都不扶就服你
  20. 2017电影经典语句

热门文章

  1. VUE 动态构建混合数据Treeselect选择树,同时解决巨树问题
  2. bzoj1921 CTSC2010 jewelry
  3. Idea 安装 Python 支持的包(numpy等等)
  4. 回波损耗 VSWR S参数 总结
  5. python读写txt文件,并用jieba库进行中文分词
  6. Vue.js项目:制作一个Markdown格式的笔记本(上)
  7. 浅析ECMP等价路由
  8. 222:vue+openlayers 实现云雾缭绕,白鸽飞翔的效果
  9. Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx' to ALLOWED_HOSTS
  10. 十个程序员必备的网站