Abstract
Kernel based filtering is one of the fundamental tools of image analysis and processing. A number of approaches have been developed over the years that allow efficient implementation of such filters even when the kernel size is large. This article reviews some of these methods and introduces their ITK implementations.
Keywords
Source Code and Data
No source code files available for this publication.
Reviews
Dan Mueller
Wednesday 18 July 2007
Summary:
This paper presents a set of ITK classes for efficient kernel-based filters. The authors provide source-code and results for various mechanisms including: separable filters, histogram-based kernels, and decomposition of morphological structuring elements. The results indicate the newly-implemented methods are faster than the basic approaches currently implemented in ITK (with some constraints, as discussed in the paper).
Hypothesis:
The efficient implementations are faster (with some constraints) than the existing ITK implementations.
Evidence:
Section 7 of the paper displays graphs of different algorithm performance and the Appendix lists the results in tabular format. The code used to generate the graphs and text file output is provided with the article.
Open Science:
The authors provide the input images, source code, and results used in their experiments.
Reproducibility:
I have downloaded, compiled, and run parts of the work. I did not run the performance analysis code, but I have used some of the filters in my own application (mostly the morphological filters) and anecdotal evidence suggest the speed-ups are valid.
I did have some trouble compiling the code: the compiler I used (Microsoft Visual Studio 8.0.50727.762) complained about an ambiguous call to overloaded function 'pow' in itkFlatStructuringElement. This was fixed by casting the base to double, eg.
unsigned int facets = 8 * (int)pow((double)4, iterations);
Use of Open Source Software:
The work extends ITK.
Open Source Contributions:
The full source-code is provided.
Code Quality:
The code quality is good and matches ITK standards. However, some of the documentation needs further work:
- The \\\\brief for itkSeparableImageFilter could be improved, eg. "A filter for performing kernel operations using decomposition" instead of "A separable filter for filter which are using kernel", similar for itkSeparableRadiusImageFilter
- itkAnchorCloseImageFilter and itkAnchorOpenImageFilter classes have no documentation
- The documentation for the static constructors in itkFlatStructuringElement need work before integration into the toolkit, these methods are important and should be well documented for users
- The documentation in itkMovingHistogramDilateImageFilter and itkMovingHistogramErodeImageFilter erronously refers to MorphologicalGradient
On the plus side, the documentation for itkMovingHistogramImageFilter (and others) is excellent!
I dislike the static const int declarations of the algorithm type, mainly because it is declared 4 separate times: itkGrayscaleMorphologicalOpeningImageFilter, itkGrayscaleMorphologicalClosingImageFilter, itkGrayscaleDilateImageFilter, and itkGrayscaleErodeImageFilter. Can the algorithm type be declared once in a header file? Also, ITK seems to favour enum types (see: itkRegularStepGradientDescentBaseOptimizer), should it be an enum?
I also stumbled across a bug / problem with itkSeparableImageFilter.txx: the output is not correctly grafted. The following line needs to be added above the update for the last filter:
m_Filters[TInputImage::ImageDimension - 1]->GraftOutput( this->GetOutput() );
Applicability to other problems:
The work is applicable to a wide of range of image processing problems, not only in the medical domain.
Suggestions for future work:
- Addition of the Annulus operator (see attachment) and Cross operator to itkFlatStructuringElement
- The itkSeparableImageFilter and itkMaskedSeparableImageFilter classes were of particular interest to me, but I was disappointed to find no morphological operations utilising these (at least that I could find) and no comparisons of speeds for Box structuring elements of basic, histogram, anchor, and separable approaches. I have implemented separable dilation and erosion using the basic approach (see attachment). A moving histogram approach could also be implemented. Perhaps these classes can be added in the darcs repository / toolkit?
Overall:
A comprehensive article which discusses a number of very useful filters (many of which I have already started using). Thanks!
Kevin Cleary
Tuesday 11 September 2007
Summary:
This paper reviews background theory for a number of approaches to kernel based filtering, which are all well established in the literature. They can significantly reduce complexity and execution time. The authors implemented them in ITK and evaluated their performance.
Hypothesis:
Non Applicable
Evidence:This paper reviews the published approaches and introduces their implementation in ITK. It has no new idea. However, it shows how efficient the implemented algorithms are by presenting the measured execution time with an increasing kernel size.
Open Science:Yes, they provide the source code and the images through a web site.Yes, they provide enough details.The code is written as a part of ITK.
Reproducibility:No I did not reproduce the work.
Use of Open Source Software:Yes, they did. Their code itself is a part of ITK.No, they don’t describe them.Yes, they provide advice. They tell us that availablity of filtering algorithm can make much simpler approaches to many problems practical.
Open Source Contributions:
Yes, they provide the source code through a web site.
Requests for additional information from authors:
Table captions are a little confusing. More details are necessary.
Additional Comments:
In addition to the answers to the above questions, it might be useful to the reader if a coarse-to-fine review was provided that starts with (a) the overall recommendation of the reviewer to the community (e.g., “Download this!” or “Has great potential, but needs some additional work” or “Work is interesting, but not (yet?) appropriate for the open-source community for the following general reasons...”), (b) General comments on the technology involved, (c) General comments on the contribution (introduction, background, method description, evaluations, followed by (d) Detailed comments on the contribution (grammar, spelling, data formats).
(a) I recommend to download this to the community.
(b) None
(c) The authors implemented the efficient kernel filtering algorithms in ITK. Even though the algorithms are already published and not new, the implementation in ITK may be helpful for other image processing projects.
(d) Some grammatical mistakes
i) Page 8: The filters discusses in this article à The filters discussed in this article
ii) Caption of figure 7 : with and increasing number fo threads à with increasing number of threads
iii) Caption of figure 9 : for and increasing à for increasing
iv) Table 10 : size à thread
This review was written by Min Cho and submitted by Kevin Cleary.
