All Projects → InsightSoftwareConsortium → ITKIsotropicWavelets

InsightSoftwareConsortium / ITKIsotropicWavelets

Licence: Apache-2.0 license
External Module for ITK, implementing Isotropic Wavelets and Riesz Filter for multiscale phase analysis.

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to ITKIsotropicWavelets

ITKTextureFeatures
Fast, Texture Feature Maps from N-Dimensional Images
Stars: ✭ 16 (+33.33%)
Mutual labels:  itk, itk-module
ITKWikiExamples
Scraped, buildable version of the wiki examples
Stars: ✭ 21 (+75%)
Mutual labels:  itk, itk-module
ITKUltrasound
ITK module with classes particularly useful for ultrasound.
Stars: ✭ 41 (+241.67%)
Mutual labels:  itk, itk-module
Pyramid tutorials
Tutorials for Pyramid
Stars: ✭ 81 (+575%)
Mutual labels:  pyramid
Zappa
Serverless Python
Stars: ✭ 11,859 (+98725%)
Mutual labels:  pyramid
nhwcodec
NHW : A Next-Generation Image Compression Codec
Stars: ✭ 56 (+366.67%)
Mutual labels:  wavelet
Fourier-and-Images
Fourier and Images
Stars: ✭ 81 (+575%)
Mutual labels:  signal-analysis
Ziggurat foundations
Framework agnostic set of sqlalchemy classes that make building applications that require permissions an easy task.
Stars: ✭ 67 (+458.33%)
Mutual labels:  pyramid
ITKPythonPackage
A setup script to generate ITK Python Wheels
Stars: ✭ 59 (+391.67%)
Mutual labels:  itk
mf-chsdi3
api3.geo.admin.ch source code.
Stars: ✭ 35 (+191.67%)
Mutual labels:  pyramid
ITKPOCUS
An open source library for streaming and preprocessing point-of-care ultrasound video.
Stars: ✭ 16 (+33.33%)
Mutual labels:  itk
PyTorch-Wavelet-Toolbox
Differentiable fast wavelet transforms in PyTorch with GPU support.
Stars: ✭ 117 (+875%)
Mutual labels:  wavelet
Lrf Net
Learning Rich Features at High-Speed for Single-Shot Object Detection, ICCV, 2019
Stars: ✭ 160 (+1233.33%)
Mutual labels:  pyramid
pyramid mongoengine
Mongoengine Pyramid extension
Stars: ✭ 13 (+8.33%)
Mutual labels:  pyramid
Mapchete
Tile-based geodata processing using rasterio & Fiona
Stars: ✭ 129 (+975%)
Mutual labels:  pyramid
pyramid fullauth
Pyramid fullauth's goal is to provide full plug-in registration functionality for pyramid, with user managing
Stars: ✭ 29 (+141.67%)
Mutual labels:  pyramid
Data Driven Web Apps With Pyramid And Sqlalchemy
Demos and handouts for Talk Python's Data-Driven Web Apps with Pyramid and SQLAlchemy course
Stars: ✭ 79 (+558.33%)
Mutual labels:  pyramid
Pyramid Attention Networks Pytorch
Implementation of Pyramid Attention Networks for Semantic Segmentation.
Stars: ✭ 182 (+1416.67%)
Mutual labels:  pyramid
wavelet-denoiser
A wavelet audio denoiser done in python
Stars: ✭ 29 (+141.67%)
Mutual labels:  wavelet
YANGstraight source
Analytic signal-based source information analysis for YANGstraight and real-time interactive tools
Stars: ✭ 31 (+158.33%)
Mutual labels:  wavelet

ITKIsotropicWavelets

Build Status

Overview

DOI

External Module for ITK, implementing Isotropic Wavelets and Riesz Filter for multiscale phase analysis.

This document describes the implementation of the external module ITKIsotropicWavelets, a multiresolution (MRA) analysis framework using isotropic and steerable wavelets in the frequency domain. This framework provides the backbone for state of the art filters for denoising, feature detection or phase analysis in N-dimensions. It focuses on reusability, and highly decoupled modules for easy extension and implementation of new filters, and it contains a filter for multiresolution phase analysis.

The backbone of the multi-scale analysis is provided by an isotropic band-limited wavelet pyramid, and the detection of directional features is provided by coupling the pyramid with a generalized Riesz transform.

The generalized Riesz transform of order N behaves like a smoothed version of the Nth order derivatives of the signal. Also, it is steerable: its components' impulse responses can be rotated to any spatial orientation, reducing computation time when detecting directional features.

For more information, see the Insight Journal article:

Hernandez-Cerdan P.
Isotropic and Steerable Wavelets in N Dimensions. A multiresolution analysis framework
The Insight Journal. January-December. 2016.
https://hdl.handle.net/10380/3588
https://www.insight-journal.org/browse/publication/986

Cite with:

P. Hernandez-Cerdan, “Isotropic and Steerable Wavelets in N Dimensions. A multiresolution analysis framework for ITK,” arXiv:1710.01103 [cs], Oct. 2017.

Installation

In C++:

You need to build ITK from source to use this module.

Since ITK version 4.13, this module is available as a Remote module in the ITK source code.

Build it with the CMake option: Module_IsotropicWavelet, this can be switched on with a CMake graphical interface ccmake or directly from the command line with: -DModule_IsotropicWavelet:BOOL=ON

For older ITK versions (>4.10 required if BUILD_TEST=ON), add it manually as an External or Remote module to the ITK source code.

External:

cd ${ITK_SOURCE_CODE}/Modules/External
git clone https://github.com/phcerdan/ITKIsotropicWavelets

Remote:

Or create a file in ${ITK_SOURCE_CODE}/Modules/Remote called IsotropicWavelets.remote.cmake (already there in ITK-4.13) with the content:

itk_fetch_module(IsotropicWavelets
  "IsotropicWavelets Extenal Module."
  GIT_REPOSITORY https://github.com/phcerdan/ITKIsotropicWavelets
  GIT_TAG master
  )

Python

In Python:

pip install itk-isotropicwavelets

Components

  • [x] Steerable Pyramid in the frequency domain.
  • [x] Undecimated Steerable Pyramid.
  • [x] Generalized Riesz Filter Bank of order N (smoothed derivatives)
  • [x] Steering framework (RieszRotationMatrix).
    • [NA] General case, U matrix from Chenouard, Unser.
    • [NA] Simoncelli Equiangular case.
  • [x] FrequencyBandImageFilter.
  • [x] Monogenic Signal Phase Analysis.
    • Reproduces Held work as a brightness equalizator / local phase detector.
  • [x] Simoncelli, Shannon, Held and Vow Isotropic Wavelets.
  • [x] Shrinker and Expander in spatial domain with no interpolation.
  • [x] StructureTensor.
  • [x] Simple test to every wavelet (Vow, Held, Simoncelli, Shannon), instead of relying on the implicit testing with the WaveletBankGenerator.

The work is inspired by the monogenic signal from literature, that uses wavelets and riesz filter to provide a multiscale denoise and segmentation mechanism.

The Riesz filter is a Hilbert transform for ND, that provides phase information, ie feature detection, in every dimension.

Wavelets are really important in signal analysis, they are able to perform a multiscale analysis of a signal. Similar to a windowed Fourier Transform, but with the advantage that the spatial resolution (the window) can be modulated, retaining more information from the original image.

In this implementation only isotropic wavelets are considered. These are wavelets that depend on the modulo of the frequency vector. There are not many mother isotropic wavelets developed in the literature, I implemented 4 of them here from respective papers (see specific docs for more information). The main advantage of isotropic wavelets is that they are steerable, as shown by Simoncelli, steering the wavelet at each location provides adaptability to different signal, and can be used along PCA methods to select the best matching "steer" at each location and scale.

Input to filters in this module needs to be in the dual space (frequency). For example, from the output of an forward FFT. The decision is made to avoid performing multiple FFT.

Also a FrequencyShrinker and an Expander WITHOUT any interpolation, just chopping and adding zeros have been added.

Because the layout of the frequencies after an FFT is implementation dependent (FFTW and VNL should share the same layout, but Python FFT might be different, etc.), I added an iterator to abstract this layout. It has a function GetFrequencyIndex(), that facilitates implementation of further frequency filters.

Right now this iterator has been tested with the option ITK_USES_FFTW, but should work for the default VNL.

Summary of components and files:

Frequency Iterators

itkFrequencyImageRegionConstIteratorWithIndex.h
itkFrequencyImageRegionIteratorWithIndex.h
itkFrequencyFFTLayoutImageRegionConstIteratorWithIndex.h
itkFrequencyFFTLayoutImageRegionIteratorWithIndex.h
itkFrequencyShiftedFFTLayoutImageRegionConstIteratorWithIndex.h
itkFrequencyShiftedFFTLayoutImageRegionIteratorWithIndex.h

FrequencyFunctions

Base and Derived Classes

  • itkFrequencyFunction.h
    • itkIsotropicFrequencyFunction.h
      • itkIsotropicWaveletFrequencyFunction.h itkIsotropicWaveletFrequencyFunction.hxx

Wavelets Functions (IsotropicWaveletFrequencyFunction)

itkHeldIsotropicWavelet.h
itkHeldIsotropicWavelet.hxx

itkSimoncelliIsotropicWavelet.h
itkSimoncelliIsotropicWavelet.hxx

itkShannonIsotropicWavelet.h
itkShannonIsotropicWavelet.hxx

itkVowIsotropicWavelet.h
itkVowIsotropicWavelet.hxx

Wavelets Generators (use functions to create ImageSources)

itkWaveletFrequencyFilterBankGenerator.h
itkWaveletFrequencyFilterBankGenerator.hxx

Riesz Function (FrequencyFunction)

itkRieszFrequencyFunction.h
itkRieszFrequencyFunction.hxx

Riesz Generator (use functions to create ImageSources)

itkRieszFrequencyFilterBankGenerator.h
itkRieszFrequencyFilterBankGenerator.hxx

Frequency Related Image Filters

Frequency Expand/Shrinkers

itkFrequencyExpandImageFilter.h
itkFrequencyExpandImageFilter.hxx
itkFrequencyShrinkImageFilter.h
itkFrequencyShrinkImageFilter.hxx

itkFrequencyExpandViaInverseFFTImageFilter.h
itkFrequencyExpandViaInverseFFTImageFilter.hxx
itkFrequencyShrinkViaInverseFFTImageFilter.h
itkFrequencyShrinkViaInverseFFTImageFilter.hxx

MonogenicSignal Filter (Riesz Function in all dimensions)

itkMonogenicSignalFrequencyImageFilter.h
itkMonogenicSignalFrequencyImageFilter.hxx

FrequencyBand Filter (pass or stop freq band)

itkFrequencyBandImageFilter.h
itkFrequencyBandImageFilter.hxx

Forward/Inverse Wavelet (ImageFilter, apply wavelet pyramid using generators)

Decimated

itkWaveletFrequencyForward.h
itkWaveletFrequencyForward.hxx

itkWaveletFrequencyInverse.h
itkWaveletFrequencyInverse.hxx

Undecimated

itkWaveletFrequencyForwardUndecimated.h
itkWaveletFrequencyForwardUndecimated.hxx

itkWaveletFrequencyInverseUndecimated.h
itkWaveletFrequencyInverseUndecimated.hxx

Wavelet independent

Local estimator over a neighborhood. Get the linear combination of inputs that maximize the response at every pixel.

itkStructureTensor.h
itkStructureTensor.hxx

Regular shrinkers without interpolation

itkExpandWithZerosImageFilter.h
itkExpandWithZerosImageFilter.hxx
itkShrinkDecimateImageFilter.h
itkShrinkDecimateImageFilter.hxx

Wrappers without new functionality

itkVectorInverseFFTImageFilter.h
itkVectorInverseFFTImageFilter.hxx

itkZeroDCImageFilter.h
itkZeroDCImageFilter.hxx

Helpers (Linear index to subindex array)

itkInd2Sub.h

Phase Analysis

itkPhaseAnalysisImageFilter.h
itkPhaseAnalysisImageFilter.hxx

itkPhaseAnalysisSoftThresholdImageFilter.h
itkPhaseAnalysisSoftThresholdImageFilter.hxx

Riesz Rotation Matrix (Steerable Matrix)

itkRieszRotationMatrix.h
itkRieszRotationMatrix.hxx

itkRieszUtilities.h
itkRieszUtilities.cxx

License

This software is distributed under the Apache 2.0 license. Please see the LICENSE file for details.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].