現在地 >> メニュー >> サンプルコード::OpenCV >> OpenCV::離散フーリエ変換 >> OpenCV::離散フーリエ変換2


問題


以下の2次元データを「2次元離散フーリエ変換」して、
それを再び「2次元逆フーリエ変換」をしてもどせ。


double data[3][3][2] =
{
{{0,0},{0,0},{1,0}},
{{1,0},{1,0},{1,0}},
{{0,0},{0,0},{0,0}}
};


その他条件:
 逆フーリエ変換では、スケーリングすること。


 →OpenCV::離散フーリエ変換3 (画像へのフーリエ)

答え


#include <cv.h>
#include <highgui.h>
#include <cstdio>

using namespace std;

double data[3][3][2] =
{
{{0,0},{0,0},{1,0}},
{{1,0},{1,0},{1,0}},
{{0,0},{0,0},{0,0}}
};


int main( int argc, char **argv)
{

CvMat f = cvMat (3,3, CV_64FC2, &data[0][0]);

puts("------ Original -------");
for(int i = 0;i<18;i+=2)
printf("%f,%f \n",f.data.db[i],f.data.db[i+1]);



/* 離散フーリエ */
puts("------ DFT -------");
cvDFT(&f,&f,CV_DXT_FORWARD,f.rows);

for(int i = 0;i<18;i+=2)
printf("%f,%f \n",f.data.db[i],f.data.db[i+1]);


/* 逆離散フーリエ + スケーリング */
puts("------ IDFT and SCALING -------");
cvDFT(&f,&f,CV_DXT_INV_SCALE,f.rows);

for(int i = 0;i<18;i+=2)
printf("%f,%f \n",f.data.db[i],f.data.db[i+1]);


return 0;
}


メモ


CvMat構造体
http://opencv.jp/opencv/document/opencvref_cxcore_...

今回はdouble型で作成。
CV_64FC2(64ビットの2チャネル)を指定する。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます