データ構造 | |
struct | F_GS_RESULT |
グレイサーチ結果格納用構造体 [詳細] | |
列挙型 | |
enum | f_gs2_mode { F_GS2_NORMAL_MODE = 1, F_GS2_HIGH_MODE = 2, F_GS2_SUPER_MODE = 3, F_GS2_ULTRA_SUPER_MODE = 4 } |
精度モード指定 [詳細] | |
enum | f_gs2_subpxl_neib { F_GS2_SUBPXL_NEIB_4 = 0, F_GS2_SUBPXL_NEIB_8 = 1 } |
精サーチ・サブピクセル推定の近傍指定 [詳細] | |
関数 | |
FHANDLE FVALGAPI | fnFIE_gs2_alloc (UINT first_buff_size, UINT last_buff_size, UINT cache_pow_num) |
グレイサーチオブジェクトの生成 | |
INT FVALGAPI | fnFIE_gs2_search (FHANDLE hgs, FHANDLE hpattern, FHANDLE himage, BOX_T search_window, INT threshold_mid, INT threshold_final, INT edge_detect, INT reverse_mode, INT pitch_x, INT pitch_y, enum f_gs2_mode search_mode, INT search_type, F_GS_RESULT *result, INT max_result_num, INT *result_num) |
グレイサーチの実行 | |
INT FVALGAPI | fnFIE_gs2_search_enforce (FHANDLE hgs, FHANDLE hpattern, FHANDLE himage, BOX_T search_window, INT threshold_mid, INT threshold_final, INT edge_detect, INT reverse_mode, INT pitch_x, INT pitch_y, INT first_unit, INT last_unit, F_GS_RESULT *result, INT max_result_num, INT *result_num) |
[非推奨]グレイサーチの実行(圧縮度を強制する版) | |
INT FVALGAPI | fnFIE_gs2_search_enforce2 (FHANDLE hgs, FHANDLE hpattern, FHANDLE himage, BOX_T search_window, INT threshold_mid, INT threshold_final, INT edge_detect, INT reverse_mode, INT pitch_x, INT pitch_y, INT first_unit, INT last_unit, enum f_gs2_subpxl_neib subpxl_neib, F_GS_RESULT *result, INT max_result_num, INT *result_num) |
グレイサーチの実行(圧縮度を強制する版2:サブピクセル推定近傍指定追加版) |
enum f_gs2_mode |
精度モード指定
enum f_gs2_subpxl_neib |
FHANDLE FVALGAPI fnFIE_gs2_alloc | ( | UINT | first_buff_size, | |
UINT | last_buff_size, | |||
UINT | cache_pow_num | |||
) |
グレイサーチオブジェクトの生成
グレイサーチの作業領域となるグレイサーチオブジェクトを生成します。 不要になったグレイサーチオブジェクトは必ず fnFIE_free_object() で解放してください。
[in] | first_buff_size | 初期サーチ結果候補初期バッファサイズ 通常は0を指定してください。0を指定すると、デフォルト値を使用します。 初期サイズが小さく、メモリが足りなくなった場合には内部で自動で再アロケートを行いますが、 メモリの再アロケートを少なくしたい等の理由で、初期サイズを変更する場合に指定します。 なお、この設定値によってサーチ結果が変化することはありません。 |
[in] | last_buff_size | 最終サーチ結果候補初期バッファサイズ 通常は0を指定してください。0を指定すると、デフォルト値を使用します。 初期サイズが小さく、メモリが足りなくなった場合には内部で自動で再アロケートを行いますが、 メモリの再アロケートを少なくしたい等の理由で、初期サイズを変更する場合に指定します。 なお、この設定値によってサーチ結果が変化することはありません。 |
[in] | cache_pow_num | 中間スコアキャッシュサイズ( 0 または 3〜15 ) 通常は0を指定してください。0を指定すると、デフォルト値を使用します。 本ライブラリでは重複した相関スコアの計算を避けるために、既に計算した 相関スコアを一時的に保存するキャッシュ領域を持ちます。 本パラメータはこの相関スコアのキャッシュサイズを指定します。 大きな値を設定するとキャッシュヒット率が上がる場合がありますが、 その効果はわずかな場合が多く、必要なメモリ量が大幅に増えるため、 デフォルト値以外での利用は推奨しません。 なお、この設定値によってサーチ結果が変化することはありません。 |
INT FVALGAPI fnFIE_gs2_search | ( | FHANDLE | hgs, | |
FHANDLE | hpattern, | |||
FHANDLE | himage, | |||
BOX_T | search_window, | |||
INT | threshold_mid, | |||
INT | threshold_final, | |||
INT | edge_detect, | |||
INT | reverse_mode, | |||
INT | pitch_x, | |||
INT | pitch_y, | |||
enum f_gs2_mode | search_mode, | |||
INT | search_type, | |||
F_GS_RESULT * | result, | |||
INT | max_result_num, | |||
INT * | result_num | |||
) |
グレイサーチの実行
グレイサーチを実行します。
himage に NULL を入れると前回使用したサーチ対象画像を使った継続サーチになります。
[in,out] | hgs | グレイサーチオブジェクト |
[in] | hpattern | グレイサーチパターンオブジェクト |
[in] | himage | サーチ対象となる画像オブジェクト ( type : uc8 ) チャネル数は1でなければいけません。 また、パタンのサイズよりも縦横共に大きい必要があります。 |
[in] | search_window | サーチウインドウ 画像オブジェクトの中でサーチを行う処理範囲を himage 上の座標で指定します。 himage の内部に納まるように座標を指定する必要があります。 また、パタンのサイズよりも大きい必要があります。 |
[in] | threshold_mid | 途中相関値 ( 1000 〜 9999 ) |
[in] | threshold_final | 最終相関値 ( 1000 〜 9999 ) |
[in] | edge_detect | サーチウインドウ周囲接触フラグ
|
[in] | reverse_mode | 反転パターン検出モードフラグ 濃度反転しているパターンも検出するかどうかを指定します。
|
[in] | pitch_x | 最終的な回答の出力時に、同一の解であるとみなす範囲を指定します。 0を入力した場合、パターンサイズの半分になります。 |
[in] | pitch_y | 最終的な回答の出力時に、同一の解であるとみなす範囲を指定します。 0を入力した場合、パターンサイズの半分になります。 |
[in] | search_mode | サーチ精度を指定します。
|
[in] | search_type | サーチ複雑度を指定します。( 1 〜 9 ) |
[out] | result | サーチ結果 サーチスコア( 0 〜 10000 )と結果座標の100倍値を返します。 |
[in] | max_result_num | サーチ結果取得個数。 相関値の上位からこの個数だけ回答します。 result はこの個数よりも大きい配列でなければいけません。 |
[out] | result_num | 見つかったサーチ結果の個数 ( 0 〜 max_result_num ) |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 引数異常 範囲外の引数を与えた、継続サーチ時に圧縮フィルタ種別が同一でないなど | |
F_ERR_INVALID_OBJECT | 引数オブジェクトの種別が異常,引数オブジェクトがNULL | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_INVALID_IMAGE | 対応していない画像が渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
// エラー処理は省略しているので注意して下さい。 #include <stdio.h> #include "oal_aloc.h" #include "fie.h" INT main() { FHANDLE image_target = NULL, image_pattern0 = NULL, image_pattern1 = NULL, image_mask1 = NULL; FHANDLE pattern0 = NULL, pattern1 = NULL, hgs = NULL; F_GS_RESULT *result0, *result1; INT num0, num1; INT i; BOX_T search_window; INT threshold_mid = 5000; INT threshold_final = 6000; const CHAR org_file[] ="gray_07.bmp"; // FIEライブラリの使用前に必ずコールする必要があります。 fnFIE_setup(); /* ここで保存済みの画像からパターンとマスク用の画像オブジェクトを作成 */ fnFIE_load_bmp( org_file, &image_target, F_COLOR_IMG_TYPE_UC8 ); image_pattern0 = fnFIE_img_child_alloc( image_target, 355, 230, 130, 127 ) ; image_pattern1 = fnFIE_img_child_alloc( image_target, 355, 230, 130, 127 ) ; image_mask1 = fnFIE_img_root_alloc( F_IMG_UC8, fnFIE_img_get_channels( image_pattern1 ), fnFIE_img_get_width( image_pattern1 ), fnFIE_img_get_height( image_pattern1 ) ); fnFIE_img_clear( image_mask1, 0 ); //結果の保存先を作成 result0 = ( F_GS_RESULT * )fnOAL_calloc( 10, sizeof( F_GS_RESULT ) ); result1 = ( F_GS_RESULT * )fnOAL_calloc( 10, sizeof( F_GS_RESULT ) ); //パタンの作成 画像全面を使ってパタンを作成するため、画像の一部をパタンにしたい場合は事前に子画像を作成すること //マスクを使用しないパタンの場合 pattern0 = fnFIE_gs2_pattern_alloc( image_pattern0, NULL, 0, 0, F_COMP_MODE_SMOOTH, NULL ); //マスクを使用するパタンの場合 pattern1 = fnFIE_gs2_pattern_alloc( image_pattern1, image_mask1, 0, 0, F_COMP_MODE_SMOOTH, NULL ); //パタンの作成後は画像を解放してもかまわない fnFIE_free_object( image_pattern0 ); image_pattern0 = NULL; fnFIE_free_object( image_pattern1 ); image_pattern1 = NULL; fnFIE_free_object( image_mask1 ); image_mask1 = NULL; //サーチオブジェクトの作成 hgs = fnFIE_gs2_alloc( 100, 100, 0 ); /* ここで撮像を行い、サーチ対象画像 image_target を得る。*/ /*(サンプルであるためファイルから読み込んだ image_target で代用) */ /* サーチウインドウの設定 サーチ対象画像の中に納まるよう設定する */ search_window.st.x = 0; search_window.st.y = 0; search_window.ed.x = fnFIE_img_get_width( image_target ) - 1; search_window.ed.y = fnFIE_img_get_height( image_target ) - 1; //サーチを行う fnFIE_gs2_search( hgs, pattern0, image_target, search_window, threshold_mid, threshold_final, FALSE, FALSE, 0, 0, F_GS2_NORMAL_MODE, //通常精度 9, //複雑度9 result0, 10, &num0 ); /* ここでサーチ結果を利用する */ printf( "search 1st \n" ); for( i = 0; i < 10; i++ ){ if( result0[i].score > 0 ) printf( "score %d,(%d,%d)\n",result0[i].score,result0[i].x,result0[i].y); } //同一のサーチ対象画像に対して継続サーチを行う fnFIE_gs2_search( hgs, pattern1, NULL, // 継続サーチの場合サーチ対象画像を指定しない search_window, threshold_mid, threshold_final, FALSE, FALSE, 0, 0, F_GS2_SUPER_MODE, //超高精度 5, //複雑度5 result1, 5, &num1 ); /* ここでサーチ結果を利用する */ printf( "search 2nd \n" ); for( i = 0; i < 10; i++ ){ if( result1[i].score > 0 ) printf( "score %d,(%d,%d)\n", result1[i].score, result1[i].x, result1[i].y ); } //サーチオブジェクトの解放 fnFIE_free_object( hgs ); //サーチ対象画像の解放 (サーチオブジェクトより後に解放する) fnFIE_free_object( image_target ); //パタンの解放 fnFIE_free_object( image_pattern0 ); fnFIE_free_object( image_pattern1 ); fnFIE_free_object( image_mask1 ); fnFIE_free_object( pattern0 ); fnFIE_free_object( pattern1 ); //結果保存先の解放 fnOAL_free( result0 ); fnOAL_free( result1 ); // 終了処理 fnFIE_teardown(); return 0; }
INT FVALGAPI fnFIE_gs2_search_enforce | ( | FHANDLE | hgs, | |
FHANDLE | hpattern, | |||
FHANDLE | himage, | |||
BOX_T | search_window, | |||
INT | threshold_mid, | |||
INT | threshold_final, | |||
INT | edge_detect, | |||
INT | reverse_mode, | |||
INT | pitch_x, | |||
INT | pitch_y, | |||
INT | first_unit, | |||
INT | last_unit, | |||
F_GS_RESULT * | result, | |||
INT | max_result_num, | |||
INT * | result_num | |||
) |
[非推奨]グレイサーチの実行(圧縮度を強制する版)
グレイサーチを実行します。
himage に NULL を入れると前回使用したサーチ対象画像を使った継続サーチになります。
[in,out] | hgs | グレイサーチオブジェクト |
[in] | hpattern | グレイサーチパターンオブジェクト |
[in] | himage | サーチ対象となる画像オブジェクト ( type : uc8 ) チャネル数は1でなければいけません。 また、パタンのサイズよりも縦横共に大きい必要があります。 |
[in] | search_window | サーチウインドウ 画像オブジェクトの中でサーチを行う処理範囲を himage 上の座標で指定します。 himage の内部に納まるように座標を指定する必要があります。 また、パタンのサイズよりも大きい必要があります。 |
[in] | threshold_mid | 途中相関値 ( 1000 〜 9999 ) |
[in] | threshold_final | 最終相関値 ( 1000 〜 9999 ) |
[in] | edge_detect | サーチウインドウ周囲接触フラグ
|
[in] | reverse_mode | 反転パターン検出モードフラグ 濃度反転しているパターンも検出するかどうかを指定します。
|
[in] | pitch_x | 最終的な回答の出力時に、同一の解であるとみなす範囲を指定します。 0を入力した場合、パターン幅の半分になります。 |
[in] | pitch_y | 最終的な回答の出力時に、同一の解であるとみなす範囲を指定します。 0を入力した場合、パターン高さの半分になります。 |
[in] | first_unit | サーチ開始圧縮度を指定します。( 0 〜 9 ) 圧縮度がnのとき、2の-n乗倍の画像でサーチを開始します。 |
[in] | last_unit | サーチ終了圧縮度を指定します。( 0 〜 9 ) 圧縮度がnのとき、2の-n乗倍の画像でサーチを完了します。 |
[out] | result | サーチ結果 サーチスコア( 0 〜 10000 )と結果座標の100倍値を返します。 |
[in] | max_result_num | サーチ結果取得個数。 相関値の上位からこの個数だけ回答します。 result はこの個数よりも大きい配列でなければいけません。 |
[out] | result_num | 見つかったサーチ結果の個数 ( 0 〜 max_result_num ) |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 引数異常 引数オブジェクトがない、範囲外の引数を与えた、継続サーチ時に圧縮フィルタ種別が同一でないなど | |
F_ERR_INVALID_OBJECT | 引数オブジェクトの種別が異常 | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_INVALID_IMAGE | 対応していない画像が渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
// エラー処理は省略しているので注意して下さい。 #include <stdio.h> #include "oal_aloc.h" #include "fie.h" INT main() { FHANDLE image_target = NULL, image_pattern0 = NULL, image_pattern1 = NULL, image_mask1 = NULL; FHANDLE pattern0 = NULL, pattern1 = NULL, hgs = NULL; F_GS_RESULT *result0, *result1; INT num0, num1; INT i; BOX_T search_window; INT threshold_mid = 5000; INT threshold_final = 6000; const CHAR org_file[] ="gray_07.bmp"; // FIEライブラリの使用前に必ずコールする必要があります。 fnFIE_setup(); /* ここで保存済みの画像からパターンとマスク用の画像オブジェクトを作成 */ fnFIE_load_bmp( org_file, &image_target, F_COLOR_IMG_TYPE_UC8 ); image_pattern0 = fnFIE_img_child_alloc( image_target, 355, 230, 130, 127 ) ; image_pattern1 = fnFIE_img_child_alloc( image_target, 355, 230, 130, 127 ) ; image_mask1 = fnFIE_img_root_alloc( F_IMG_UC8, fnFIE_img_get_channels( image_pattern1 ), fnFIE_img_get_width( image_pattern1 ), fnFIE_img_get_height( image_pattern1 ) ); fnFIE_img_clear( image_mask1, 0 ); //結果の保存先を作成 result0 = ( F_GS_RESULT * )fnOAL_calloc( 10, sizeof( F_GS_RESULT ) ); result1 = ( F_GS_RESULT * )fnOAL_calloc( 10, sizeof( F_GS_RESULT ) ); //パタンの作成 画像全面を使ってパタンを作成するため、画像の一部をパタンにしたい場合は事前に子画像を作成すること //マスクを使用しないパタンの場合 pattern0 = fnFIE_gs2_pattern_alloc( image_pattern0, NULL, 0, 0, F_COMP_MODE_SMOOTH, NULL ); //マスクを使用するパタンの場合 pattern1 = fnFIE_gs2_pattern_alloc( image_pattern1, image_mask1, 0, 0, F_COMP_MODE_SMOOTH, NULL ); //パタンの作成後は画像を解放してもかまわない fnFIE_free_object( image_pattern0 ); image_pattern0 = NULL; fnFIE_free_object( image_pattern1 ); image_pattern1 = NULL; fnFIE_free_object( image_mask1 ); image_mask1 = NULL; //サーチオブジェクトの作成 hgs = fnFIE_gs2_alloc( 100, 100, 0 ); /* ここで撮像を行い、サーチ対象画像 image_target を得る。*/ /*(サンプルであるためファイルから読み込んだ image_target で代用) */ /* サーチウインドウの設定 サーチ対象画像の中に納まるよう設定する */ search_window.st.x = 0; search_window.st.y = 0; search_window.ed.x = fnFIE_img_get_width( image_target ) - 1; search_window.ed.y = fnFIE_img_get_height( image_target ) - 1; //サーチを行う fnFIE_gs2_search_enforce( hgs, pattern0, image_target, search_window, threshold_mid, threshold_final, FALSE, FALSE, 0, 0, 2, //サーチ開始圧縮度 0, //サーチ終了圧縮度 result0, 10, &num0 ); /* ここでサーチ結果を利用する */ printf( "search 1st \n" ); for( i = 0; i < 10; i++ ){ if( result0[i].score > 0 ) printf( "score %d,(%d,%d)\n",result0[i].score,result0[i].x,result0[i].y); } //同一のサーチ対象画像に対して継続サーチを行う fnFIE_gs2_search_enforce( hgs, pattern1, NULL, // 継続サーチの場合サーチ対象画像を指定しない search_window, threshold_mid, threshold_final, FALSE, FALSE, 0, 0, 3, //サーチ開始圧縮度 0, //サーチ終了圧縮度 result1, 5, &num1 ); /* ここでサーチ結果を利用する */ printf( "search 2nd \n" ); for( i = 0; i < 10; i++ ){ if( result1[i].score > 0 ) printf( "score %d,(%d,%d)\n", result1[i].score, result1[i].x, result1[i].y ); } //サーチオブジェクトの解放 fnFIE_free_object( hgs ); //サーチ対象画像の解放 (サーチオブジェクトより後に解放する) fnFIE_free_object( image_target ); //パタンの解放 fnFIE_free_object( image_pattern0 ); fnFIE_free_object( image_pattern1 ); fnFIE_free_object( image_mask1 ); fnFIE_free_object( pattern0 ); fnFIE_free_object( pattern1 ); //結果保存先の解放 fnOAL_free( result0 ); fnOAL_free( result1 ); // 終了処理 fnFIE_teardown(); return 0; }
INT FVALGAPI fnFIE_gs2_search_enforce2 | ( | FHANDLE | hgs, | |
FHANDLE | hpattern, | |||
FHANDLE | himage, | |||
BOX_T | search_window, | |||
INT | threshold_mid, | |||
INT | threshold_final, | |||
INT | edge_detect, | |||
INT | reverse_mode, | |||
INT | pitch_x, | |||
INT | pitch_y, | |||
INT | first_unit, | |||
INT | last_unit, | |||
enum f_gs2_subpxl_neib | subpxl_neib, | |||
F_GS_RESULT * | result, | |||
INT | max_result_num, | |||
INT * | result_num | |||
) |
グレイサーチの実行(圧縮度を強制する版2:サブピクセル推定近傍指定追加版)
グレイサーチを実行します。
精サーチにおけるサブピクセル推定に用いる近傍の指定ができます。
himage に NULL を入れると前回使用したサーチ対象画像を使った継続サーチになります。
[in,out] | hgs | グレイサーチオブジェクト |
[in] | hpattern | グレイサーチパターンオブジェクト |
[in] | himage | サーチ対象となる画像オブジェクト ( type : uc8 ) チャネル数は1でなければいけません。 また、パタンのサイズよりも縦横共に大きい必要があります。 |
[in] | search_window | サーチウインドウ 画像オブジェクトの中でサーチを行う処理範囲を himage 上の座標で指定します。 himage の内部に納まるように座標を指定する必要があります。 また、パタンのサイズよりも大きい必要があります。 |
[in] | threshold_mid | 途中相関値 ( 1000 〜 9999 ) |
[in] | threshold_final | 最終相関値 ( 1000 〜 9999 ) |
[in] | edge_detect | サーチウインドウ周囲接触フラグ
|
[in] | reverse_mode | 反転パターン検出モードフラグ 濃度反転しているパターンも検出するかどうかを指定します。
|
[in] | pitch_x | 最終的な回答の出力時に、同一の解であるとみなす範囲を指定します。 0を入力した場合、パターン幅の半分になります。 |
[in] | pitch_y | 最終的な回答の出力時に、同一の解であるとみなす範囲を指定します。 0を入力した場合、パターン高さの半分になります。 |
[in] | first_unit | サーチ開始圧縮度を指定します。( 0 〜 9 ) 圧縮度がnのとき、2の-n乗倍の画像でサーチを開始します。 |
[in] | last_unit | サーチ終了圧縮度を指定します。( 0 〜 9 ) 圧縮度がnのとき、2の-n乗倍の画像でサーチを完了します。 |
[in] | subpxl_neib | 精サーチ・サブピクセル推定に用いる近傍を指定します。 8近傍を指定する場合、サーチ終了圧縮度(last_unit)は 0 を推奨します。
|
[out] | result | サーチ結果 サーチスコア( 0 〜 10000 )と結果座標の100倍値を返します。 |
[in] | max_result_num | サーチ結果取得個数。 相関値の上位からこの個数だけ回答します。 result はこの個数よりも大きい配列でなければいけません。 |
[out] | result_num | 見つかったサーチ結果の個数 ( 0 〜 max_result_num ) |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 引数異常 引数オブジェクトがない、範囲外の引数を与えた、継続サーチ時に圧縮フィルタ種別が同一でないなど | |
F_ERR_INVALID_OBJECT | 引数オブジェクトの種別が異常 | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_INVALID_IMAGE | 対応していない画像が渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
// エラー処理は省略しているので注意して下さい。 #include <stdio.h> #include "oal_aloc.h" #include "fie.h" INT main() { FHANDLE image_target = NULL, image_pattern0 = NULL, image_pattern1 = NULL, image_mask1 = NULL; FHANDLE pattern0 = NULL, pattern1 = NULL, hgs = NULL; F_GS_RESULT *result0, *result1; INT num0, num1; INT i; BOX_T search_window; INT threshold_mid = 5000; INT threshold_final = 6000; const CHAR org_file[] ="gray_07.bmp"; // FIEライブラリの使用前に必ずコールする必要があります。 fnFIE_setup(); /* ここで保存済みの画像からパターンとマスク用の画像オブジェクトを作成 */ fnFIE_load_bmp ( org_file, &image_target, F_COLOR_IMG_TYPE_UC8 ) ; image_pattern0 = fnFIE_img_child_alloc( image_target, 355, 230, 130, 127 ) ; image_pattern1 = fnFIE_img_child_alloc( image_target, 355, 230, 130, 127 ) ; image_mask1 = fnFIE_img_root_alloc( F_IMG_UC8, fnFIE_img_get_channels( image_pattern1 ), fnFIE_img_get_width( image_pattern1 ), fnFIE_img_get_height( image_pattern1 ) ); fnFIE_img_clear( image_mask1, 0 ); //結果の保存先を作成 result0 = ( F_GS_RESULT * )fnOAL_calloc( 10, sizeof( F_GS_RESULT ) ); result1 = ( F_GS_RESULT * )fnOAL_calloc( 10, sizeof( F_GS_RESULT ) ); //パタンの作成 画像全面を使ってパタンを作成するため、画像の一部をパタンにしたい場合は事前に子画像を作成すること //マスクを使用しないパタンの場合 pattern0 = fnFIE_gs2_pattern_alloc( image_pattern0, NULL, 0, 0, F_COMP_MODE_SMOOTH, NULL ); //マスクを使用するパタンの場合 pattern1 = fnFIE_gs2_pattern_alloc( image_pattern1, image_mask1, 0, 0, F_COMP_MODE_SMOOTH, NULL ); //パタンの作成後は画像を解放してもかまわない fnFIE_free_object( image_pattern0 ); image_pattern0 = NULL; fnFIE_free_object( image_pattern1 ); image_pattern1 = NULL; fnFIE_free_object( image_mask1 ); image_mask1 = NULL; //サーチオブジェクトの作成 hgs = fnFIE_gs2_alloc( 100, 100, 0 ); /* ここで撮像を行い、サーチ対象画像 image_target を得る。*/ /*(サンプルであるためファイルから読み込んだ image_target で代用) */ /* サーチウインドウの設定 サーチ対象画像の中に納まるよう設定する */ search_window.st.x = 0; search_window.st.y = 0; search_window.ed.x = fnFIE_img_get_width( image_target ) - 1; search_window.ed.y = fnFIE_img_get_height( image_target ) - 1; //サーチを行う fnFIE_gs2_search_enforce2( hgs, pattern0, image_target, search_window, threshold_mid, threshold_final, FALSE, FALSE, 0, 0, 2, //サーチ開始圧縮度 0, //サーチ終了圧縮度 F_GS2_SUBPXL_NEIB_8, // 精サーチのサブピクセル推定に8近傍を指定 result0, 10, &num0 ); /* ここでサーチ結果を利用する */ printf( "search 1st \n" ); for( i = 0; i < 10; i++ ){ if( result0[i].score > 0 ) printf( "score %d,(%d,%d)\n",result0[i].score,result0[i].x,result0[i].y); } //同一のサーチ対象画像に対して継続サーチを行う fnFIE_gs2_search_enforce2( hgs, pattern1, NULL, // 継続サーチの場合サーチ対象画像を指定しない search_window, threshold_mid, threshold_final, FALSE, FALSE, 0, 0, 3, //サーチ開始圧縮度 0, //サーチ終了圧縮度 F_GS2_SUBPXL_NEIB_8, // 精サーチのサブピクセル推定に8近傍を指定 result1, 5, &num1 ); /* ここでサーチ結果を利用する */ printf( "search 2nd \n" ); for( i = 0; i < 10; i++ ){ if( result1[i].score > 0 ) printf( "score %d,(%d,%d)\n", result1[i].score, result1[i].x, result1[i].y ); } //サーチオブジェクトの解放 fnFIE_free_object( hgs ); //サーチ対象画像の解放 (サーチオブジェクトより後に解放する) fnFIE_free_object( image_target ); //パタンの解放 fnFIE_free_object( image_pattern0 ); fnFIE_free_object( image_pattern1 ); fnFIE_free_object( image_mask1 ); fnFIE_free_object( pattern0 ); fnFIE_free_object( pattern1 ); //結果保存先の解放 fnOAL_free( result0 ); fnOAL_free( result1 ); // 終了処理 fnFIE_teardown(); return 0; }