J'essaie de calculer des moments Zernike d' ordre supérieur (par exemple m=0
, n=46
) pour une image. Cependant, je rencontre un problème concernant le polynôme radial (voir wikipedia ). Il s'agit d'un polynôme défini sur l'intervalle [0 1]. Voir le code MATLAB ci-dessous
function R = radial_polynomial(m,n,RHO)
R = 0;
for k = 0:((n-m)/2)
R = R + (-1).^k.*factorial(n-k) ...
./ ( factorial(k).*factorial((n+m)./2-k) .* factorial((n-m)./2-k) ) ...
.*RHO.^(n-2.*k);
end
end
Cependant, cela se heurte évidemment à des problèmes numériques proches RHO > 0.9
.
J'ai essayé de le refactoriser en polyval
pensant qu'il pourrait avoir de meilleurs algorithmes en coulisses mais cela n'a rien résolu. Le convertir en un calcul symbolique a créé le graphique souhaité, mais était incroyablement lent, même pour un graphique simple tel que montré.
Existe-t-il un moyen numériquement stable d'évaluer de tels polynômes d'ordre élevé?