1

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

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

但是当我尝试访问图像的像素值时,它们没有被定义“图像”的像素类型是双倍的:

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

ImageType::Pointer imagen;

并且图像是使用 Qt 通过用户界面从帧中读取的:

imagen=ui.imageframe->imagereader;

谁能帮我这个?我需要将图像的值放在 2D double* 指针中以计算 fft。

干杯并感谢您的帮助!

安东尼奥·戈麦斯·巴克罗

已编辑

我已经解决了我的问题,贴在下面,但现在的问题是将结果转换为二维矩阵,直到执行时间才知道它的第二维,因为图像是在执行期间而不是在编译期间加载的,有什么提示吗? ? 谢谢!

解决方案

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));
        }
    }
4

1 回答 1

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

于 2011-09-23T23:20:37.850 回答