www.pudn.com > jpegtool_matlab.rar > trailnum.m
% trailnum - count trailing zeros in zigzag sequence % % SYNOPSIS % trailnum(X) % % DESCRIPTION % JPEG-like compression leads to matrices which usually contain % zeros in the high-frequency entries. Counting the number of % trailing zeros (in the zigzag pattern) gives an indication of % the compression achieved at the quantizing stage; trailnum % returns this count. % % SEE ALSO % jpeg, quant % 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 c = trailnum(a) n = size(a,1); [i, j] = find(a); if ~size(i,1) % zero matrix? c = n^2; return end w = sort(i+j); d = w(size(w, 1)); % Count the number of zero entries in trailing zero diagonals if (d <= n+1) c = n^2 - (d-1)*d/2; else c = (2*n-d)*(2*n-d+1)/2; end % Now count the number of trailing zeros in the last nonzero diagonal w = diag(rot90(a), d - n - 1); if (floor(d/2)*2 ~= d) w = w(size(w,1):-1:1); end w = find(w); c = c + w(1) - 1;