Reviews
Hauke Heibel
Monday 8 October 2007
Summary:
The paper describes a generalization of the vesselness measure introduced by Frangi which holds for multi-dimensional objects. The author introduces a closed form solution for the computation of N-dimensional objectness.
The idea to apply the vesselness measure to other structures (noise, plate-like, tubular, blob-like) has already been proposed by Frangi et al. (Multiscale vessel enhancement filtering, Table 1) but the generalized mathematical formulation is to my best knowledge new.
The author offers a well designed and implemented class to compute a general objectiveness measure as well as a class to compute the objectiveness on multiple scales.
Hypothesis:
"Non Applicable".
Evidence:
The author provides examples for two and three dimensional image data as well as objects of the first two dimensions (blobs, vessels). Furthermore evidence can be found in the mathematical derivation of the general objectiveness measure.
Open Science:
The paper and its addendums fully adhere to the concept of Open Science. The authors provide the test data, all parameters and sample programs being fully functional.
Reproducibility:
I did not reproduce the data though I used the author's classes and applied them to my own datasets which was working as expected.
Use of Open Source Software:
The authors used ITK and thus used Open Source Software. Their implementation is not depending on any additional third party libraries and can be used out of the box within the ITK framework.
Open Source Contributions:
The code is completely available. It was possible to setup a working and running project in about 10 minutes.
Code Quality:
The source code quality is high. No obviously non-portable mechanisms have been used the code is well documented.
Applicability to other problems:
n/a
Suggestions for future work:
Probably some users might be interested in equidistant sigma steps. I would love to see this as an option in a future implementation. I am not yet sure whether something like this should be implemented in terms of an additional template parameter of in terms of an enum and setter and getter methods to switch between different methods.
Requests for additional information from authors:
n/a
Additional Comments:
It took me a moment to get the difference between examples A and C, since I was assuming that objectness M=1 is actually vesselness...
I am not yet fully familiar with the ITK coding guidelines but I think using constructor initialization lists might be preferred to initialization of member variables within the constructors body.
The m_UpdateBuffer should be reset at each call to generate data, e.g. to itk::NumericTraits::NonpositiveMin().
The second output, i.e. the scales output should be reset at each call to generate data, e.g. to 0.
Besides those small remarks a nice work!