
Anisotropic Diffusion in ITK
Please use this identifier to cite or link to this publication: http://hdl.handle.net/10380/3505 |
Published in The Insight Journal - 2014 January-December.
Submitted by Jean-marie Mirebeau on 12-17-2014.
Anisotropic Non-Linear Diffusion is a powerful image processing technique, which allows to simultaneously remove the noise and enhance sharp features in two or three dimensional images. Anisotropic Diffusion is understood here in the sense of Weickert, meaning that diffusion tensors are anisotropic and reflect the local orientation of image features. This is in contrast with the non-linear diffusion filter of Perona and Malik, which only involves scalar diffusion coefficients, in other words isotropic diffusion tensors.
In this paper, we present an anisotropic non-linear diffusion technique we implemented in ITK. This technique is based on a recent adaptive scheme making the diffusion stable and requiring limited numerical resources.
In this paper, we present an anisotropic non-linear diffusion technique we implemented in ITK. This technique is based on a recent adaptive scheme making the diffusion stable and requiring limited numerical resources.
Code
Reviews
Quick Comments
Comment by Matthew Mccormick
This work is available in ITK 4.9 by enabling the CMake configuration option Module_AnisotropicDiffusionLBR. It can also be executed and reproduced in the browser here:
https://insightsoftwareconsortium.github.io/ITKAnisotropicDiffusionLBR/

This work is available in ITK 4.9 by enabling the CMake configuration option Module_AnisotropicDiffusionLBR. It can also be executed and reproduced in the browser here:
https://insightsoftwareconsortium.github.io/ITKAnisotropicDiffusionLBR/
Comment by Jean-marie Mirebeau
Important notice :
The ITK team (specifically Matthew McCormick) has been kind enough to include the code accompanying this publication as an ITK REMOTE MODULE. A number of compilation issues affecting various platforms have been solved in the process.
Readers are thus encouraged to use the REMOTE MODULE version (more portable and updated) instead of the original version available on this page.

Important notice :
The ITK team (specifically Matthew McCormick) has been kind enough to include the code accompanying this publication as an ITK REMOTE MODULE. A number of compilation issues affecting various platforms have been solved in the process.
Readers are thus encouraged to use the REMOTE MODULE version (more portable and updated) instead of the original version available on this page.
Comment by Jean-marie Mirebeau
Important notice :
The ITK team (specifically Matthew McCormick) has been kind enough to include the code accompanying this publication as an ITK REMOTE MODULE. A number of compilation issues affecting various platforms have been solved in the process.
Readers are thus encouraged to use the REMOTE MODULE version (more portable and updated) instead of the original version available on this page.

Important notice :
The ITK team (specifically Matthew McCormick) has been kind enough to include the code accompanying this publication as an ITK REMOTE MODULE. A number of compilation issues affecting various platforms have been solved in the process.
Readers are thus encouraged to use the REMOTE MODULE version (more portable and updated) instead of the original version available on this page.
Comment by Wei Liu
I could not compile the module too. I copied the unzipped module folder into the Modules/External directory of ITK 4.8 and turn on the module in ccmake. I got the following error:
============== begin log =================
41%] Building CXX object Modules/External/AnisotropicDiffusionLBR/src/CMakeFiles/ITKAnisotropicDiffusionLBR.dir/CoherenceEnhancingDiffusion.cxx.o
In file included from /home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.h:89
from /home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/AnisotropicDiffusionLBRImageFilter.h:13
from /home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/CoherenceEnhancingDiffusionFilter.h:12
from /home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/CoherenceEnhancingDiffusionCommandLine.h:14
from /home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/CoherenceEnhancingDiffusion.cxx:3:
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:29: error: 'Self' has not been declared
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx: In member function 'void itk::StructureTensorImageFilterTImage TTensorImage::IntermediateFilterDummy true::operator()(int*)':
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:30: error: 'ImageType' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:30: error: 'CovariantImageType' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:30: error: template argument 1 is invalid
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:30: error: template argument 2 is invalid
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:30: error: invalid type in declaration before ';' token
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:31: error: 'GradientFilterType' is not a class or namespace
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:31: error: expected '(' before 'gradientFilter'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:31: error: expected ';' before 'gradientFilter'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:32: error: 'gradientFilter' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:32: error: request for member 'GetInput' in 'self-' which is of non-class type 'int'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:33: error: request for member 'm_NoiseScale' in 'self-' which is of non-class type 'int'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:35: error: 'CovariantImageType' cannot appear in a constant-expression
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:35: error: 'TensorImageType' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:36: error: 'OuterFunctor' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:36: error: template argument 1 is invalid
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:36: error: template argument 2 is invalid
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:36: error: template argument 3 is invalid
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:36: error: invalid type in declaration before ';' token
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:37: error: 'OuterFilterType' is not a class or namespace
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:37: error: expected '(' before 'outerFilter'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:37: error: expected ';' before 'outerFilter'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:38: error: 'outerFilter' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:41: error: request for member 'intermediateResult' in 'self-' which is of non-class type 'int'
============ end of log ====================
I used gcc 4.4.7 on centos. ITK build OK before I added this module.
Any insights? The module looks very promising.

I could not compile the module too. I copied the unzipped module folder into the Modules/External directory of ITK 4.8 and turn on the module in ccmake. I got the following error:
============== begin log =================
41%] Building CXX object Modules/External/AnisotropicDiffusionLBR/src/CMakeFiles/ITKAnisotropicDiffusionLBR.dir/CoherenceEnhancingDiffusion.cxx.o
In file included from /home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.h:89
from /home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/AnisotropicDiffusionLBRImageFilter.h:13
from /home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/CoherenceEnhancingDiffusionFilter.h:12
from /home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/CoherenceEnhancingDiffusionCommandLine.h:14
from /home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/CoherenceEnhancingDiffusion.cxx:3:
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:29: error: 'Self' has not been declared
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx: In member function 'void itk::StructureTensorImageFilterTImage TTensorImage::IntermediateFilterDummy true::operator()(int*)':
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:30: error: 'ImageType' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:30: error: 'CovariantImageType' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:30: error: template argument 1 is invalid
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:30: error: template argument 2 is invalid
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:30: error: invalid type in declaration before ';' token
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:31: error: 'GradientFilterType' is not a class or namespace
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:31: error: expected '(' before 'gradientFilter'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:31: error: expected ';' before 'gradientFilter'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:32: error: 'gradientFilter' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:32: error: request for member 'GetInput' in 'self-' which is of non-class type 'int'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:33: error: request for member 'm_NoiseScale' in 'self-' which is of non-class type 'int'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:35: error: 'CovariantImageType' cannot appear in a constant-expression
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:35: error: 'TensorImageType' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:36: error: 'OuterFunctor' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:36: error: template argument 1 is invalid
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:36: error: template argument 2 is invalid
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:36: error: template argument 3 is invalid
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:36: error: invalid type in declaration before ';' token
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:37: error: 'OuterFilterType' is not a class or namespace
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:37: error: expected '(' before 'outerFilter'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:37: error: expected ';' before 'outerFilter'
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:38: error: 'outerFilter' was not declared in this scope
/home/wliu8/apps/InsightToolkit-4.8.0/Modules/External/AnisotropicDiffusionLBR/src/Headers/StructureTensorImageFilter.hxx:41: error: request for member 'intermediateResult' in 'self-' which is of non-class type 'int'
============ end of log ====================
I used gcc 4.4.7 on centos. ITK build OK before I added this module.
Any insights? The module looks very promising.
Comment by Jean-marie Mirebeau
I use a mac with ITK 4.6.1
g++ -v yields
Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.3.0

I use a mac with ITK 4.6.1
g++ -v yields
Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.3.0
Comment by Rafael Namias
I could not compile the module. Which version of g++ is needed for compilation?

I could not compile the module. Which version of g++ is needed for compilation?
Resources
![]() |
|
Download All | |
Download Paper , View Paper | |
Download Source code |
Statistics more
![]() |
|
Global rating: | ![]() ![]() ![]() ![]() ![]() |
Review rating: | ![]() ![]() ![]() ![]() ![]() |
Code rating: | |
Paper Quality: |
![]() ![]() |
7 comments |
Information more
![]() |
|
Categories: | Anisotropic blurring filters, Filtering |
Keywords: | Anisotropic Diffusion, Denoising |
Tracking Number: | ANR grant NS-LBR, ANR-13-JS01-0003-01 |
Toolkits: | ITK, CMake |
Export citation: |
Share
![]() |
Linked Publications more
![]() |
||
![]() by Mirebeau J.
|
||
![]() by Dowson N., Baker C., Raffelt D., Smith J., Thomas P., Salvado O., Rose S.
|
View license
Loading license...
Send a message to the author

This work is available in ITK 4.9 by enabling the CMake configuration option Module_AnisotropicDiffusionLBR. It can also be executed and reproduced in the browser here:
https://insightsoftwareconsortium.github.io/ITKAnisotropicDiffusionLBR/