2011-07-22 4 views
1

画像のFFTを計算したいと思います。画像を読み込み、ITK SmartPointerは「imagen」と呼ばれます。 FFT(fftw_plan_dft_r2c_2d)の計算に使用する関数の入力には、2D double *ポインタが入力として必要です。FFT_2Dを計算するための2Dダブル*ポインタ内の画像のピクセル値

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

しかし、私は、画像の画素の値にアクセスしようとすると、彼らは「イメージ」のpixeltypeがdoubleの を定義されていない:そのため、私はそれを行う

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

ImageType::Pointer imagen; 

そして、イメージはQtのを使用して、ユーザインターフェースtrhougフレームから読み込まれます:

imagen=ui.imageframe->imagereader; 

誰もがこれで私を助けることができますか?私は、fftを計算するために、画像の値を2Dのdouble *ポインタに入れておく必要があります。

先進的なサポートに感謝します。

アントニオ・ゴメスBarqueroが

EDITED

私は、私の問題を解決した下記掲載されていますが、今の問題は、までの第2次元を知らなくても、2Dマトリックスに結果を変換することです実行時に、イメージはコンパイル中ではなく、実行中にロードされるため、任意のヒント??ありがとう!

SOLUTION

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

答えて

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

関連する問題