[Insight-users] FFT
Luis Ibanez
luis.ibanez at kitware.com
Fri Mar 28 11:36:52 EDT 2008
Hi Alexandre,
This code seems to be based on the example:
Insight/Examples/Filtering/FFTImageFilter.cxx
Could you please try the following:
1) Reconfigure ITK with CMake and enable FFTD
2) Also from CMake, Enable building the EXAMPLES
3) Build (only) the example: FFTImageFilter
4) Once you have the executable, run the following
command:
FFTImageFilter.exe
Insight/Examples/Data/Circle.png
CircleFFTReal.mhd
CircleFFTImaginary.mhd
(all in a *single command line*)
This should generate the images FFTReal.mhd, and
FFTImaginary.mhd (along with their .raw files).
You can view these files with the ImageViewer
application, SNAP, ParaView, and/or Slicer.
The output images will have 100x100 pixels,
and will use pixel type "unsigned char".
Please do this, and let us know if you run into
any problem. Then we will go from there...
Thanks
Luis
---------------------------
alexandre govignon wrote:
> Hi Luis,
> Thanks for reply,
> VnlFFT and FFTW have the same following in code, except replace
> itkVnlFFT by itkFFTW
>
>
> My code with VNL is:
>
> #if defined(_MSC_VER)
> #pragma warning ( disable : 4786 )
> #endif
>
> #ifdef __BORLANDC__
> #define ITK_LEAN_AND_MEAN
> #endif
>
>
> // Software Guide : BeginCodeSnippet
> #include "itkImage.h"
>
> #include "itkImageFileReader.h"
> #include "itkImageFileWriter.h"
>
> #include "itkVnlFFTRealToComplexConjugateImageFilter.h"
>
> #include "itkComplexToRealImageFilter.h"
> #include "itkComplexToImaginaryImageFilter.h"
>
> #include "itkRescaleIntensityImageFilter.h"
>
> #include <iostream>
>
>
>
> int main(int argc, char * argv[])
> {
>
>
> // FFT
>
>
>
> if( argc < 3 )
> {
> std::cerr << "Usage: " << argv[0] << " inputScalarImage
> outputRealPartOfComplexImage outputRealImaginaryPartOfComplexImage" <<
> std::endl;
> }
>
>
>
>
> typedef float PixelType;
>
> const unsigned int Dimension = 2;
>
> typedef itk::Image< PixelType, Dimension > ImageType;
>
>
> typedef itk::FFTRealToComplexConjugateImageFilter< PixelType,
> Dimension > FFTFilterType; //Filtre FFT r√(c)el √† complexe
> conjugu√(c)
>
> FFTFilterType::Pointer fftFilter = FFTFilterType::New(); //
> instanciation Filtre FFT
>
>
>
> typedef itk::ImageFileReader< ImageType > ReaderType;
>
> ReaderType::Pointer reader = ReaderType::New();
>
> reader->SetFileName( argv[1] );
>
>
>
> fftFilter->SetInput( reader->GetOutput() );
> try
> {
>
> fftFilter->Update();
>
> }
>
> catch( itk::ExceptionObject & excp )
> {
>
> std::cerr << "Error: " << std::endl;
> std::cerr << excp << std::endl;
> return EXIT_FAILURE;
>
> }
>
>
>
> typedef FFTFilterType::OutputImageType ComplexImageType;
>
>
> typedef itk::ImageFileWriter< ComplexImageType > ComplexWriterType;
>
> ComplexWriterType::Pointer complexWriter = ComplexWriterType::New();
>
> complexWriter->SetFileName("complexImage.mhd");
>
> complexWriter->SetInput( fftFilter->GetOutput() );
>
>
>
> try
> {
>
> complexWriter->Update();
>
> }
>
> catch( itk::ExceptionObject & excp )
> {
>
> std::cerr << "Error: " << std::endl;
> std::cerr << excp << std::endl;
> return EXIT_FAILURE;
>
> }
>
>
> typedef itk::ComplexToRealImageFilter< ComplexImageType, ImageType
>
>>RealFilterType;
>
>
> RealFilterType::Pointer realFilter = RealFilterType::New();
>
> realFilter->SetInput( fftFilter->GetOutput() );
>
>
> typedef unsigned char WritePixelType;
>
> typedef itk::Image< WritePixelType, Dimension > WriteImageType;
>
>
>
> typedef itk::RescaleIntensityImageFilter<ImageType, WriteImageType
>
>>RescaleFilterType; // on d√(c)clare le r√(c)echelonnage
>
>
> RescaleFilterType::Pointer intensityRescaler =
> RescaleFilterType::New(); // instanciation du
> pointeur sur le r√(c)echelonneur
>
> intensityRescaler->SetInput( realFilter->GetOutput() );
>
> intensityRescaler->SetOutputMinimum( 0 );
>
> intensityRescaler->SetOutputMaximum( 255 );
>
> typedef itk::ImageFileWriter< WriteImageType > WriterType;
>
> WriterType::Pointer writer = WriterType::New();
>
> writer->SetFileName( argv[2] );
>
> writer->SetInput( intensityRescaler->GetOutput() );
>
> try
> {
>
> writer->Update();
>
> }
>
> catch( itk::ExceptionObject & excp )
> {
>
> std::cerr << "Error writing the real image: " << std::endl;
> std::cerr << excp << std::endl;
> return EXIT_FAILURE;
> }
>
> return EXIT_SUCCESS;
>
> }
>
>
>
> Regards,
> Alexandre
>
>
>
> 2008/3/28, Luis Ibanez <luis.ibanez at kitware.com>:
>
>> Hi Alexandre,
>>
>> Have you tried the follwing examples ?
>>
>>
>> Insight/Examples/Filtering/
>> FFTDirectInverse.cxx
>> FFTDirectInverse2.cxx
>> FFTImageFilter.cxx
>> FFTImageFilterFourierDomainFiltering.cxx
>>
>> They contribute three tests to the Nightly Dashboards.
>>
>>
>> --
>>
>>
>> Can you post to the list the code that you are currently using ?
>>
>> Can you post in a public web site one of the typical images
>> that you want to process ?
>>
>>
>> Please let us know,
>>
>>
>> Thanks
>>
>>
>> Luis
>>
>>
>> -------------------------
>>
>>alexandre govignon wrote:
>> > I am desperate, i m trying to make a FFT and it doesn't work. I have
>> > tried is the same as the beginning. I obtained image in one scale of
>> > grey with VnlFFT and with FFTW. Moreover FFTW transform square image in
>> > rectangular image. Are there anybody who can help me?
>> >
>> > --
>> > Cordialement,
>> > Alexandre Govignon.
>> >
>> >
>>
>>>------------------------------------------------------------------------
>>
>> >
>> > _______________________________________________
>> > Insight-users mailing list
>> > Insight-users at itk.org
>> > http://www.itk.org/mailman/listinfo/insight-users
>>
>
>
More information about the Insight-users
mailing list