离散余弦变换-DCT-2的Matlab实现及图像有损压缩示例

离散余弦变换(DCT)将有限序列的数据点表示为在不同频率上振荡的余弦函数的和。DCT有几个变体,最常用的就是DCT-2

常用的二维的 DCT-2 的公式如下(N*M 图像):

,并且离散余弦变换-DCT-2的Matlab实现及图像有损压缩示例_第1张图片

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
         X(u+1,v+1)=(2/sqrt(M*N)) * alpha_a(u) *  alpha_a(v) * temp;
    end
end
f=X;
end

Matlab 另外一个函数实现:

function f = alpha_a(k)

if k ==0
    alpha=1/sqrt(2);
else
    alpha = 1;
end
f=alpha;

end

经代码验证:与matlab内置的dct2()函数输出结果一致。

图像有损压缩示例及代码可以点此下载。

 

你可能感兴趣的:(图像识别,编码学)