[Insight-users] Obtaining Real Result from Inverse Fourier Transform
Bradley Lowekamp
brad at lowekamp.net
Fri Nov 22 13:43:56 EST 2013
Hello,
Have you tries specifying the output image type for the filter:
http://www.itk.org/Doxygen/html/classitk_1_1InverseFFTImageFilter.html
typedef itk::VnlInverseFFTImageFilter<ComplexImageType, ComplexImageType> FFTInverseFitlterType;
I have not tried this my self but it would be my first guess.
Brad
On Nov 22, 2013, at 1:27 PM, DVigneault <davis.vigneault at gmail.com> wrote:
> All--
>
> I have a magnitude MRI image with vertical stripes, which produce harmonics
> in the spectral domain. I've isolated one of those harmonics and used the
> VnlInferseFFTImageFilter to produce a spatial image from the isolated
> harmonic. I'd now like to do an operation on that image, which requires
> that I access both the imaginary and real components of the output in the
> spatial domain. However, I've only been able to access one component of the
> result.
>
> The code I'm using for performing the inverse transform is:
>
> typedef itk::VnlInverseFFTImageFilter< ComplexImageType >
> FFTInverseFilterType;
> typedef FFTInverseFilterType::OutputImageType SpatialImageType;
> FFTInverseFilterType::Pointer fftInverseFilter =
> FFTInverseFilterType::New();
> fftInverseFilter->SetInput( maskedShiftFilter->GetOutput() );
> try {
> fftInverseFilter->Update();
> std::cerr << "fftInverseFilter->Update() excecuted successfully." <<
> std::endl; }
> catch( itk::ExceptionObject & excp ) {
> std::cerr << "Error during fftInverseFilter->Update(): " <<
> std::endl;
> std::cerr << excp << std::endl;
> return EXIT_FAILURE; }
>
> I'm using this function to view the pixel values:
>
> typedef FFTInverseFilterType::OutputImageType SpatialImageType;
>
> void OutputImage( SpatialImageType::Pointer image )
> {
> itk::ImageRegionConstIterator< SpatialImageType >
> imageIterator(image,image->GetLargestPossibleRegion());
>
> while(!imageIterator.IsAtEnd())
> {
> // Get the value of the current pixel
> SpatialImageType::PixelType val = imageIterator.Get();
> std::cout << val << std::endl;
>
> ++imageIterator;
> }
> }
>
> The values I'm getting from this function look like this:
>
> -0.354988
> -0.43072
> -0.519287
> -0.615867
> -0.714985
> -0.810802
> ...
>
> I've used a very similar function on the spectral image to get out complex
> values, which come out like this:
>
> (102.69,143.811)
> (-490.191,-181.034)
> (-290.731,-346.93)
> (17.2402,-449.111)
> (-247.687,-201.641)
> ...
>
> Any idea what I'm doing wrong?
>
> Best, and thanks,
>
> --Davis
>
>
>
> --
> View this message in context: http://itk-insight-users.2283740.n2.nabble.com/Obtaining-Real-Result-from-Inverse-Fourier-Transform-tp7584430.html
> Sent from the ITK Insight Users mailing list archive at Nabble.com.
> _____________________________________
> 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://www.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-users
More information about the Insight-users
mailing list