2次元DCT(離散コサイン変換)の基底

DCT-IIの定義式

ただし


function show_dct_basis
clear;
close all;

m = 8;
N = m*m;

    function F=getBasisF(u,v)
        F = zeros(m,m);
        for y=0:m-1
            for x=0:m-1
                F(y+1,x+1) = sqrt(2/m) * calcC(u)*calcC(v) ...
                    * cos(((2*x+1)*u*pi)/(2*m)) ...
                    * cos(((2*y+1)*v*pi)/(2*m));
            end
        end
    end

    function C=calcC(k)
        if k==0
            C=1/sqrt(2);
        else
            C=1;
        end
    end

Fs = zeros(m,m,N);
for vidx=0:m-1
    for uidx=0:m-1
        F = getBasisF(uidx,vidx);
        Fs(:,:,m*vidx+uidx+1) = F;
        subplot(m,m,m*vidx+uidx+1);
        imagesc(F);
        colormap(gray);
        axis image;
        axis off;
    end
end

end
F(u,v) = \sqrt\frac{2}{N} C(u) C(v) \sum_{x=0}^{N-1} \sum_{y=0}^{N-1} f(x,y) \cos\frac{(2x+1)u\pi}{2N} \cos\frac{(2y+1)v\pi}{2N}
\begin{eqnarray*}
C(u) = \left\{
\begin{array}{ll}
\frac{1}{\sqrt{2}} &(u=0) \\
1 &(u\neq 0)
\end{array}\right.
\end{eqnarray*}