I have this image:

enter image description here

What methods should I use to extract the veins from this image. Thank you.

  • 1
    $\begingroup$ Have you tried anything? $\endgroup$ – soultrane Jan 6 '16 at 16:14

I would like to direct you to 3 references:

C. Steger: “Extracting Curvilinear Structures: A Differential Geometric Approach”. In B. Buxton, R. Cipolla, eds., “Fourth European Conference on Computer Vision”, Lecture Notes in Computer Science, Volume 1064, Springer Verlag, pp. 630-641, 1996.

C. Steger: “Extraction of Curved Lines from Images”. In “13th International Conference on Pattern Recognition”, Volume II, pp. 251-255, 1996.

C. Steger: “An Unbiased Detector of Curvilinear Structures”. IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 20, no. 2, pp. 113-125, 1998.

In these works, Steger develops a subpixel curvilinear structure extraction algorithm, which is found to work very well for such images. I have also run the algorithm on your images and here you go:

Lines visualized on original image Lines visualized on original image

Lines only enter image description here

I set the line thickness to 2 for better visualization, normal contours are at sub-pixel level.


For dealing with images like this in the past, I have always had good luck using the "Vesselness" filter designed by Frangi et al. It utilizes the eigenvectors of the Hessian to determine the probability of a given pixel belonging to a vessel. The code is available on the MATLAB File Exchange and using the default parameters I was able to get the following result.

img = imread('image.jpg');
img = 1 - (img(:,:,1) ./ max(max(img(:,:,1))));
f = FrangiFilter2D(img);

enter image description here


I would use a Gabor filter or a difference of gaussians.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.