DCT变换及matlab实现

来源:互联网 发布:19岁网络女主播萱萱 编辑:程序博客网 时间:2024/05/17 11:59

1.一维DCT变换

一维的DCT变换共有8种,其中最实用的是第二种形式,公式如下:



其中c(u)是加上去一个系数,为了能使DCT变换矩阵成为正交矩阵,在后面二维变换将看到他的作用。N是f(x)的总数。相比其他几种形式,他的运算还是比较简单的,因此也用的比较广。
clcclearin=1:8;N=8;for i=0:N-1    if i==0        a=sqrt(1/N);    else        a=sqrt(2/N);    end     sum=0;    for j=0:N-1             sum=sum+in(j+1)*cos(pi*(j+0.5)*i/N);    end    F(i+1)=a*sum;endFFF=dct(in)

F是使用上面的公式进行变换,FF是用matlab自带的dct函数变换
计算结果

F =   12.7279   -6.4423   -0.0000   -0.6735         0   -0.2009   -0.0000   -0.0507FF =   12.7279   -6.4423         0   -0.6735         0   -0.2009         0   -0.0507


2.二维DCT变换

二维DCT变换是在一维的基础上再进行一次DCT变换,这个比较好理解,直接看公式:


这里我只讨论两个N相等的情况,也就是数据是方阵的形式,在实际应用中对不是方阵的数据都是先补齐再进行变换的。为了matlab仿真方便点,写成矩阵形式:


matlab程序如下:
clear;clc;N=4;X =[26    18    87    85;    80    26    58    62;    43    15    55    35;    91    14    14    51];A=zeros(N);for i=0:N-1    if i==0        c=sqrt(1/N);    else        c=sqrt(2/N);    end     for j=0:N-1                  A(i+1,j+1)=c*cos(pi*(j+0.5)*i/N);    endendD=A*X*A'DD=dct2(X) 

参考 http://wuyuans.com/2012/11/dct2/
http://www.cnblogs.com/xkfz007/archive/2012/07/31/2616791.html

0 0
原创粉丝点击