2013-12-13 回答
% [a_nm,zmlist,cidx,v_nm] = zernike(img,n,m) 计算zernike矩
% v_nm 为n阶的zernike多项式,定义为在极坐标系中p,theta的函数
% cidx 表示虚部值
% a_nm 为zernike矩
function [a_nm,zmlist,cidx,v_nm] = zernike(img,n,m)
if nargin>0
if nargin==1
n=0;
end
d=size(img);
img=double(img);
xstep=2/(d(1)-1); % 取步长
ystep=2/(d(2)-1);
[x,y]=meshgrid(-1:xstep:1,-1:ystep:1); % 画方格
circle1= x.^2 + y.^2;
inside=find(circle1<=1); % 提取符合circle1<=1的数
mask=zeros(d); % 构造size(d)*size(d)的矩阵。
mask(inside)=ones(size(inside)); % 构造size(inside)*size(inside)的全为1的矩阵赋值给mask(inside)
[cimg,cidx]=clipimg(img,mask); % 计算图像的复数表示
int i;
z=clipimg(x+i*y,mask); % 计算z的实部和虚部
p=0.9*abs(z); % 计