Hi everybody!
Sorry for my bad English.
I am curious to know CloudCompare's registration and mesh distance computations methods because I am unable to get perfect results.
Actually I am comparing three meshes in CloudCompare with ground truth and which seems to be best by eye, CloudCompare is finding more standard deviation and distance for that mesh with respect to ground truth. For testing purpose I generated one grid in MeshLab and compared it with itself in CloudCompare but it is still finding some standard deviation and mean distance. Below is the result of mesh to mesh comparison by CloudCompare.
[ComputeDistances] Mean distance = 0.000001 / std deviation = 0.000003
mesh to mesh compare
Re: mesh to mesh compare
This is clearly due to numerical computation and/or storage accuracy.
When storing numbers in the memory, or performing arithmetic operations on them, you always have en up with some numerical errors. As we use 32 bits floating point values in CloudCompare (and not 64 bits - to save up a lot of memory), this error is around 1.0e-7 or 1.0e-8 times the point coordinates amplitude. Which means that for a 1 m. wide object with coordinates expressed in millimeters, you shouldn't expect a numerical accuracy better than 1.0e-4 or 1.0-e5.
And this 'problem' may already be present in the file you used to store the entity (some formats use 32 bits, others use 64 bits, and text files can use any number of digits).
But all in all, let's remember that we work with scanners that have a much higher noise / inaccuracy ;).
When storing numbers in the memory, or performing arithmetic operations on them, you always have en up with some numerical errors. As we use 32 bits floating point values in CloudCompare (and not 64 bits - to save up a lot of memory), this error is around 1.0e-7 or 1.0e-8 times the point coordinates amplitude. Which means that for a 1 m. wide object with coordinates expressed in millimeters, you shouldn't expect a numerical accuracy better than 1.0e-4 or 1.0-e5.
And this 'problem' may already be present in the file you used to store the entity (some formats use 32 bits, others use 64 bits, and text files can use any number of digits).
But all in all, let's remember that we work with scanners that have a much higher noise / inaccuracy ;).
Daniel, CloudCompare admin
Re: mesh to mesh compare
Thanks for your reply.
Edited: Yes the scanned data has larger error ratio but in my case for my project I am comparing my object's mesh scanned with CAD model to show the accuracy of the method. When I register mesh model with ground truth (CAD model), they didn't align perfectly so I believe that the results given by CloudCompare are not good enough.
I am facing another problem. I generated two grids of same dimensions and number of vertices and when I registered them in CloudCompare, it does not register them perfectly and kept them at same position where I left. When I open the meshes, they are aligned already but for the test purpose I misaligned them and try to register in CloudCompare but it does not align them after registration. Although both meshes are perfectly similar then why they do not align after registration. As per my knowledge if I am not wrong about CloudCompare, we can't find mean distance and standard deviation correctly until both meshes are perfectly aligned.
Edited: Yes the scanned data has larger error ratio but in my case for my project I am comparing my object's mesh scanned with CAD model to show the accuracy of the method. When I register mesh model with ground truth (CAD model), they didn't align perfectly so I believe that the results given by CloudCompare are not good enough.
I am facing another problem. I generated two grids of same dimensions and number of vertices and when I registered them in CloudCompare, it does not register them perfectly and kept them at same position where I left. When I open the meshes, they are aligned already but for the test purpose I misaligned them and try to register in CloudCompare but it does not align them after registration. Although both meshes are perfectly similar then why they do not align after registration. As per my knowledge if I am not wrong about CloudCompare, we can't find mean distance and standard deviation correctly until both meshes are perfectly aligned.
Re: mesh to mesh compare
If you want to reduce the numerical error (which is already below 10^-5 ;), you can compile CC to work with 64 bits floating point values. This will probably reduce it to something below 1.0e-9. But numerical accuracy is inherent to standard arithmetic performed by a computer. And you should also realize that most other softwares simply display measurements in millimeters or microns and simply round off this error...
And for your registration issue, what does your 'grid' look like? And how much do you perturb the initial position? Mind that ICP is meant to register shapes that are already roughly registered (i.e. not too far from their final position, otherwise it will be stuck in local minimas), and not too flat (it needs some 'topography' to lock the step by step movement of the aligned cloud). To register flat / smooth shapes, you are bound to use the point-pair based alignment tool.
And for your registration issue, what does your 'grid' look like? And how much do you perturb the initial position? Mind that ICP is meant to register shapes that are already roughly registered (i.e. not too far from their final position, otherwise it will be stuck in local minimas), and not too flat (it needs some 'topography' to lock the step by step movement of the aligned cloud). To register flat / smooth shapes, you are bound to use the point-pair based alignment tool.
Daniel, CloudCompare admin