関数 | |
FHANDLE FVALGAPI | fnFIE_fpm_feature_alloc (FHANDLE himage, enum f_fpm_mode matching_mode, enum f_fpm_featedge method, const F_FPM_FEATURE *pfeature_param, BOOL border, INT *perr_code) |
特徴量を取得 | |
FHANDLE FVALGAPI | fnFIE_fpm_feature_window_alloc (FHANDLE himage, BOX_T window, enum f_fpm_mode matching_mode, enum f_fpm_featedge method, const F_FPM_FEATURE *pfeature_param, BOOL border, INT *perr_code) |
ウィンドウを指定して特徴量を取得 | |
FHANDLE FVALGAPI | fnFIE_fpm_feature_import_alloc (F_DEDGE *img_edges, INT num_img_edges, INT img_width, INT img_height, enum f_fpm_mode matching_mode, INT *perr_code) |
点情報から FPM特徴量オブジェクトを生成 | |
INT FVALGAPI | fnFIE_fpm_feature_mask (FHANDLE hfeature, FHANDLE hmask) |
特徴量のマスク | |
INT FVALGAPI | fnFIE_fpm_feature_get_num (FHANDLE hfeature, INT *pfeature_num) |
特徴量数の取得 | |
INT FVALGAPI | fnFIE_fpm_feature_get_edges (FHANDLE hfeature, F_DEDGE *pedges) |
特徴量の取得(勾配方向付きエッジ) | |
INT FVALGAPI | fnFIE_fpm_feature_get_matching_mode (FHANDLE hfeature, enum f_fpm_mode *pmatching_mode) |
特徴量取得マッチングモードの取得 | |
INT FVALGAPI | fnFIE_fpm_feature_get_method (FHANDLE hfeature, enum f_fpm_featedge *pmethod) |
特徴量抽出手法の取得 |
FHANDLE FVALGAPI fnFIE_fpm_feature_alloc | ( | FHANDLE | himage, | |
enum f_fpm_mode | matching_mode, | |||
enum f_fpm_featedge | method, | |||
const F_FPM_FEATURE * | pfeature_param, | |||
BOOL | border, | |||
INT * | perr_code | |||
) |
特徴量を取得
画像オブジェクトから特徴量を抽出し、特徴量オブジェクト(F_OBJID_FPM_FEATURE)を生成します。
[in] | himage | 特徴量を計測する対象となる画像オブジェクト (画像タイプ:uc8 のみ対応) チャネル数は 1 でなければいけません。 |
[in] | matching_mode | FPMを行う際のマッチングモード
|
[in] | method | 特徴量抽出手法
|
[in] | pfeature_param | 特徴量計測パラメータ |
[in] | border | 特徴量抽出時のボーダー処理
|
[out] | perr_code | 正常終了、またはエラーコードが入力されます。エラーコードを受け取る必要の無い場合は、NULLを指定します。
|
FHANDLE FVALGAPI fnFIE_fpm_feature_window_alloc | ( | FHANDLE | himage, | |
BOX_T | window, | |||
enum f_fpm_mode | matching_mode, | |||
enum f_fpm_featedge | method, | |||
const F_FPM_FEATURE * | pfeature_param, | |||
BOOL | border, | |||
INT * | perr_code | |||
) |
ウィンドウを指定して特徴量を取得
画像オブジェクトの特定の範囲から特徴量を抽出し、特徴量オブジェクト(F_OBJID_FPM_FEATURE)を生成します。
[in] | himage | 特徴量を計測する対象となる画像オブジェクト (画像タイプ:uc8 のみ対応) チャネル数は 1 でなければいけません。 |
[in] | window | 特徴量を計測する対象画像エリアです。 |
[in] | matching_mode | FPMを行う際のマッチングモード
|
[in] | method | 特徴量抽出手法
|
[in] | pfeature_param | 特徴量計測パラメータ |
[in] | border | 特徴量抽出時のボーダー処理
|
[out] | perr_code | 正常終了、またはエラーコードが入力されます。エラーコードを受け取る必要の無い場合は、NULLを指定します。
|
FHANDLE FVALGAPI fnFIE_fpm_feature_import_alloc | ( | F_DEDGE * | img_edges, | |
INT | num_img_edges, | |||
INT | img_width, | |||
INT | img_height, | |||
enum f_fpm_mode | matching_mode, | |||
INT * | perr_code | |||
) |
点情報から FPM特徴量オブジェクトを生成
F_DEDGE 型のエッジ情報をインポートして、FPM特徴量オブジェクト(F_OBJID_FPM_FEATURE)を生成します。 自身で作成した処理によって計測したエッジ情報や、既知の幾何情報から生成した情報等を用いて、FPMを実行するためのFPM特徴量オブジェクトを生成することが可能です。
[in] | img_edges | F_DEDGE 型 エッジデータ |
[in] | num_img_edges | img_edges に格納されているエッジデータ数(1≦ num_img_edges) |
[in] | img_width | img_edges を取得した画像幅(1≦ img_width) |
[in] | img_height | img_edges を取得した画像高さ(1≦ img_height) |
[in] | matching_mode | FPMを行う際のマッチングモード
|
[out] | perr_code | 正常終了、またはエラーコードが入力されます。エラーコードを受け取る必要の無い場合は、NULLを指定することも可能です。
|
INT FVALGAPI fnFIE_fpm_feature_mask | ( | FHANDLE | hfeature, | |
FHANDLE | hmask | |||
) |
特徴量のマスク
特徴量オブジェクトに格納されている特徴量データに対してマスクを掛けた状態のデータに更新します。
[in,out] | hfeature | FPM特徴量オブジェクト |
[in] | hmask | マスクパタン指定用画像オブジェクト(画像タイプ:uc8 のみ対応) マスクを指定する場合には、最下位1ビットをONに指定します。hmask にNULLを渡すとマスクをとりはずします。 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 引数オブジェクトの種別が異常 | |
F_ERR_INVALID_IMAGE | 引数画像オブジェクトが異常 | |
F_ERR_FPM_NOFEATURE | 特徴量がなくなります | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
#include "fie.h" #include "oal_aloc.h" #include <stdio.h> #define RESULT_N 99 //マッチングの最大検出数 /* fnFIE_fpm_feature_maskを使ったサンプルコード このサンプルコードはマッチングを行う前に FPM特徴量オブジェクトにマスクをかけることで 画像内の任意の範囲にのみサーチを実行するものです */ VOID sample_fpm(FHANDLE hImage, FHANDLE hptn, FHANDLE hmask) { INT i,j; INT num = 0; FHANDLE huc8mask = NULL; // マスク画像用ハンドル FHANDLE hbinmask = NULL; // マスク画像用ハンドル FHANDLE hfpm = NULL; // FPMオブジェクト用ハンドル FHANDLE fpm_feat_obj = NULL; // FPMオブジェクト用ハンドル F_FPM_FEATURE feature_param; // 特徴量抽出を行う際のパラメータ設定用共用体 F_FPM_MATCH matching_param; // マッチングを行う際のパラメータ設定用構造体 F_FPM_AREASCORE areascore_param; // 領域スコア再計算を行う際のパラメータ設定用構造体 F_FPM_FEATURE pfeature_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_no_mask; // マッチング結果の個数 F_SEARCH_RESULT result_no_mask[RESULT_N]; // マッチング結果の格納用配列 INT result_num_mask; // マッチング結果の個数 F_SEARCH_RESULT result_mask[RESULT_N]; // マッチング結果の格納用配列 INT image_width, image_height; // 入力画像の幅、高さ INT ptn_width, ptn_height; //パタンの幅、高さ INT mask_type; // マスク画像の種別 /*画像関係の準備*/ //入力画像のパラメータ獲得 fnFIE_img_get_params(hImage, NULL, NULL, NULL, &image_width, &image_height); fnFIE_img_get_params(hptn, NULL, NULL, NULL, &ptn_width, &ptn_height); fnFIE_img_get_params(hmask, NULL, &mask_type, NULL, NULL, NULL); //もしマスク画像が2値画像ではなかった場合2値化 hbinmask = fnFIE_img_root_alloc(F_IMG_BIN, 1, image_width, image_height); if (mask_type != F_IMG_BIN) fnFIE_binarize(hmask, hbinmask, 1); else fnFIE_img_copy(hmask, hbinmask); //2値マスク画像をコピーすることで画素値0or1の濃淡画像を作成 huc8mask = fnFIE_img_root_alloc(F_IMG_UC8, 1, image_width, image_height); fnFIE_img_copy(hbinmask, huc8mask); /*パラメータの準備*/ // サーチの手法設定 matching_mode = F_FPM_NORMAL_MODE; // マッチングモードは通常モード method = F_FPM_SOBEL_EDGE; // エッジ取得方法はソーベルエッジ // サーチのマッチングパラメータ設定 matching_param.require_result_num = RESULT_N; matching_param.min_angle = 0; matching_param.max_angle = 0; 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 = 76; //領域スコア再計算パラメータ設定 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 = 76; //特徴量抽出パラメータ設定 pfeature_param.sobel_edge.mag_threshold = 120; pfeature_param.sobel_edge.nms_length = 2; //ソーベルエッジパラメータ設定 sobel.mag_threshold = 120; sobel.nms_length = 2; feature_param.sobel_edge = sobel; //マスターパタン生成用のパラメータ設定 offset.x = ptn_width / 2.0; offset.y = ptn_height / 2.0; //サーチ範囲設定 win.st.x = 0; win.st.y = 0; win.ed.x = image_width - 1; win.ed.y = image_height - 1; //マスターパタン登録 hfpm = fnFIE_fpm_alloc(hptn, NULL, offset, matching_mode, method, &feature_param, NULL); //FPM特徴量オブジェクトを生成 fpm_feat_obj = fnFIE_fpm_feature_alloc(hImage, matching_mode, method, &pfeature_param, FALSE, NULL); //マスクなしでマッチング実行 fnFIE_fpm_matching_feature(hfpm, fpm_feat_obj, NULL, win, &matching_param, result_no_mask, &result_num_no_mask); //サーチ対象画像の内、サーチしたくない部分にある特徴量をマスクで除外 fnFIE_fpm_feature_mask(fpm_feat_obj, huc8mask); //マスクありでマッチング実行 fnFIE_fpm_matching_feature(hfpm, fpm_feat_obj, NULL, win, &matching_param, result_mask, &result_num_mask); // 実行結果をコンソール出力 printf("Number of search results without mask:%d | Number of search results with mask:%d\n", result_num_no_mask, result_num_mask); printf(" x, y theta scale score | x, y theta scale score\n"); for (i = 0; i < result_num_no_mask; i++) { for (j = 0; j < result_num_mask;j++) { if (fnFIE_d4i5(result_no_mask[i].x) - fnFIE_d4i5(result_mask[j].x) == 0 && fnFIE_d4i5(result_no_mask[i].y) - fnFIE_d4i5(result_mask[j].y) == 0) { printf("%2d.[%8.3f,%8.3f] [%8.3f] [%8.3f] [%3d] | [%8.3f,%8.3f] [%8.3f] [%8.3f] [%3d] \n", i + 1, result_no_mask[i].x, result_no_mask[i].y, result_no_mask[i].q, result_no_mask[i].s, result_no_mask[i].score, result_mask[j].x, result_mask[j].y, result_mask[j].q, result_mask[j].s, result_mask[j].score); num = 1; } } if(num!=1) { printf("%2d.[%8.3f,%8.3f] [%8.3f] [%8.3f] [%3d] | delete\n",i+1, result_no_mask[i].x, result_no_mask[i].y, result_no_mask[i].q, result_no_mask[i].s, result_no_mask[i].score); } num = 0; } //オブジェクトの解放 fnFIE_free_object(hfpm); fnFIE_free_object(hbinmask); fnFIE_free_object(huc8mask); fnFIE_free_object(fpm_feat_obj); } INT main(VOID) { //ライブラリのセットアップ fnFIE_setup(); FHANDLE hImage = NULL; // 入力画像用ハンドル FHANDLE hptn = NULL; // FPMオブジェクト用ハンドル FHANDLE hmsk = NULL; // FPMオブジェクト用ハンドル //画像の読み込み fnFIE_load_bmp("smp.bmp", &hImage, F_COLOR_IMG_TYPE_UC8); fnFIE_load_bmp("ptn_C.bmp", &hptn, F_COLOR_IMG_TYPE_UC8); fnFIE_load_bmp("mask.bmp", &hmsk, F_COLOR_IMG_TYPE_UC8); //サーチの実行処理 sample_fpm(hImage, hptn, hmsk); //オブジェクト解放 fnFIE_free_object(hptn); fnFIE_free_object(hImage); fnFIE_free_object(hmsk); //ライブラリの終了処理 fnFIE_teardown(); return 0; }
![]() (a) | ![]() (b) | ![]() (c) | ![]() (d)
|
(a)サーチ対象画像。このサンプルコードでは基板上にある『C』の文字をサーチしている。
(b)マスク画像。除外したい部分が白、サーチを行いたい部分が黒となっている。
(c)本関数未使用時に検出した座標を描画した画像。四隅の穴など余計な部分も検出されてしまっている。
(d)本関数使用時に検出した座標を描画した画像。(b)画像の範囲のみの検出結果が表示されている。
INT FVALGAPI fnFIE_fpm_feature_get_num | ( | FHANDLE | hfeature, | |
INT * | pfeature_num | |||
) |
特徴量数の取得
特徴量オブジェクトに格納されている特徴量の数を取得します。
[in] | hfeature | FPM特徴量オブジェクト |
[out] | pfeature_num | ハンドル内に格納されている特徴量数 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 引数オブジェクトの種別が異常 | |
F_ERR_INVALID_PARAM | 引数異常 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_fpm_feature_get_edges | ( | FHANDLE | hfeature, | |
F_DEDGE * | pedges | |||
) |
特徴量の取得(勾配方向付きエッジ)
特徴量オブジェクトに格納されている特徴量データを勾配方向付きエッジ情報データ型で取得します。
[in] | hfeature | FPM特徴量オブジェクト |
[out] | pedges | 取得した特徴量データ 予め fnFIE_fpm_feature_get_num() によって特徴量の数を取得し、必要な領域を確保する必要があります。 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 引数オブジェクトの種別が異常 | |
F_ERR_INVALID_PARAM | 引数異常 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_fpm_feature_get_matching_mode | ( | FHANDLE | hfeature, | |
enum f_fpm_mode * | pmatching_mode | |||
) |
特徴量取得マッチングモードの取得
特徴量オブジェクトを生成した際のマッチングモードを取得します。
[in] | hfeature | FPM特徴量オブジェクト |
[out] | pmatching_mode | FPMを行う際のマッチングモード
|
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 引数オブジェクトの種別が異常 | |
F_ERR_INVALID_PARAM | 引数異常 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_fpm_feature_get_method | ( | FHANDLE | hfeature, | |
enum f_fpm_featedge * | pmethod | |||
) |
特徴量抽出手法の取得
特徴量オブジェクトを生成した際の特徴量抽出手法を取得します。
[in] | hfeature | FPM特徴量オブジェクト |
[out] | pmethod | 特徴量抽出手法
|
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_OBJECT | 引数オブジェクトの種別が異常 | |
F_ERR_INVALID_PARAM | 引数異常 | |
F_ERR_NODATA | 抽出手法は存在しません( FPMオブジェクトは fnFIE_fpm_feature_import_alloc() によって生成されました ) | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |