Hey ITK Dev,

I've had no luck on the user list with this question. Does anyone have any
experience with using ConvolutionImageFilter with complex datasets and
complex kernels?

I'm receiving the following error during the compile process just from
instantiating the filter with the type std::complex<float>

ITK/Modules/Core/Common/include/itkPixelTraits.h:49:60: error: no member
      named 'Length' in 'std::complex<double>'
  itkStaticConstMacro(Dimension, unsigned int, TPixelType::Length);

I'm also receiving:

ITK/Modules/Core/Common/include/itkPixelTraits.h:52:32: error: no type named
      'ValueType' in 'std::complex<double>'
  typedef typename TPixelType::ValueType ValueType;

ITK/Modules/Core/Common/include/itkNeighborhoodInnerProduct.hxx:52:7:
error:
      cannot convert 'const std::complex<double>' to 'OutputPixelValueType'
(aka 'double') without a conversion
      operator
      static_cast< OutputPixelValueType >( *o_it ) *

ITK/Modules/Filtering/ImageStatistics/include/itkStatisticsImageFilter.hxx:288:51:
error:
      invalid operands to binary expression ('RealType' (aka
'complex<double>') and 'int')
             / ( static_cast< RealType >( count ) - 1 );

ITK/Modules/Filtering/ImageStatistics/include/itkStatisticsImageFilter.hxx:329:16:
error:
      invalid operands to binary expression ('PixelType' (aka
'std::complex<double>') and 'PixelType')
    if ( value > max )

code:
          typedef itk::Image< std::complex<double>, 4> ComplexImageType;

          ComplexImageType::RegionType region;
          region.SetSize(0,15);
          region.SetSize(1,30);
          region.SetSize(2,100);
          region.SetSize(3,100);

          ComplexImageType::RegionType kernelRegion;
          kernelRegion.SetSize(0,1);
          kernelRegion.SetSize(1,30);
          kernelRegion.SetSize(2,100);
          kernelRegion.SetSize(3,100);

          ComplexImageType::Pointer image = ComplexImageType::New();
          image->SetRegions(region);
          image->Allocate();
          image->FillBuffer(std::complex<double>(1.0,1.0));

          ComplexImageType::Pointer kernel = ComplexImageType::New();
          kernel->SetRegions(kernelRegion);
          kernel->Allocate();
          kernel->FillBuffer(std::complex<double>(1.0,1.0));

          typedef itk::ConvolutionImageFilter<ComplexImageType>
ConvolutionFilterType;
          ConvolutionFilterType::Pointer convolutionFilter =
ConvolutionFilterType::New();
          convolutionFilter->SetInput(image);
          convolutionFilter->SetKernelImage(kernel);
          convolutionFilter->Update();

I have the same errors in 3D, 2D and 1D.

Cheers,
phil
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://www.itk.org/mailman/listinfo/insight-developers

Reply via email to