I have to pass on the finding intersections part, but in order to get a binary image, your first step should be the following:
Treshold the image. This should work fine, if the contrast is always as high as in the example. Alternatively try edge detection.
As for finding lines that fit the veins I have a vague idea. Let me try to put it in words:
- Try to find an area of high density in the binary image and determine the center [x1,y1].
- Define a line with one fixed point in the center of this area f(x-x1) = m*x + y1
- Rotate the line by varying m and optimize for a maximum correlation between the binary image of the line and the binary image of the veins
- When you found the maximum of the correlation, cut the section of the line, that actually overlaps with a vein
- Repeat with the next center of high density
This might/should give you a bunch of parametrically defined lines where you can easily determine the intersections and angles.