伪zernike矩 matlab,Matlab Zernike矩询问?

这个是一个Zernike矩的调用函数

function [A_nm,zmlist,cidx,V_nm] = zernike(img,n,m)

%% 计算图像的Zenike矩

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);

mask  = zeros(d);

mask(inside) = ones(size(inside));

[cimg,cidx] = clipimg(img,mask);

z  = clipimg(x+i*y,mask);

p  = 0.9*abs(z);

theta  = angle(z);

c = 1;

for order=1:length(n)

n1 = n(order);

if nargin<3

m = zpossible(n1);

end

for r=1:length(m)

V_nmt  = zpoly(n1,m(r),p,theta);

zprod  = cimg.*conj(V_nmt);

A_nm(c)  = (n1+1)*sum(sum(zprod))/pi;

zmlist(c,1:2) = [n1 m(r)];

if nargout==4

V_nm(:,c) = V_nmt;

end

c  = c+1;

end

end

else

end

function [cimg,cindex,dim] = clipimg(img,mask)

dim = size(img);

cindex = find(mask~=0);

cimg = img(cindex);

return;

function [m] = zpossible(n)

if iseven(n)

m = 0:2:n;

else

m = 1:2:n;

end

return;

function [V_nm,mag,phase] = zpoly(n,m,p,theta)

R_nm = zeros(size(p));

a = (n+abs(m))/2;

b = (n-abs(m))/2;

total = b;

for s=0:total

num = ((-1)^s)*fac(n-s)*(p.^(n-2*s));

den = fac(s)*fac(a-s)*fac(b-s);

R_nm = R_nm + num/den;

end

mag = R_nm;

phase = m*theta;

V_nm = mag.*exp(i*phase);

return;

function [factorial] = fac(n)

maxno  = max(max(n));

zerosi  = find(n<=0);

n(zerosi) = ones(size(zerosi));

factorial = n;

findex  = n;

for i=maxno:-1:2

cand  = find(findex>2);

candidates = findex(cand);

findex(cand) = candidates-1;

factorial(cand) = factorial(cand).*findex(cand);

end

return;

function [verdict] = iseven(candy)

verdict  = zeros(size(candy));

isint  = find(isint(candy)==1);

divided2 = candy(isint)/2;

evens  = (divided2==floor(divided2));

verdict(isint) = evens;

return;

function [verdict] = isint(candy)

verdict = double(round(candy))==candy;

return;

这个程序只能计算出一个值吧,我在文献上了解到Zernike矩值有不同阶之分,这里一个值表示什么意思呢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值