Sto cercando di calcolare i momenti Zernike di ordine superiore (ad esempio m=0
, n=46
) per qualche immagine. Tuttavia, sto riscontrando un problema relativo al polinomio radiale (vedi Wikipedia ). Questo è un polinomio definito sull'intervallo [0 1]. Vedi sotto il codice MATLAB
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
Tuttavia, questo ovviamente incontra problemi numerici vicino RHO > 0.9
.
Ho provato a rifattorarlo polyval
pensando che potesse avere alcuni algoritmi dietro le quinte migliori ma che non ha risolto nulla. La conversione in un calcolo simbolico ha creato il grafico desiderato ma è stato incredibilmente lento anche per un grafico semplice come mostrato.
Esiste un modo numericamente stabile di valutare tali polinomi di alto ordine?