图像处理中常用的正交变换除了傅里叶变换外,还有其他一些有用的正交变换,其中离散余弦就是一种。离散余弦变换表示为DCT( Discrete Cosine Transformation),常用于图像处理和图像识别等。

一维离散余弦变换

正变换

                                   (1)

                            (2)

式中F(u)是第u个余弦变换系数,u是广义频率变量,u=1,2,3......N-1; f(x)是时域N点序列, x=0,1,2......N-1

反变换

  (3)

显然,式(1)式(2)和式(3)构成了一维离散余弦变换对。

二维离散余弦变换

正变换

  (4)

式(4)是正变换公式。其中f(x,y)是空间域二维向量之元素, x,y=0,1,2,......N-1;F(u,v)是变换系数阵列之元素。式中表示的阵列为N×N

反变换

 (5)

式中的符号意义同正变换式一样。式(4)和式(5)是离散余弦变换的解析式定义。

矩阵表示法

更为简洁的定义方法是采用矩阵式定义。根据以上公式定义可知,离散余弦变换的系数矩阵可以写成如下:

如果令N=4,那么由一维解析式定义可得如下展开式。

写成矩阵式

若定义F(u)为变换矩阵,A为变换系数矩阵,f(x)为时域数据矩阵,则一维离散余弦变换的矩阵定义式可写成如下形式

[F(u)]=[A][f(x)]                       (6)

同理,可得到反变换展开式

写成矩阵式即

[f(x)]=[A]T[F(u)]                      (7)

二维离散余弦变换也可以写成矩阵式:

[F(u,v)]=[A][f(x,y)][A]T            (8)

[f(x,y)]=[A]T[F(u,v)][A]                     

式中[f(x,y)]是空间数据阵列,A是变换系数阵列,[F(u,v)]是变换矩阵,[A]T是[A]的转置。

对二维图像进行离散余弦变换

由以上对二维离散余弦变换的定义及公式(7)可知,求二维图像的离散余弦变换要进行以下步骤:

1.获得图像的二维数据矩阵f(x,y);

2.求离散余弦变换的系数矩阵[A];

3.求系数矩阵对应的转置矩阵[A]T;

4.根据公式(7)[F(u,v)]=[A][f(x,y)][A]T 计算离散余弦变换;

源代码:

package cn.edu.jxau.image;import java.awt.image.BufferedImage;/*** 图像的变换* @author luoweifu**/
public class Transformation {/*** 要进行DCT变换的图片的宽或高*/public static final int N = 256;/*** 傅里叶变换* @return*/public int[] FFT() {return null;}/*** 离散余弦变换* @param pix 原图像的数据矩阵* @param n 原图像(n*n)的高或宽* @return 变换后的矩阵数组*/public int[] DCT(int[] pix, int n) {       double[][] iMatrix = new double[n][n]; for(int i=0; i<n; i++) {for(int j=0; j<n; j++) {iMatrix[i][j] = (double)(pix[i*n + j]);}}double[][] quotient = coefficient(n);   //求系数矩阵double[][] quotientT = transposingMatrix(quotient, n);  //转置系数矩阵double[][] temp = new double[n][n];temp = matrixMultiply(quotient, iMatrix, n);iMatrix =  matrixMultiply(temp, quotientT, n);int newpix[] = new int[n*n];for(int i=0; i<n; i++) {for(int j=0; j<n; j++) {newpix[i*n + j] = (int)iMatrix[i][j];}}return newpix;}/*** 矩阵转置* @param matrix 原矩阵* @param n 矩阵(n*n)的高或宽* @return 转置后的矩阵*/private double[][]  transposingMatrix(double[][] matrix, int n) {double nMatrix[][] = new double[n][n];for(int i=0; i<n; i++) {for(int j=0; j<n; j++) {nMatrix[i][j] = matrix[j][i];}}return nMatrix;}/*** 求离散余弦变换的系数矩阵* @param n n*n矩阵的大小* @return 系数矩阵*/private double[][] coefficient(int n) {double[][] coeff = new double[n][n];double sqrt = 1.0/Math.sqrt(n);for(int i=0; i<n; i++) {coeff[0][i] = sqrt;}for(int i=1; i<n; i++) {for(int j=0; j<n; j++) {coeff[i][j] = Math.sqrt(2.0/n) * Math.cos(i*Math.PI*(j+0.5)/(double)n);}}return coeff;}/*** 矩阵相乘* @param A 矩阵A* @param B 矩阵B* @param n 矩阵的大小n*n* @return 结果矩阵*/private double[][] matrixMultiply(double[][] A, double[][] B, int n) {double nMatrix[][] = new double[n][n];double t = 0.0;for(int i=0; i<n; i++) {for(int j=0; j<n; j++) {t = 0;for(int k=0; k<n; k++) {t += A[i][k]*B[k][j];}nMatrix[i][j] = t;         }}return nMatrix;}}

离散余弦变换(含源码)相关推荐

  1. 离散余弦变换java实现_离散余弦变换(含源码)

    图像处理中常用的正交变换除了傅里叶变换外,还有其他一些有用的正交变换,其中离散余弦就是一种.离散余弦变换表示为DCT( Discrete Cosine Transformation),常用于图像处理和 ...

  2. 【Matlab优化选址】蚁群算法求解电动汽车充电站与换电站选址优化问题【含源码 1182期】

    一.代码运行视频(哔哩哔哩) [Matlab优化选址]蚁群算法求解电动汽车充电站与换电站选址优化问题[含源码 1182期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文 ...

  3. 简单音乐播放器html+css+基础vue+含源码,有搜索和播放mv功能,代码可直接复制用。

    题目:html+css+基础vue实现的简单音乐播放器(含源码),有搜索和播放mv功能,代码可直接复制用. 问题描述: 如果vue刚入门,掌握一些基础语法后就可以写一个简单的音乐播放器来练练手~~如果 ...

  4. [c#]一键设置popo猫回收站工具含源码

    功能介绍: [c#]一键设置popo猫回收站工具含源码 在抖音上看到挺好玩的,设置popo猫回收站图标,回收站内没有文件时嘴巴是张开的,当回收站内放置文件时嘴巴是闭合的. 其实功能实现很简单,准备两个 ...

  5. ONNX MLIR应用示例(含源码链接)

    ONNX MLIR应用示例(含源码链接) 开放式神经网络交换在MLIR中的实现 (http://onnx.ai/onnx-mlir/). Prebuilt Containers 开始使用ONNX-ML ...

  6. 侯捷译Practical Java(含源码)

    侯捷译Practical Java(含源码) [url=http://www.123xz.net/soft/49/297/308/2007/20070517105923.html][B]侯捷译Prac ...

  7. Delphi:程序自己删除自己,适用于任何windows版本(含源码)

    Delphi:程序自己删除自己,适用于任何windows版本(含源码) function Suicide: Boolean; var   sei: TSHELLEXECUTEINFO;   szMod ...

  8. Hyperledger Fabric Rest API服务开发教程【含源码】

    Hyperledger Fabric Rest API服务开发教程[含源码] Hyperledger Fabric 提供了软件开发包/SDK以帮助开发者访问fabric网络 和部署在网络上的链码,但是 ...

  9. python视频网站项目_Python开发教育网站项目实例教学(105集视频课程含源码)

    Python开发教育网站项目实例教学(105集视频课程含源码)课程简介: Python开发教育网站项目实例教学(105集视频课程含源码)通过这105集Python实例视频课程的学习,学员可以掌握到使用 ...

最新文章

  1. Ios生产证书申请(含推送证书)
  2. 全球及中国油气装备行业投资状况及运营前景研究报告2021版
  3. C#中使用DbHelper连接SqlServer数据库
  4. Python 3.9,来了!
  5. 如何科学的打开 Leetcode
  6. git每个项目创建帐户名和密码
  7. 怎么用U盘重装系统?
  8. 连接两个std :: vector
  9. Go语言超全详解(入门级)
  10. MySQL数据库索引查询
  11. postgresql客户端代码上传中文数据到服务器
  12. 离职前一定要做好这7件事情,少一件都很麻烦。
  13. struggle in webservices
  14. so easy 的 Vue3.0自定义指令(也搜一贼)
  15. slam十四讲,ch5joinmap报错,已解决
  16. Emlog主题:秒拍网主题模板源码
  17. 金立e3t刷android4.4,金立E3T刷机包 基于百度云官方ROM 深度精简 超强权限 省电耐用 安全稳定...
  18. java反序列化漏洞分析
  19. 指定IP地址进行远程访问设置方法windows
  20. idea工具整合前端vue,nodeJs步骤

热门文章

  1. 目标跟踪之 MOT 经典算法:ByteTrack 算法原理以及多类别跟踪
  2. 丹尼尔•卡尼曼《思考,快与慢》
  3. 环境整理(pro、sit、uat、test、pre、dev、fat )
  4. 思迅食通天6单店升级连锁流程
  5. MySQL基本知识点汇总 以及 高级查询练习
  6. Scala模式匹配--样例类--密封样例类--偏函数
  7. 用C语言实现蛇形矩阵的打印
  8. CAD图纸怎么在线转换成JPG格式的图片
  9. adb 清理内存_Android实现仿360桌面悬浮清理内存
  10. 我的大长腿,只有防弹级丝袜才能配得上