実行
[グレイサーチ(正規化相関サーチ)]


データ構造

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

精度モード指定

列挙型の値:
F_GS2_NORMAL_MODE  通常精度
通常精度の場合、縦横1/4に圧縮した状態の画像で回答位置の推定を行います。
中心とその4近傍の相関値から、サブピクセル推定を行います。
F_GS2_HIGH_MODE  高精度
高精度の場合、縦横1/2に圧縮した状態の画像で回答位置の推定を行います。
中心とその4近傍の相関値から、サブピクセル推定を行います。
F_GS2_SUPER_MODE  超高精度
超高精度の場合、圧縮を行っていない状態の画像で回答位置を計算します。
中心とその4近傍の相関値から、サブピクセル推定を行います。
F_GS2_ULTRA_SUPER_MODE  ウルトラ超高精度
ウルトラ超高精度の場合、圧縮を行っていない状態の画像で回答位置を計算します。
中心とその8近傍の相関値から、サブピクセル推定を行います。

精サーチ・サブピクセル推定の近傍指定

列挙型の値:
F_GS2_SUBPXL_NEIB_4  4近傍
中心とその4近傍の相関値から、サブピクセル推定を行います。
F_GS2_SUBPXL_NEIB_8  8近傍
中心とその8近傍の相関値から、サブピクセル推定を行います。


関数

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を指定すると、デフォルト値を使用します。
本ライブラリでは重複した相関スコアの計算を避けるために、既に計算した 相関スコアを一時的に保存するキャッシュ領域を持ちます。 本パラメータはこの相関スコアのキャッシュサイズを指定します。 大きな値を設定するとキャッシュヒット率が上がる場合がありますが、 その効果はわずかな場合が多く、必要なメモリ量が大幅に増えるため、 デフォルト値以外での利用は推奨しません。 なお、この設定値によってサーチ結果が変化することはありません。
戻り値:
正常終了した場合は、生成したグレイサーチオブジェクトのハンドルを返します。
ライセンスエラー、未初期化エラー、パラメータエラー、またはメモリ不足エラーにより生成できなかったときはNULLを返します。

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 サーチウインドウ周囲接触フラグ
  • TRUE サーチウインドウに接したパターンも検出
  • FALSE サーチウインドウに接したパターンを検出しない
[in] reverse_mode 反転パターン検出モードフラグ 濃度反転しているパターンも検出するかどうかを指定します。
  • TRUE 反転パターンも検出
  • FALSE 反転パターンを検出しない
[in] pitch_x 最終的な回答の出力時に、同一の解であるとみなす範囲を指定します。
0を入力した場合、パターンサイズの半分になります。
[in] pitch_y 最終的な回答の出力時に、同一の解であるとみなす範囲を指定します。
0を入力した場合、パターンサイズの半分になります。
[in] search_mode サーチ精度を指定します。
  • F_GS2_NORMAL_MODE 通常精度
  • F_GS2_HIGH_MODE 高精度
  • F_GS2_SUPER_MODE 超高精度
  • F_GS2_ULTRA_SUPER_MODE ウルトラ超高精度
[in] search_type サーチ複雑度を指定します。( 1 〜 9 )
[out] result サーチ結果
サーチスコア( 0 〜 10000 )と結果座標の100倍値を返します。
[in] max_result_num サーチ結果取得個数。
相関値の上位からこの個数だけ回答します。 result はこの個数よりも大きい配列でなければいけません。
[out] result_num 見つかったサーチ結果の個数 ( 0 〜 max_result_num )
引数の詳細については、GS2のパラメータ解説を参照してください。

戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 引数異常 範囲外の引数を与えた、継続サーチ時に圧縮フィルタ種別が同一でないなど
F_ERR_INVALID_OBJECT 引数オブジェクトの種別が異常,引数オブジェクトがNULL
F_ERR_NOMEMORY メモリ不足
F_ERR_INVALID_IMAGE 対応していない画像が渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
example code
// エラー処理は省略しているので注意して下さい。
#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 サーチウインドウ周囲接触フラグ
  • TRUE サーチウインドウに接したパターンも検出
  • FALSE サーチウインドウに接したパターンを検出しない
[in] reverse_mode 反転パターン検出モードフラグ
濃度反転しているパターンも検出するかどうかを指定します。
  • TRUE 反転パターンも検出
  • FALSE 反転パターンを検出しない
[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 )
引数の詳細については、FIEグレイサーチのパラメータ解説を参照してください。

戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 引数異常 引数オブジェクトがない、範囲外の引数を与えた、継続サーチ時に圧縮フィルタ種別が同一でないなど
F_ERR_INVALID_OBJECT 引数オブジェクトの種別が異常
F_ERR_NOMEMORY メモリ不足
F_ERR_INVALID_IMAGE 対応していない画像が渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
非推奨:
本関数は後方互換性のために残されています。
新規の開発では fnFIE_gs2_search_enforce2() を使用し、本関数は使用しないでください。
fnFIE_gs2_search_enforce2() の引数 subpxl_neib にF_GS2_SUBPXL_NEIB_4 を設定すると本関数と同一の動作になります。
example code
// エラー処理は省略しているので注意して下さい。
#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 サーチウインドウ周囲接触フラグ
  • TRUE サーチウインドウに接したパターンも検出
  • FALSE サーチウインドウに接したパターンを検出しない
[in] reverse_mode 反転パターン検出モードフラグ
濃度反転しているパターンも検出するかどうかを指定します。
  • TRUE 反転パターンも検出
  • FALSE 反転パターンを検出しない
[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 を推奨します。
  • F_GS2_SUBPXL_NEIB_4 4近傍
  • F_GS2_SUBPXL_NEIB_8 8近傍
[out] result サーチ結果
サーチスコア( 0 〜 10000 )と結果座標の100倍値を返します。
[in] max_result_num サーチ結果取得個数。
相関値の上位からこの個数だけ回答します。 result はこの個数よりも大きい配列でなければいけません。
[out] result_num 見つかったサーチ結果の個数 ( 0 〜 max_result_num )
引数の詳細については、FIEグレイサーチのパラメータ解説を参照してください。

戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 引数異常 引数オブジェクトがない、範囲外の引数を与えた、継続サーチ時に圧縮フィルタ種別が同一でないなど
F_ERR_INVALID_OBJECT 引数オブジェクトの種別が異常
F_ERR_NOMEMORY メモリ不足
F_ERR_INVALID_IMAGE 対応していない画像が渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
example code
// エラー処理は省略しているので注意して下さい。
#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;
}


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:47 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2