Ranking Orientation Responses of Path Openings

View project onGitHub

Welcome to RORPO Pages.

Thin objects in 3D volumes, for instance vascular networks in medical imaging or various kinds of fibres in materials science, have been of interest for some time to computer vision. Particularly, tubular objects are everywhere elongated in one principal direction – which varies spatially – and are thin in the other two perpendicular directions. Filters for detecting such structures use for instance an analysis of the three principal directions of the Hessian, which is a local feature. RORPO is a low-level tubular structure detection filter. This filter relies on paths, which are semi-global features that avoid any blurring effect induced by scale-space convolution. More precisely, our filter is based on recently developed morphological path operators.

The theory for the RORPO filters, together with validation experiments, has been published at ECCV 2014.The paper is avaliable on the HAL repository.


We provide the libRORPO library containing:

  • A function computing the Path Opening with one orientation (PO_3D)
  • A function computing the Robust Path Opening in all orientations (Get_RPO_Orientations)
  • A function computing the Ranking Orientations Responses of Path Operators (RORPO)
  • A function computing the multiscale Ranking Orientations Responses of Path Operators (RORPO_multiscale)
Compiling the library can be done using Cmake. A CMakeLists is provided and a change of the LIBRARY_OUTPUT_PATH is needed to your own directory.

In the RORPO_multiscale_Usage directory, you can find the full RORPO_multiscale function used in the ECCV paper.

  • Compile the libRORPO
  • Compile the function with the CMakeLists in the RORPO_multiscale_Usage directory. You need to change the path of FIND_LIBRARY to the one where you compiled libRORPO and include_directories to the one where the header libRORPO are.
  • VTK version 6 or greater is needed
  • Niftilib (provided) is needed
  • Accepted type : int8, uint8, int16, uint16, int32, uint32, float
  • An isotropic image resolution is required (cubic voxels).
The arguments of the function are as follows :

Parameters : 
: path to .nii image (string).
: path to write the resulting image (string).
: Minimum path length (int)
: factor for the geometric sequence of scales; scale_(n+1) = factor * scale_(n) (float)
: Number of scales (int)

--window:     Intensity range from the input image (2 int: window_min, window_max)
		      Convert input image to uint8. Intensities inferior to window_min become 0, intensities superior to window_max become 255; Linear transformation between window_min and window_max
--core:       Number of CPUs used for RPO computation (int)
--mask or :   Path to a mask image (0 for the background and 1 for the foreground). RORPO will only be computed in this mask. The mask image type must be uint8.
--verbose:    Activation of a verbose mode.

Usage Example : ./RORPO_multiscale_usage input.nii output.nii 40 1.32 4 
Usage Example : ./RORPO_multiscale_usage input.nii output.nii 40 1.32 4 --window 0,255 --verbose --core 4

Test Images

The synthetic image of the article (plan_spiral_blob_short_5_5_0.9.nii) is also provided to quickly test the filtering. Moreover, we provide the RORPO filtering result using the same set of parameters as in the article.

$ cd your_repo_root/repo_name
$ git fetch origin
$ git checkout gh-pages

Authors and Contributors

This project is maintained by Odyssée Merveille (@odyssee-merveille), Hugues Talbot (@hugues-talbot), Laurent Najman (@lnajman), and Nicolas Passat.