template <class T, int N>
class vtb::core::Convolution

Multidimensional convolution based on Fourier transform.

  • Slicing is done in specified dimension with specified padding.

Types
  • using domain_type = blitz::RectDomain< N >
  • using array_type = transform_type::array_type
  • using shape_type = transform_type::shape_type
  • using transform_type = Fourier_transform< T, N >
Methods
  • convolve(array_type signal, array_type kernel) -> array_type

    Zero-pad kernel to be of length block_size + padding. Take forward FFT of padded kernel. Decompose input signal into blocks of length block_size. Zero-pad each part to be of length block_size + padding. Take forward FFT of each padded part. Multiply two FFTs. Take backward FFT of the result. Copy padded part back overlapping it with adjacent parts.

  • operator()(array_type signal, array_type kernel) -> array_type
  • padding() const -> const shape_type &
  • block_shape() const -> const shape_type &
  • padded_block_shape() const -> shape_type
  • padded_block_shape(const shape_type & block_size, const shape_type & padding) -> void
  • shape(const shape_type & signal_shape, const shape_type & kernel_shape) -> void
  • Convolution(const shape_type & signal_shape, const shape_type & kernel_shape)explicit
  • Convolution()