用于计算FFT_2D的2D double *指针中的图像的像素值

时间:2011-07-22 08:22:08

标签: c++ visual-studio fftw itk

我想计算图像的FFT,我读取图像,ITK SmartPointer称为“imagen”。 我用于计算FFT(fftw_plan_dft_r2c_2d)的函数的输入需要2D double *指针作为输入。因此,我这样做:

double *in = (double*) imagen.GetPointer(); // conversión de itk.smartpointer --> double*.

但是当我尝试访问图像的像素值时,它们没有被定义 'image'的像素类型是double:

typedef double PixelType;
typedef itk::Image < PixelType, 2> ImageType;

ImageType::Pointer imagen;

使用Qt:

从用户界面的框架中读取图像
imagen=ui.imageframe->imagereader;

任何人都可以帮我吗?我需要在2D double *指针中使用图像的值来计算fft。

欢呼并感谢您提前帮助!

AntonioGómezBarquero

EDITED

我已经解决了我的问题,发布在下面,但现在的问题是将结果转换为2D矩阵而不知道它的第二个维度,直到执行时间,因为图像在执行期间加载而不是在编译期间,有小费吗??谢谢!

double *in;
ImageType::IndexType pixelIndex;
ImageType::PixelType pixelValue;
    for ( int x = 0; x<ancho; x++){
        for (int y = 0; y<alto; y++){ 
            pixelIndex[0] = x; //x position
            pixelIndex[1] = y; //y position
            ImageType::PixelType pixel2 = imagen->GetPixel(pixelIndex);
            *(in+x*ancho+y) = static_cast <double> (imagen->GetPixel(pixelIndex));
        }
    }

1 个答案:

答案 0 :(得分:0)

ITK也有FFT可用。

框架示例如下: http://www.vtk.org/Wiki/ITK/Examples/SpectralAnalysis/VnlFFTRealToComplexConjugateImageFilter

使用FFTW还有另一个非常相似的选项。只需在USE_FFTW标志设置为on的情况下构建ITK。 (注意:USE_FFTW选项位于“高级”设置下,固化cmake配置步骤。)

来自ITK邮件列表:http://old.nabble.com/how-to-use-FFTW-with-ITK-td19531608.html