サンプル
[FPM(特徴点応用マッチング)]

FPM サンプルコード

サンプルコード1 相関エッジ検出によるサーチ

// エラー発生時の処理は省略していますので、注意して下さい

#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;
}

サンプルコード2 ソーベルエッジ検出によるサーチ

// エラー発生時の処理は省略していますので、注意して下さい

#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;
}


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