本文利用DCT原理,计算了二维矩阵的离散余弦变换,并验证了结果的正确性。
思路很简单,为了产生与原矩阵大小相同的变换后的矩阵,进行四次for循环,
其中前两个大循环负责遍历新矩阵的每个元素,后两个循环遍历原来矩阵元素求和。
原理:
M*N二维矩阵的变换公式为:
其中:
C(u),C(v)=1/sqrt(2),u,v=0
1 ,else
代码:
f=[1 2 3 ; 4 5 6 ; 7 8 9;];
DCT=dct2(f)
[m,n]=size(f);
F=zeros(m,n);
for u=1:m
for v=1:n
s=0;
for i=1:m
for j=1:n
s=s+f(i,j)*cos((2*i-1)*pi*(u-1)/(2*m))*cos((2*j-1)*pi*(v-1)/(2*n));
end
end
s=2/sqrt(m*n)*s;
F(u,v)=s;
end
end
F(1,:)=F(1,:)./sqrt(2);
F(:,1)=F(:,1)./sqrt(2);
F
测试结果跟matlab自带函数dct2结论相同,证明编写正确。
DCT =
15.0000 -2.4495 0.0000
-7.3485 0 0
0 0 0
F =
15.0000 -2.4495 0.0000
-7.3485 0 -0.0000
0.0000 0 0