I'm writing a program that can detect veins(the dark lines) on an arm.

When looking at the image at full size, you can easily make out where they are.

arm veins

But when zoomed in around a vein I get something ambiguous which doesn't seem to have edges anymore.

vein patch

I've tried edge detection but it doesn't work well since the apparent 'edges' aren't actually edges when viewed close up.

Took me a while to learn all the necessary mathematics, but I've managed to write a ridge detection algorithm as suggested by Rethunk. This question helped alot.

It works quite well. enter image description here

Still needs improvement though, probably using scale space image processing as suggested by Fat32.

  • $\begingroup$ Do you have to zoom in to detect the edges? You can detect them at any scale you want. Morveover, you can perform some pre-processing operations such as brightness equalization, gray level stretch, highpass filter etc to improve the image before a usual detection. And remember, your vision and machine vision have different characteristics and capabilities. $\endgroup$
    – Fat32
    Jun 11 '16 at 10:19
  • $\begingroup$ I thought that since edge detection uses the gradient image, the rate of change of pixel intensity in a small neighborhood is what matters. So I zoomed in to examine the individual pixels. And it turned out that the gradients around the veins are not much different from gradients everywhere else. $\endgroup$
    – Quevun
    Jun 11 '16 at 12:10
  • $\begingroup$ As I said, you can process the image to improve the gradients. At least a small scale image will have a steeper gradient per pixel... $\endgroup$
    – Fat32
    Jun 11 '16 at 12:22
  • $\begingroup$ ok, so I've tried to scale down the image by repeatedly applying a gaussian filter. But after the second filter, contour-like ripples appear and the image stops getting blurrier for some reason. $\endgroup$
    – Quevun
    Jun 11 '16 at 13:31
  • $\begingroup$ by scale down, I mean a smaller image... it will be sharper and you can detect the edges in this sharper image... $\endgroup$
    – Fat32
    Jun 11 '16 at 13:40

Your Answer

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

Browse other questions tagged or ask your own question.