Anisotropic Gaussian Filtering for Python Module

OS: Windows 10
Slicer 4.8.1

Hi, I’m developing a python module consisting of some simple image processing. I want to implement an anisotropic 3D Gaussian filter to smooth an ultrasound sweep, but the only (already implemented) option I can is using the simpletITK and sitkUtils libraries, and these only seem to implement isotropic smoothing (same sigma in all 3 dimensions using sitk.SmoothRecursiveGaussian()). Is there an alternative function?

Side question, what are the units of sigma are for SmoothRecrusiveGaussian()? Are these mm or pixels? Thanks!

Anisotropic noise filters typically adjust smoothing factor depending on image content (e.g., smoothing is applied within homogeneous regions but not at high-gradient areas, to preserve contours) and not just use a fixed smoothing factor along each image axis.

Since properly implemented image processing filters always operate in physical space, you can easily tune smoothing factor differently along each image axes by temporarily changing the image spacing (change the image spacing, run the smoothing filter, and revert to the original image spacing).

1 Like

Thanks. It does seem however that SimpleITK’s Gaussian smoothing filter should accept different sigmas for different axes: https://github.com/SimpleITK/SimpleITK/releases/tag/v1.1.0 but I can’t seem to make this work.

You can follow this example:

https://www.slicer.org/wiki/Documentation/Nightly/ScriptRepository#Running_an_ITK_filter_in_Python_using_SimpleITK