Filter to enhance the vessel and restore connectivity

I was trying to implement Frangi filter for the angiography and there was a problem of connectivity at the junctions.I tried looking into one of the paper where they had implemented vesselfilter ?Is there another filter for vesselness to restore the connectivity at junctions?

Actually ,I had got an idea of overlapping the raw data and adding it to the frangi filtered image and adding both the images. It look something like this .But still i have problem at the connectivity.Could you please suggest me in this regard to solve the problem of connectivity at junctions.I would be very glad.

Hi @mounika_rapolu,

In ImageJ, there are at least two additional filament enhancement methods. Sato et al. 'Tubeness’ and Law & Chung Optimally Oriented Flux. If you take a look at their principle, Tubeness is similar to Frangi in the sense that it uses multi-scale eigenvalues of the Hessian matrix and use heuristic parameters to detect more specific kinds of structures, filament-like structures, and that is the reason it fails in enhancing branches/connections between those filaments. On the other hand, OOF is a more general curvilinear structure detector.

The details specific to the ImageJ implementations are here:

1. Tubeness
2. OOF

Unfortunately, I have tried using OOF myself and the implementation doesn’t appear to be working (see thread I posted). I would be glad if you try using on your computer (and saying our OS) to check if the problem also happens with you.

I am not sure of an ImageJ implementation but I know of a filament enhancement method that uses the concept of Phase congruency tensor (PCT) to fix the issue of not detecting branches/coneections in filament-like structures. This is the work proposed by Obara and collaborators (2012), another work of the same method is here. Their implementation is in Matlab.

Additional comments,

  • Is your image 2D or 3D?
  • Have you considered using filament tracing methods that do not necessarily use a filament enhancement method prior to detection? For example, the first choice of the Simple Neurite Tracer or Anamorf (2D images only). Also ridge detection could be useful depending on what you are looking for in your images.
  • If you wish to continue using Frangi or Sato enhancement methods, maybe it would be a good idea to try to use grayscale morphology closing (link1 link2) operator, to see if you could close these branch points.

I hope this helped.


Dear @leandroscholz I thank you very much for your response.
The above Frangi filter I implementes was in MATLAB(Previous post).
Now I have tried Tubness filter in ImageJ with different sigma values (below) and the output results are :
tubeness of sigma5tubeness of sigma1
Comments of the results :slight_smile:

  1. The junctions are quite enhanced in Tubeness but it doesn’t sucessfully remove the vertical stripes(artifacts) in the image.
  2. I would like to remove these artifacts as it misinterprets the vessels and its structure.
    Unfortunately, i could not implement OOF myself and its doesn’t give output.

In response to ur additional comments :

  • Its a 2D image.
  • Simple Neurite tracer is laborious in my case as I wanted to look at ~100 angiomaps during stroke.
  • Grayscale morphology(closing) doesn’t change the image quality much

My major problem now is to remove the vertical stripes without any modification to the vessels.You could please suggest any method to fix this.

Have a good day and thanks for your valuable suggestions :grinning:

1 Like

You can use a bandpass filter to get rid of the lines: Process > FFT > Bandpass filter with vertical selected for Supress stripes.



Hii @stelfrich ,thank you very much for the suggestion.I did it already before,but the quality of the image is affected quite alot.image when compared to the above original image.
Have a good day :):grinning:


Maybe you could also try to Background subtraction? Process > Subtract Background Unfortunately, if you use it, the intensity of your filaments may as well decrease. Try using different rolling ball radii and see what is best for you. For example, start using 1, then 2 then 3… when you see that you changed the radius and the image didn`t change much, that might be a good diameter to use. Not sure if this will work for you, but I judged to be good for some images I worked with.


1 Like

Hii @leandroscholz ,
I tried the subtraction and i think its better now,but i was surprised because i could achieve same image only when i used rolling ball radii of 100(right one) :smile:
image image
Thank you :):smiley: