www.pudn.com > P-zernike.zip > w_imgmoments.m, change:2001-06-07,size:1604b

```function moment = mb_imgmoments(image, x, y)
% MB_IMGMOMENTS(IMAGE, X, Y) calculates the moment MXY for IMAGE
% MB_IMGMOMENTS(IMAGE, X, Y),
%    where IMAGE is the image to be processed and X and Y define
%    the order of the moment to be calculated. For example,
%    MB_IMGMOMENTS(IMAGE,0,1) calculates the first order moment
%    in the y-direction, and
%    MB_IMGMOMENTS(IMAGE,0,1)/MB_IMGMOMENTS(IMAGE,0,0) is the
%    'center of mass (fluorescence)' in the y-direction
%
% 10 Aug 98 - M.V. Boland

% \$Id: mb_imgmoments.m,v 1.2 1999/02/17 14:19:56 boland Exp \$

if nargin ~= 3
error('Please supply all three arguments (IMAGE, X, Y)') ;
end

%
% Check for a valid image and convert to double precision
%   if necessary.
%
if (isempty(image))
error('IMAGE is empty.')
elseif (~isa(image,'double'))
image = double(image) ;
end

%
% Generate a matrix with the x coordinates of each pixel.
%  If the order of the moment in x is 0, then generate
%  a matrix of ones
%
if x==0
if y==0
xcoords = ones(size(image)) ;
end
else
xcoords = (ones(size(image,1),1) * ([1:size(image,2)] .^ x)) ;
end

%
% Generate a matrix with the y coordinates of each pixel.
%  If the order of the moment in y is 0, then generate
%  a matrix of ones
%
if y~=0
%	ycoords = ones(size(image)) ;
ycoords = (([1:size(image,1)]' .^ y) * ones(1,size(image,2))) ;
end

%
% Multiply the x and y coordinate values together
%
if y==0
xycoords = xcoords ;
elseif x==0
xycoords = ycoords ;
else
xycoords = xcoords .* ycoords ;
end

%
% The moment is the double sum of the xyf(x,y)
%
moment = sum(sum(xycoords .* image)) ;
```