离散余弦变换(DCT)将有限序列的数据点表示为在不同频率上振荡的余弦函数的和。DCT有几个变体,最常用的就是DCT-2
常用的二维的 DCT-2 的公式如下(N*M 图像):
,并且
Matlab实现该DCT-2公式 源码如下:
注意:公式中N 代表行,M 代表列。代码中M 为行,N 位列。对于方阵来说M=N,灵活变换公式及代码即可。
function f = my_dct2(B)
% get the input matrix dimension
S = size(B);
M=S(1);%行
N=S(2);%列
% initial output matrix
X=zeros(M,N);
for u=0:M-1
for v=0:N-1
temp=0;
for x = 0:M-1
for y = 0:N-1
temp= temp+B(x+1,y+1) * cos(((2*x+1)*u*pi)/(2*M)) * cos(((2*y+1)*v*pi)/(2*N));
end
end