Estoy tratando de calcular los momentos de Zernike de orden superior (p. Ej. m=0
, n=46
) Para alguna imagen. Sin embargo, me encuentro con un problema con respecto al polinomio radial (ver wikipedia ). Este es un polinomio definido en el intervalo [0 1]. Ver el código MATLAB a continuación
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
Sin embargo, esto obviamente tiene problemas numéricos cercanos RHO > 0.9
.
Traté de refactorizarlo para polyval
pensar que podría tener algunos mejores algoritmos detrás de escena, pero eso no resolvió nada. La conversión a un cálculo simbólico creó el gráfico deseado, pero fue increíblemente lento incluso para un gráfico simple como se muestra.
¿Existe una forma numéricamente estable de evaluar tales polinomios de alto orden?