I'm currently working on smoothing meshes that have been reconstructed by using PCL's Poisson reconstruction. I've run in some problems that are connected to the distance, or lack there of, between vertices. I've been fiddling around with the different parameter's and I've been able to mitigate the issue by changing the degree parameter.
My question is simple, what does it do?
I've searched the documentation, read the paper by Kazhdan, searched the mailing list and the internets, and even looked through the source code, but I've been unable to figure out what it does.
I'm looking for documentation on the other parameters as well as any pointers on how to easily collapse vertices that are in close proximity.
Probably not the most scientific explanation, but when I ported the code from Misha, I wrote getter/setter functions for all the parameters he had in his program. If you look into his original code, he does not explain what the degree does, and he does not expose it to the command line. I would say it's probably unimportant, and you should leave it at its default value.
> I'm currently working on smoothing meshes that have been reconstructed by
> using PCL's Poisson reconstruction. I've run in some problems that are
> connected to the distance, or lack there of, between vertices. I've been
> fiddling around with the different parameter's and I've been able to
> mitigate the issue by changing the degree parameter.
> My question is simple, what does it do?
> I've searched the documentation, read the paper by Kazhdan, searched the
> mailing list and the internets, and even looked through the source code, but
> I've been unable to figure out what it does.
> I'm looking for documentation on the other parameters as well as any
> pointers on how to easily collapse vertices that are in close proximity.
> Thanks in advance!
> View this message in context: http://www.pcl-users.org/On-Poisson-reconstruction-and-it-s-parameters-tp4027229.html > Sent from the Point Cloud Library (PCL) Users mailing list mailing list archive at Nabble.com.
> [hidden email] / http://pointclouds.org > http://pointclouds.org/mailman/listinfo/pcl-users
Don't know, whether it's still interesting to you, but...
I've read Kazhdan's Poisson Reconstruction paper once, now I've skimmed it once more together with the PCL's code and I think I know answer to your question.
(the below is a bit lengthy, sorry, I'm a math major, You may skip directly to "Conclusion" part)
First, paper. Please, refer to the end of section 4.1, where the author explains which filter he's going to use. You see that the filter is going to be third convolution of box-filter with itself, hence second degree polynomial.
From this point, we see that in his code (and hence in PCL's adaptation) author is going to use some sort of polynomial algebra, since he'll have to multiply them, take integrals, derivatives and stuff. Natural choice, since polynomials are among the few function classes that can be faithfully represented in computer. Anyway, as he needs polynomials, he needs some way to store them (some data structure to work with them) and naturally, he's using the fixed-size array to represent polynomial by its coefficients. Consequently, (as array is fixed-size for efficiency) he needs to know in advance the maximal degree his polynomials may have. The size of array is precisely what Degree (or degree_) is. He's using templates to set the arrays, giving himself more flexibility. As You remember, our filters are of second degree, we shouldn't get polynomials of degree >2, and hence we set degree_=2.
Conclusion: degree_=2 is default value. Making it lower will make code untenable, consequences are unpredictable. Setting degree_ bigger than 2 shouldn't change the results even a bit, but will make space requirements a bit bigger, since we need to store bigger arrays
Disclaimer: I didn't run poisson with non-default degree, all above is just result of reading the code and paper and some theoretical reasoning. If You did run the code with other degree parameters and results are different, I'd be curious to hear from You.
Thank you for an excellent answer, which was clear and understandable even for a simple engineer ;).
I've tried setting degree_ to 1 through 6 and, while the final vertex positions are different for each value, I can honestly say that I'm only able to see visual difference when degree_ is set to 1. The result when degree_ == 1 is much less smooth, which may make sense if has to do with the polynomial degree.