Description
Email exchange between Brian Rossa, Arthur Mikhno, and Arno Klein (8/5-7/2013):
Brian Rossa (8/5/2013):
The Python results agree completely with the Octave results on my side, but my results do not agree with your results. The problem is that the function D_CV_orig expects "faces" to be 1-indexed -- think MATLAB -- rather than 0-indexed. We can add an "assert" to the code to check for this error mode in the future.
The size of the descriptor that you are seeing, 6, appears to be correct insofar as Arthur's code also gives a descriptor of size 6.
The descriptor for label22.vtk has some very large values. While this may seem dubious, the Arthur's code gives extremely high values as well.
Here are the "right" answers for your two examples according to Arthur and Octave:
[ 0.03978874 0.07597287 0.08322411 0.20233902 0.11730369 0.14579667]
[ 7.56275148e+03 1.43262240e+08 1.10767079e+06 2.84879089e+10 1.12922387e+08 1.02507341e+10]
Arthur Mikhno (8/7/2013):
The length of the descriptors exponentially increases with order. I don't recall the formula for calculating the number of descriptors from order but can look into that. For ex. order 20 yields 121 descriptors while order 35 yields 342.
Generally speaking, values should be < ~1, with values >> 1 a sign of instability in calculating descriptors. Instability could be due to the way the mesh is created or by trying to calculate at an order too high given the resolution/size of the object.
BTW. One way to tell if your descriptor values are reasonable is by reconstructing using zernike moments to see if the estimated object resembles the true object. I have recon. code ready if you want to give that a try.
Arno:
thank you for the explanation, arthur. i like the idea of reconstructing the mesh to see how well it estimated the moments. please do share your code for this so we may give it a try.
the surface patches i am running the code on have hundreds to thousands of vertices, and when i run the code with order 10 i get huge descriptor values. do you think that simplifying the mesh would lead to greater stability for the zernike code? is there any theoretical rationale for choosing a given order; for example, would a given mesh size demand a minimum order?