// テキストファイル(Complex Text形式)のデータからグレイスケール画像(振幅等と位相)を作成するプログラム // プログラム名:cpx2amp_phase.cpp #include "eps-header.hh" #include "fft-header.hh" // テキストファイル(Complex Text形式)のデータからグレイスケール画像(振幅等と位相)を作成する関数 void cpx2amp_phase( class image& output,// 振幅等の画像クラス class image& phase) // 位相の画像クラス { printf("\nテキストファイル(Complex Text形式)のデータからグレイスケール画像(振幅等と位相)を作成します。\n"); class fourier data; // 高速フーリエ変換クラスの宣言 data.cpx_load(); // テキストファイル(Complex Text形式)からデータを入力 printf("%sのデータを読み込みました。\n", (data.get_complex_type() == COMPLEX_SPACE) ? "空間領域" : "周波数領域"); int nr_lines = data.get_nr_lines(); int nr_pixels = data.get_nr_pixels(); output.gmake(nr_lines, nr_pixels); // 振幅等の画像の配列を確保 phase.gmake(nr_lines, nr_pixels); // 位相の画像の配列を確保 int input_num = 0; int output_switch = OUTPUT_AMP; printf("\n出力データ (0: 振幅,1: パワー値,2: デシベル値) "); char linebuf[MAX_FILENAME_LEN]; fgets(linebuf, MAX_FILENAME_LEN - 1, esp_in); sscanf(linebuf, "%d", &input_num); switch (input_num) { case 0: output_switch = OUTPUT_AMP; break; case 1: output_switch = OUTPUT_POWER; break; case 2: output_switch = OUTPUT_DB; break; defalut: printf("選択数値以外が入力されました。0とします。\n"); output_switch = OUTPUT_AMP; break; } int scaling_switch = OUTPUT_SCALE_OFF; printf("\n出力データの画像化処理 (0: スケーリングしない, 1: スケーリングする) "); fgets(linebuf, MAX_FILENAME_LEN - 1, esp_in); sscanf(linebuf, "%d", &input_num); switch (input_num) { case 0: scaling_switch = OUTPUT_SCALE_OFF; break; case 1: scaling_switch = OUTPUT_SCALE_ON; break; default: printf("選択数値以外が入力されました。0とします。\n"); scaling_switch = OUTPUT_SCALE_OFF; break; } int shuffling_switch = FREQ_SPACE_SHUFFLING_OFF; printf("\n画像のシャフリング (0: しない,1: する) "); fgets(linebuf, MAX_FILENAME_LEN - 1, esp_in); sscanf(linebuf, "%d", &input_num); switch (input_num) { case 0: shuffling_switch = FREQ_SPACE_SHUFFLING_OFF; break; case 1: shuffling_switch = FREQ_SPACE_SHUFFLING_ON; break; default: printf("選択数値以外が入力されました。0とします。\n"); shuffling_switch = FREQ_SPACE_SHUFFLING_OFF; break; } data.MakeImage( output_switch, shuffling_switch, scaling_switch, output.p); data.MakeImage( OUTPUT_PHASE, shuffling_switch, OUTPUT_SCALE_ON, phase.p); } // プログラムの開始位置 int main() { class image output; // 振幅等の画像クラスを宣言 class image phase; // 位相の画像クラスを宣言 // テキストファイル(Complex Text形式)のデータからグレイスケール画像(振幅等と位相)を作成する関数 cpx2amp_phase( output, phase); printf("\n振幅等をグレイスケール画像として出力します。\n"); output.gsave(); // 振幅等の画像をBMPファイルに保存する // BMPファイルを指定したい場合は, // output.gsave("パス付きBMPファイル名"); // とする。 printf("\n位相をグレイスケール画像として出力します。\n"); phase.gsave(); // 位相の画像をBMPファイルに保存する // BMPファイルを指定したい場合は, // phase.gsave("パス付きBMPファイル名"); // とする。 }