// エラー発生時の処理は省略していますので、注意して下さい #include "fie.h" //ライブラリ使用ヘッダ #include <stdio.h> #define RESULT_N 5 //マッチングの最大検出数 /* 相関エッジ検出によるサーチ このサンプルでは、入力画像からチャイルド画像を作成し、 それをマスターパタンに登録しています。 つまりサーチ結果は、チャイルド画像の位置と同じになります */ VOID sample_fpm_corr_edge() { FHANDLE hImage = NULL ; // 入力画像用ハンドル FHANDLE hImageChild = NULL; // 入力画像のチャイルド画像設定用 FHANDLE hfpm = NULL ; // FPMオブジェクト用ハンドル F_FPM_FEATURE feature_param; // 特徴量抽出を行う際のパラメータ設定用共用体 F_FPM_MATCH matching_param; // マッチングを行う際のパラメータ設定用構造体 F_FPM_AREASCORE areascore_param; // 領域スコア再計算を行う際のパラメータ設定用構造体 enum f_fpm_mode matching_mode; // マッチングモードの指定用 enum f_fpm_featedge method; // 特徴量を取得する際のエッジ取得方法の指定用 F_EDGE_CORR_PARAMS corr; // 相関エッジ検出用パラメータ BOX_T win; // マッチングエリア指定の矩形設定用 DPNT_T offset; // マッチング回答オフセット値 INT result_num; // マッチング結果の個数 F_SEARCH_RESULT result[ RESULT_N ]; // マッチング結果の格納用配列 INT image_width, image_height; // 入力画像の幅、高さ INT child_sx, child_sy; // チャイルド画像の始点 INT child_width, child_height; // チャイルド画像の幅、高さ INT err_code; // エラーコード取得用 // サーチのパラメータ準備 // サーチの手法設定 matching_mode = F_FPM_NORMAL_MODE; // マッチングモードは通常モード method = F_FPM_CORR_EDGE; // エッジ取得方法は相関エッジ // サーチのマッチングパラメータ設定 matching_param.require_result_num = RESULT_N; matching_param.min_angle = -45; matching_param.max_angle = 45; matching_param.min_scale = 100; matching_param.max_scale = 100; matching_param.polarity = F_FPM_SAME_POLARITY; matching_param.coarse_highcomp_threshold = 50; matching_param.coarse_lowcomp_threshold = 60; matching_param.coarse_err_wide = 1; matching_param.coarse_comp_rate = 3; matching_param.refine_execute = TRUE; matching_param.refine_err_wide = 1; matching_param.refine_threshold = 70; //領域スコア再計算パラメータ設定 areascore_param.err_wide = 1; areascore_param.err_wide_tx = 0.5; areascore_param.err_wide_ty = 0.5; areascore_param.err_wide_tq = 0.5; areascore_param.err_wide_ts = 0.5; areascore_param.noise_weight = 0.5; areascore_param.threshold = 70; //相関エッジパラメータ設定 corr.width = 13; corr.height = 5; corr.sigmoid_k = 1.0; corr.var_threshold = 25; corr.mag_threshold = 160; corr.nms_length = corr.width/2; feature_param.corr_edge = corr; //特徴量抽出用の共用体に、相関エッジのパラメータをセット // サーチの開始準備 //入力画像をロードし、マスターパタンとなるチャイルド画像を生成する fnFIE_load_bmp( "FPM_SampleSrc.bmp", &hImage, F_COLOR_IMG_TYPE_UC8 ); image_width = fnFIE_img_get_width ( hImage ); image_height = fnFIE_img_get_height( hImage ); //チャイルド画像のパラメータ設定(注:数値は適当な値になっています) child_sx = 100; child_sy = 100; child_width = 150; child_height = 150; //マスターパタン用チャイルド画像の生成 hImageChild = fnFIE_img_child_alloc( hImage, child_sx, child_sy, child_width, child_height ); //マスターパタン生成用のパラメータ設定 offset.x = child_width /2.0; //回答位置は、マスターパタンのちょうど中央で設定 offset.y = child_height /2.0; //マスターパタン登録 マスクは使用しないのでNULLで設定 hfpm = fnFIE_fpm_alloc( hImageChild, NULL, offset, matching_mode, method, &feature_param, &err_code ); // サーチの実行 //サーチ範囲は入力画像全体 win.st.x = 0; win.st.y = 0; win.ed.x = image_width - 1; win.ed.y = image_height - 1; //サーチ実行 マスクは使用しないのでNULLで設定 fnFIE_fpm_matching( hfpm, hImage, NULL, win, method, &feature_param, &matching_param, &areascore_param, result, &result_num ); //実行結果をコンソール出力 { INT i; for(i = 0; i < result_num; i++ ) { printf( "[x, y]=[%8.3f,%8.3f] theta=[%8.3f] scale=[%8.3f] score=[%3d] \n", result[i].x, result[i].y, result[i].q, result[i].s, result[i].score ); } } //オブジェクトの解放 fnFIE_free_object( hImage ); fnFIE_free_object( hImageChild ); fnFIE_free_object( hfpm ); } INT main(VOID) { //ライブラリのセットアップ fnFIE_setup(); //サーチの実行処理 sample_fpm_corr_edge(); //ライブラリの終了処理 fnFIE_teardown(); return 0; }
// エラー発生時の処理は省略していますので、注意して下さい #include "fie.h" //ライブラリ使用ヘッダ #include <stdio.h> #define RESULT_N 5 //マッチングの最大検出数 /* ソーベルエッジ検出によるサーチ このサンプルでは、入力画像からチャイルド画像を作成し、 それをマスターパタンに登録しています。 つまりサーチ結果は、チャイルド画像の位置と同じになります */ VOID sample_fpm_sobel_edge() { FHANDLE hImage = NULL ; // 入力画像用ハンドル FHANDLE hImageChild = NULL; // 入力画像のチャイルド画像設定用 FHANDLE hfpm = NULL ; // FPMオブジェクト用ハンドル F_FPM_FEATURE feature_param; // 特徴量抽出を行う際のパラメータ設定用共用体 F_FPM_MATCH matching_param; // マッチングを行う際のパラメータ設定用構造体 F_FPM_AREASCORE areascore_param; // 領域スコア再計算を行う際のパラメータ設定用構造体 enum f_fpm_mode matching_mode; // マッチングモードの指定用 enum f_fpm_featedge method; // 特徴量を取得する際のエッジ取得方法の指定用 F_EDGE_SOBEL_PARAMS sobel; // ソーベルエッジ検出用パラメータ BOX_T win; // マッチングエリア指定の矩形設定用 DPNT_T offset; // マッチング回答オフセット値 INT result_num; // マッチング結果の個数 F_SEARCH_RESULT result[ RESULT_N ]; // マッチング結果の格納用配列 INT image_width, image_height; // 入力画像の幅、高さ INT child_sx, child_sy; // チャイルド画像の始点 INT child_width, child_height; // チャイルド画像の幅、高さ INT err_code; // エラーコード取得用 // サーチのパラメータ準備 // サーチの手法設定 matching_mode = F_FPM_NORMAL_MODE; // マッチングモードは通常モード method = F_FPM_SOBEL_EDGE; // エッジ取得方法はソーベルエッジ // サーチのマッチングパラメータ設定 matching_param.require_result_num = RESULT_N; matching_param.min_angle = -45; matching_param.max_angle = 45; matching_param.min_scale = 100; matching_param.max_scale = 100; matching_param.polarity = F_FPM_SAME_POLARITY; matching_param.coarse_highcomp_threshold = 50; matching_param.coarse_lowcomp_threshold = 60; matching_param.coarse_err_wide = 1; matching_param.coarse_comp_rate = 3; matching_param.refine_execute = TRUE; matching_param.refine_err_wide = 1; matching_param.refine_threshold = 70; //領域スコア再計算パラメータ設定 areascore_param.err_wide = 1; areascore_param.err_wide_tx = 0.5; areascore_param.err_wide_ty = 0.5; areascore_param.err_wide_tq = 0.5; areascore_param.err_wide_ts = 0.5; areascore_param.noise_weight = 0.5; areascore_param.threshold = 70; //ソーベルエッジパラメータ設定 sobel.nms_length = 1; sobel.mag_threshold = 40; feature_param.sobel_edge = sobel; //特徴量抽出用の共用体に、ソーベルエッジのパラメータをセット // サーチの開始準備 //入力画像をロードし、マスターパタンとなるチャイルド画像を生成する fnFIE_load_bmp( "FPM_SampleSrc.bmp", &hImage, F_COLOR_IMG_TYPE_UC8 ); image_width = fnFIE_img_get_width ( hImage ); image_height = fnFIE_img_get_height( hImage ); //チャイルド画像のパラメータ設定(注:数値は適当な値になっています) child_sx = 100; child_sy = 100; child_width = 150; child_height = 150; //マスターパタン用チャイルド画像の生成 hImageChild = fnFIE_img_child_alloc( hImage, child_sx, child_sy, child_width, child_height ); //マスターパタン生成用のパラメータ設定 offset.x = child_width /2.0; //回答位置は、マスターパタンのちょうど中央で設定 offset.y = child_height /2.0; //マスターパタン登録 マスクは使用しないのでNULLで設定 hfpm = fnFIE_fpm_alloc( hImageChild, NULL, offset, matching_mode, method, &feature_param, &err_code ); // サーチの実行 //サーチ範囲は入力画像全体 win.st.x = 0; win.st.y = 0; win.ed.x = image_width - 1; win.ed.y = image_height - 1; //サーチ実行 マスクは使用しないのでNULLで設定 fnFIE_fpm_matching( hfpm, hImage, NULL, win, method, &feature_param, &matching_param, &areascore_param, result, &result_num ); //実行結果をコンソール出力 { INT i; for(i = 0; i < result_num; i++ ) { printf( "[x, y]=[%8.3f,%8.3f] theta=[%8.3f] scale=[%8.3f] score=[%3d] \n", result[i].x, result[i].y, result[i].q, result[i].s, result[i].score ); } } //オブジェクトの解放 fnFIE_free_object( hImage ); fnFIE_free_object( hImageChild ); fnFIE_free_object( hfpm ); } INT main(VOID) { //ライブラリのセットアップ fnFIE_setup(); //サーチの実行処理 sample_fpm_sobel_edge(); //ライブラリの終了処理 fnFIE_teardown(); return 0; }