% Usage: Y = blkidct2(y, m, n).
% Block inverse DCT routine on array y, using m by n blocks. m
% must divide number of rows in y, n divide number of colums.
% Transform returned in y. For small blocks it's faster to use
% matrix multiplies than to repeatedly call the "dct2" command.
% If you don't have the signal processing toolbox substitute kdct()
% for dct().
function y=blkidct2(Y,m,n)
[r,s] = size(Y);
y = zeros(r,s);
C1 = idct(eye(m));
C2 = idct(eye(n))';
for i=1:(r/m)
for j=1:(s/n)
e = (i-1)*m+1;
f = (j-1)*n+1;
Z = double(Y(e:(e+m-1),(f:f+n-1)));
y(e:(e+m-1),(f:f+n-1)) = C1*Z*C2;
end;
end;