Algorithm for finding length and end points of a curly human hair
Note that once you obtain the skeleton, it is very hard to reverse back to separate the connected components that should not be connected.

The problem is that your original image contrast is too low. I would operate an open morphological operation on your raw image to remove the background, hence increase the contrast of hair.

Your raw image (reverse each pixel by 255-I):



Background ( Open operation with the 20*20 all ones kernel, in order to remove the dark regions, along with the small, thin bright regions, only keep the large bright regions, which are viewed as the noisy background):



Subtract the background from the raw image, and binarize the output, you have:



Next I would do a dilation with the kernel: 

[0 0 1;...
 0 1 0;...
 1 0 0]


Remove the small isolated object, you have:



Finally you extract the skeleton:



Looks better than your result.

The most important step is the binarization part. The better you can obtain after thresholding, the easier you will implement the skeleton extraction. And the contrast enhancement is the key operation during binarization process.