www.pudn.com > jpegtool_matlab.rar > do_dct.m


% do_dct - utility routine to do forward or inverse transform
%
% SYNOPSIS
%	do_dct(X, N, inv)
%
% DESCRIPTION
% 	do_dct cuts an mxn image X into NxN subimages and transforms
%       these images. It is designed to be called from higher-level
%	routines such as dct and invdct. N is the size of the transform,
%       and inv is a flag indicating forward (FALSE) or inverse (TRUE).
%
% BUGS
%	It's slow.
%	
% SEE ALSO
%	dct, invdct

% Copyright (C) 1995-1997 Darrel Hankerson and Greg A. Harris
%
% This file is part of the JPEGtool collection of scripts for Octave
% and Matlab; see http://www.dms.auburn.edu/compression
%
% The JPEGtool collection is free software; you can redistribute it
% and/or modify it under the terms of the GNU General Public License
% as published by the Free Software Foundation; either version 2, or
% (at your option) any later version.
%
% The collection is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this package; see the file COPYING.  If not, write to the
% Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
% 02111-1307, USA.

function X = do_dct(X, N, inv)

% Build the NxN cosine transform
c = dctmat(N);

if (inv)
  c = c';
end

dim=fix(size(X)/N); m=dim(1); n=dim(2);
X = X(1:N*m,1:N*n);  	%  snip trailing rows and columns from X

%  Now break up X and transform
for ii=1:m	
  rows = N*(ii-1)+1:N*ii;
  for jj=1:n
    cols = N*(jj-1)+1:N*jj;
    X(rows, cols) = c*X(rows, cols)*c' ;
  end
end