頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


iOSでPOCに挑戦(4) フーリエ変換する

頭と尻尾はくれてやる! iOSでPOCに挑戦(3) 画像のデータを配列に入れる
の続きだよ。
今まで必要な引数を確認してきたんだけど、いよいよ画像をFFTしてみよう。

コードの流れはこんな感じ。
{
    //メモリ確保
    DSPSplitComplex splitComplex;
    splitComplex.realp = calloc(nData, sizeof(float));
    splitComplex.imagp = calloc(nData, sizeof(float));
    
    
    //データのコピー
    memcpy(splitComplex.realp, brArray, nData*sizeof(float));
    
    
    //FFTの準備
    FFTSetup fftSetup = vDSP_create_fftsetup(8 , FFT_RADIX2);//2^8=256,radix => 底、基数
    

    //FFT
    vDSP_fft2d_zip(fftSetup,&splitComplex,1,0,8,8,FFT_FORWARD);
    
    
    //スペクトルを得る
    float spectrumArray[nData];
    {
        vDSP_zvmags(&splitComplex,1,spectrumArray,1 , nData);//実部と虚部の自乗和
        float added = 1.f;
        vDSP_vsadd(spectrumArray,1, &added , spectrumArray,1 , nData);//1足す
        float B = 1.f;
        vDSP_vdbcon(spectrumArray,1,&B,spectrumArray,1,nData,0);//logとる
    }
    

    //正規化する
    {
        float max,min;
        vDSP_maxv(spectrumArray,1, &max,nData);//最大値
        vDSP_minv(spectrumArray,1, &min,nData);//最小値
        
        float delta = max-min;
        for (int ii=0;ii < nData;ii++) {
            spectrumArray[ii] = (spectrumArray[ii] - min)/delta*255.f;
        }
    }
    
    
    //配列のデータを表示してみる
    UIImageView *fftImageView = makeImageViewFromArray(spectrumArray , 256 , 256);
    fftImageView.frame = CGRectMake(10, 140+130,256/2,256/2);
    [self.view addSubview:fftImageView];
    
    
    //メモリ解放
    free(splitComplex.realp);
    free(splitComplex.imagp);
}
細かいメソッドなんかはないので、このままコピペしても動かないけど流れはわかるんじゃないかな。 上のコードを実行すると、、、

FFTの結果

一番上がオリジナルの画像、二番目のは配列に輝度を入れ(よって白黒)それをUIImageViewオブジェクトにして表示したもの、一番下がそれをフーリエ変換し、パワースペクトルを表示したもの(実機で実行してスクショ撮影)。

なお、この状態で表示されたパワースペクトルの図は画像左上が低周波で画像中央部が高周波になるんだ。文献によっては中央部分が低周波になってることもあるし、どこが高周波の領域なのか異なることがあるので注意しないといけないんだよね。

POC(位相限定相関法)を使って二枚の画像を比べるのにパワースペクトルの図を表示させるのが必要というわけじゃないけど、こんな感じでフーリエ変換できる、というのはOKかな?
それじゃあ次はいよいよ二枚の画像を比べてみたいけど、長くなったので今日はここまでってことで。



<< iOSでPOCに挑戦(5) 二枚の画像を比較する   TopPage  XcodeのCode Snippetにはショートカットを設定しよう >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/738-0afdae43




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad