I have a human body point cloud taken through a Kinect (v1). Now, I want to segment the point cloud into different parts, namely hands, lower arms, upper arms, torso, upper legs, lower legs, feet and head.
Here's the method I'm currently using:
- I get the approximate skeleton from the point cloud using OpenNI
- I take those points from the point cloud that are at a distance d from the line that is the bone (obtained from OpenNI). This distance d is currently set differently for different parts, based on observations only.
The problem with the above method is that it's not very robust. The parameter d can be different for people with different body types and also this is prone to errors since at the joints, the points within the circle of radius d will lie in both the parts.
Is there a better way of segmenting the point cloud?
Edit: This is what I get from OpenNI
The blue portion is the lower arms segmented using the above algorithm.
getLimb()
method that gives me one particular bone corresponding to a limb $\endgroup$ – Ranveer Jan 15 '16 at 11:23