View License

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Highlights from
Optimally Oriented Flux (OOF) for 3D Curvilinear Structure Detection

5.0 | 2 ratings Rate this file 11 Downloads (last 30 days) File Size: 6.75 KB File ID: #41612 Version: 1.4

Optimally Oriented Flux (OOF) for 3D Curvilinear Structure Detection



03 May 2013 (Updated )

Optimally Oriented Flux curvilinear structure descriptor

| Watch this File

File Information

Compute the analytical 3D multi-radii optimally oriented flux responses for curvilinear structure analysis. Implementation based on,

[1] M.W.K. Law and A.C.S. Chung, ``Three Dimensional Curvilinear Structure Detection using Optimally Oriented Flux'', ECCV 2008, pp. 368--382.
[2] M.W.K. Law et al., ``Dilated Divergence based Scale-Space Representation for Curve Analysis'', ECCV 2012, pp. 557--571.
  outputresponse = oof3response(image, radii, opts);
  outputresponse: The final output response. 3D matrix.
  image: The original image. (3D matrix)
  radii: A vector containing all interested radii for computation of OOF. (N-D vector)
  opts: A matlab struct. It contains 4 fields to specify 4 optional settings of OOF. If opts or any of these fields of opts is missing, default values are used. (Optional, struct)
  opts.spacing: Voxel size of the input image. The pixel spacing can be isotropic or anisotropic. (default value = 1; Scalar, if voxels are isotropic; 3D vector, [x-length,y-length, z-length] if voxels zre anisotropic).
  opts.sigma: For the image smoothing for the computation of OOF derivatives. (Scalar, default value = min(opts.spacing))
  opts.useabsolute: Use the absolute value to sort the eigenvalues.
  opts.useabsolute=1: Use the absolute value;
  opts.useabsolute=(any other value): Use the original value;
  opts.responsetype: There are six different responses implemented. This input specifies the output response type. Scalar, [0..5], default value = 0). At each detection radius, the response is:
  opts.responsetype=0: l1; (default)
  opts.responsetype=1: l1+l2;
  opts.responsetype=2: sqrt(max(0, l1.*l2));
  opts.responsetype=3: sqrt(max(0, l1) .*max(0, l2));
  opts.responsetype=4: max(0, l1);
  opts.responsetype=5: max(0, l1+l2).
  Here l1 and l2 are the largest and the middle eigenvalues of OOF tensor. See opts.useabsolute about their order. The final response "outputresponse" is the maximum magnitude across radii of one of the above response.
  opts.normalizationtype: There are four different schemes to normalize the responses across radii:
  opts.normalizationtype=0: The surface-area based normalization in [1]. It is also identical to the normalization for blob-like structures in [2].
  opts.normalizationtype=1: The advanced normalization for curvilinear structure in [2]. Default and recommended.
  opts.normalizationtype=2: The advanced normalization for planar structures in [2].
  If the type of the detection target is known (blob-like, curvilinear or planar) and the smallest detection radis is larger than/equal to sigma (i.e. min(radii)>=opts.sigma), it is highly recommended to use the more advanced normalization scheme in [2]. Details can be found in Appendix of [2].

  result = oof3response(I, 1:5);
  This gives a OOF detection results for general curvilinear structure detection. A highly recommended setting for subsequent centerline extraction and segmentation.
  Return the result computed using the radii {1,2,3,4,5} on image I. The returned responses are very suitable to be zero-thresholded, followed by connectivity analysis to get a segmentation result. It is also helpful to serve as a speed field for level-set evolution, see more details in Max W. K. Law and Albert C. S. Chung, ``An Oriented Flux Symmetry based Active Contour Model for Three Dimensional Vessel Segmentation'', ECCV 2010, pp. 720--734.

  clear opts; opts.spacing=0.4;
  result = oof3response(I, 0.4:0.4:2.8, opts);
  Return the result computed from the radii (0.4mm,0.8mm,1.2mm,1.6mm,2mm,2.4mm,2.8mm}, where the each pixel is 0.4mmx0.4mmx0.4mm and sigma is 0.4mm.

  clear opts; opts.spacing=[0.4, 0.4, 1];
  result = oof3response(I, 0.4:0.4:4, opts);
  Return the result computed from the raddi {0.4mm...4mm}, where each pixel has a size of 0.4mm x 0.4mm x 1mm (w x l x h).

  clear opts; opts.useabsolute=0; opts.responsetype=1; opts.normalizationtype=0;
  result = oof3response(I, 1:10, opts);
  Return the result S^Q_x as used in Section 3.1 in [1].

  clear opts; opts.useabsolute=0; opts.responsetype=3; opts.normalizationtype=0;
  result = oof3response(I, 1:10, opts);
  Return the result S^Q_x as used in Section 3.2 in [1].

See more details in the header of this contribution.

 Author: Max W.K. Law

Required Products MATLAB
MATLAB release MATLAB 8.0 (R2012b)
Other requirements Cuda (distributed computing toolbox)/Jacket are required for GPU computation
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (3)
24 Oct 2016 Julien Smets

Thanks for this great work. I just have to mention an error at line 150.

etype = options.useabosolute;

I guess it is :

etype = options.useabsolute;

Comment only
24 Oct 2016 Julien Smets

26 Nov 2013 Sarun

Sarun (view profile)

Works great.

03 May 2013 1.1

Updated info.

06 May 2013 1.2

Updated info.

08 May 2013 1.3

Improve computation efficiency and numerical stability

31 Oct 2013 1.4

Re-upload the missing file "eigenvaluefield33"

Contact us