I fiddled around a bit with the image you provided. First of all: image quality suffers greatly from (i) bad imaging conditions, especially image blur resulting from not pressing the leaf evenly onto the scanner, and (ii) the JPEG compression artifacts.
Initially we cut out the interesting part of the image
leaf = ImageTake[ImageRotate[Import["http://i.stack.imgur.com/cnvC4.jpg"], \[Pi]/2], {50,620}, {10, 1120}]

and convert it to grayscale
leafg = ColorConvert[leaf, "Grayscale"]

then we sharpen it to get more detail in the heavily blurred image areas (this is a sledge-hammer approach).
leafs = Sharpen[leafg, 20]

In order to get the mask for eliminating the edge of the leaf from the image we binarize the image, clear the image of small components and dilate the mask inwardly.
mask = Dilation[DeleteSmallComponents[Binarize[leafg], Method -> "Cluster"], 10]

Now we have a choice: are we interested in the major ribs and secondary veins (A) or do we want to get all possible veins (B).
(A):
To get major ribs and secondary veins only we apply a ridge filter with a width of 3 pixels
rfp = ImageAdjust[RidgeFilter[leafs, 3]]

and binarize the resulting image.
rf = Binarize[rfp, FindThreshold[rfp, Method -> "Mean"]]

Then we skeletonize the segmentation
skelimg1 = Thinning[rf]

and remove the edge of the leaf using our generated mask.
res1 = ImageSubtract[skelimg1, mask]

This is the result of (A):
ImageAdd[leaf, res1]

(B):
To get all veins we apply a ridge filter with a width of 1.5 pixels
rf1p = ImageAdjust[RidgeFilter[leafs, 1.5]]

and binarize the resulting image.
rf1 = Binarize[rf1p, FindThreshold[rf1p, Method -> "Mean"]]

As one can see there are some areas in the middle of the stem that were not segmented correctly. These artifacts are the result of the ridge filter operation: 1.5 pixels are suitable for the enhancement of fine veins but do not work for thick ribs. Thinning of this segmentation would produce loops on the stem. To counter this effect we generate a second segmentation with a ridge filter of width 3.5 (the threshold requires some manual adaption because of the bad image quality)
rf2 = Binarize[ImageAdjust[RidgeFilter[leafs, 3.5]], 0.17]

and add the two images. As we see, the blurred areas cannot be properly segmented.
ridgeimg = ImageAdd[rf1, rf2]

Then we skeletonize the segmentation
skelimg2 = Thinning[ridgeimg]

and remove the edge of the leaf using our generated mask.
res2 = ImageSubtract[skelimg2, mask]

This is the result of (B):
ImageAdd[leaf, res2]

For analysis you should remove all separate components to get the true connected skeleton. And, of course, please do optimize the imaging conditions ;).
RidgeFilter
followed byBinarize
and played with the thresholds). Yours is more accurate than mine. $\endgroup$