一連のマッチング実行
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static int fnFIE_fpm_matching( FHANDLE hfpm, FHANDLE htarget, FHANDLE hmask_match, BOX_T window, f_fpm_featedge method, ref F_FPM_FEATURE pfeature_param, ref F_FPM_MATCH pmatching_param, ref F_FPM_AREASCORE pareascore_param, F_SEARCH_RESULT_PTR pmatching_result, ref int presult_num ) |
Visual Basic |
---|
Public Shared Function fnFIE_fpm_matching ( hfpm As FHANDLE, htarget As FHANDLE, hmask_match As FHANDLE, window As BOX_T, method As f_fpm_featedge, ByRef pfeature_param As F_FPM_FEATURE, ByRef pmatching_param As F_FPM_MATCH, ByRef pareascore_param As F_FPM_AREASCORE, pmatching_result As F_SEARCH_RESULT_PTR, ByRef presult_num As Integer ) As Integer |
Parameters
- hfpm
- Type: fvalgcli..::..FHANDLE
FPMオブジェクト
- htarget
- Type: fvalgcli..::..FHANDLE
FPMでマッチング対象となる画像オブジェクト、もしくは対象画像から得られた特徴量が格納されたオブジェクトを指定します。 画像オブジェクト、特徴量オブジェクト、FPMオブジェクトが有効です。 画像オブジェクトが指定された場合には、画像タイプ uc8 のみ対応し、チャネル数は 1 でなければいけません。
- hmask_match
- Type: fvalgcli..::..FHANDLE
マッチングエリアへのマスク情報 画像タイプ uc8 のみ対応し、チャネル数は 1 でなければいけません。 IntPtr.Zero が指定された場合はマスクを使用しません。
- window
- Type: fvalgcli..::..BOX_T
マッチングエリア
- method
- Type: fvalgcli..::..f_fpm_featedge
特徴量抽出手法- F_FPM_SOBEL_EDGE ソーベルによる特徴量抽出
- F_FPM_CORR_EDGE 相関エッジによる特徴量抽出
- pfeature_param
- Type: fvalgcli..::..F_FPM_FEATURE%
特徴量計測パラメータ構造体へのポインタ htargetに特徴量オブジェクトを指定した場合は使用しません。 htargetに画像オブジェクトが指定され、IntPtr.Zero が指定された場合はマスターパタン登録時のパラメータを使用します。
- pmatching_param
- Type: fvalgcli..::..F_FPM_MATCH%
マッチングパラメータ構造体へのポインタ
- pareascore_param
- Type: fvalgcli..::..F_FPM_AREASCORE%
領域スコア再計算パラメータへのポインタ(領域スコア再計算を行わない場合には IntPtr.Zero を指定)
- pmatching_result
- Type: fvalgcli..::..F_SEARCH_RESULT_PTR
マッチング結果
- presult_num
- Type: System..::..Int32%
マッチング結果個数
Return Value
Type: Int32以下のエラーコードを返します。
エラーコード:
f_err | 内容 |
---|---|
F_ERR_NONE | 正常終了 |
F_ERR_INVALID_OBJECT | 引数オブジェクトの種別が異常 |
F_ERR_INVALID_IMAGE | 引数画像オブジェクトが異常 |
F_ERR_NOMEMORY | メモリ不足 |
F_ERR_INVALID_PARAM | 引数異常 |
F_ERR_FPM_NOFEATURE | 特徴量が見つかりません |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
Remarks
Examples
C# | Copy |
---|---|
// $Revision: 1.1 $ using System; using System.Collections.Generic; using System.Text; using fvalgcli; namespace TC { public partial class FIE { [FvPluginExecute] public void fnFIE_fpm_matching() { string ptn_file = TestImageDir + "/testdata/fpm00.bmp"; string src_file = TestImageDir + "/testdata/fpm00.bmp"; int status = (int)f_err.F_ERR_NONE; FHANDLE hPattern = FHANDLE.Zero; FHANDLE hSrc = FHANDLE.Zero; FHANDLE hFPM = FHANDLE.Zero; FHANDLE hFeature = FHANDLE.Zero; FHANDLE _hPattern = FHANDLE.Zero; F_SEARCH_RESULT_PTR result = IntPtr.Zero; try { // 画像ファイルの読み込み. api.fnFIE_load_bmp(ptn_file, ref _hPattern, f_color_img_type.F_COLOR_IMG_TYPE_UC8); api.fnFIE_load_bmp(src_file, ref hSrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8); hPattern = api.fnFIE_img_child_alloc(_hPattern, 300, 300, 100, 100); // ===== 特徴量抽出関連 ===== // --- エッジ検出手法とパラメータ. f_fpm_mode matching_mode = f_fpm_mode.F_FPM_SPEED_MODE; f_fpm_featedge method = f_fpm_featedge.F_FPM_SOBEL_EDGE; F_FPM_FEATURE feature_param = new F_FPM_FEATURE(); feature_param.sobel_edge = F_EDGE_SOBEL_PARAMS.init(120, 3); int perr_code = 0; bool border = true; DPNT_T offset = new DPNT_T(); // --- 特徴量抽出. hFPM = api.fnFIE_fpm_alloc(hPattern, IntPtr.Zero, offset, matching_mode, method, ref feature_param, ref perr_code); hFeature = api.fnFIE_fpm_feature_alloc(hSrc, matching_mode, method, ref feature_param, border, ref perr_code); // ===== マッチング関連 ===== // --- マッチングパラメータ. F_FPM_MATCH matching_param = new F_FPM_MATCH(); matching_param.require_result_num = 10; matching_param.min_angle = -180; matching_param.max_angle = 179; matching_param.min_scale = 100; matching_param.max_scale = 100; matching_param.coarse_comp_rate = 1; matching_param.coarse_err_wide = 1; matching_param.coarse_highcomp_threshold = 50; matching_param.coarse_lowcomp_threshold = 50; matching_param.refine_execute = true; matching_param.refine_threshold = 60; matching_param.refine_err_wide = 1; matching_param.polarity = f_fpm_polarity.F_FPM_SAME_POLARITY; // --- 領域スコア算出パラメータ. F_FPM_AREASCORE areascore_param = new F_FPM_AREASCORE(); 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.err_wide = 1; areascore_param.noise_weight = 0.2; areascore_param.threshold = 60; // --- 処理範囲. BOX_T window = new BOX_T(); window.st.x = 0; window.st.y = 0; window.ed.x = api.fnFIE_img_get_width(hSrc) - 1; window.ed.y = api.fnFIE_img_get_height(hSrc) - 1; result = F_SEARCH_RESULT_PTR.alloc(matching_param.require_result_num); int result_num = 0; // マスクの設定. fnFIE_fpm_set_pattern_mask(hFPM); // マスク情報の取得. fnFIE_fpm_get_pattern_mask(hFPM); // パタンマスク情報のクリア. fnFIE_fpm_clear_pattern_mask(hFPM); // マッチング回答オフセット値の設定. fnFIE_fpm_set_pattern_offset(hFPM); // マッチング回答オフセット値の取得. fnFIE_fpm_get_pattern_offset(hFPM); // マッチング回答オフセット値の自動設定. fnFIE_fpm_set_pattern_offset_gravity(hFPM); // エッジ減点領域の設定. fnFIE_fpm_set_pattern_edgeless_mask(hFPM); // 不可欠領域の設定. fnFIE_fpm_set_pattern_essential(hFPM); // 不可欠領域情報の取得. fnFIE_fpm_get_pattern_essential(hFPM); // 高精度ポーズ推定モードの設定. fnFIE_fpm_set_refine_mode(hFPM); // 高精度ポーズ推定モードの取得. fnFIE_fpm_get_refine_mode(hFPM); // FPMオブジェクト結果データのクリア. fnFIE_fpm_clear_result(hFPM); //マッチング実行. status = api.fnFIE_fpm_matching(hFPM, hFeature, FHANDLE.Zero, window, method, ref feature_param, ref matching_param, ref areascore_param, result, ref result_num); Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "fnFIE_fpm_matching: エラーが発生しました。({0})", (f_err)status); Console.WriteLine("fnFIE_fpm_matching"); Console.WriteLine("result_num={0}", result_num); for (int i = 0; i < result_num; i++) Console.WriteLine("result[{0}]=({1},{2},{3},{4}) score={5}", i, result[i].x, result[i].y, result[i].q, result[i].s, result[i].score); // 領域スコアの再計算. fnFIE_fpm_matching_areascore(hFPM, hFeature); // 不可欠領域スコア計算. fnFIE_fpm_matching_essential(hFPM, hFeature); // FPMオブジェクト生成時のマッチングモードの取得. fnFIE_fpm_get_matching_mode(hFPM); // マッチングで使用した圧縮特徴量を取得(勾配方向付きエッジ型). fnFIE_fpm_get_compressed_feature_edges(hFPM, hFeature); // マッチングで使用した特徴量を取得(勾配方向付きエッジ型) . fnFIE_fpm_get_matching_feature_edges(hFPM); // エッジ減点領域情報の取得. fnFIE_fpm_get_pattern_edgeless_mask(hFPM); // 特定領域エッジ減点スコア計算. fnFIE_fpm_matching_recalc_with_edgeless_mask(hFPM, hFeature); // マスターパタン特徴量を取得(勾配方向付きエッジ型). fnFIE_fpm_get_pattern_feature_edges(hFPM); // マスターパタン画像の取得. fnFIE_fpm_get_pattern_image(hFPM); // マスターパタン画像サイズ取得. fnFIE_fpm_get_pattern_size(hFPM); // FPM特徴量オブジェクトからのマッチング実行. fnFIE_fpm_matching_feature(hFPM, hFeature, window, matching_param); // 特徴量の取得(勾配方向付きエッジ). fnFIE_fpm_feature_get_edges(hFeature); // 特徴量取得マッチングモードの取得. fnFIE_fpm_feature_get_matching_mode(hFeature); // 特徴量抽出手法の取得. fnFIE_fpm_feature_get_method(hFeature); // 特徴量のマスク. fnFIE_fpm_feature_mask(hFeature); // 特徴量パラメータ取得. fnFIE_fpm_get_pattern_feature_param(hFPM); // 指定ポーズ下の対応点取得. fnFIE_fpm_get_relative_edge(hFPM, hFeature); } finally { hPattern.Dispose(); hSrc.Dispose(); hFeature.Dispose(); hFPM.Dispose(); result.Dispose(); _hPattern.Dispose(); } } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.1 $ Imports System.Collections.Generic Imports System.Text Imports fvalgcli Public Partial Class FIE <FvPluginExecute> _ Public Sub fnFIE_fpm_matching() Dim ptn_file As String = TestImageDir & "/testdata/fpm00.bmp" Dim src_file As String = TestImageDir & "/testdata/fpm00.bmp" Dim status As Integer = CInt(f_err.F_ERR_NONE) Dim hPattern As FHANDLE = FHANDLE.Zero Dim hSrc As FHANDLE = FHANDLE.Zero Dim hFPM As FHANDLE = FHANDLE.Zero Dim hFeature As FHANDLE = FHANDLE.Zero Dim _hPattern As FHANDLE = FHANDLE.Zero Dim result As F_SEARCH_RESULT_PTR = IntPtr.Zero Try ' 画像ファイルの読み込み. api.fnFIE_load_bmp(ptn_file, _hPattern, f_color_img_type.F_COLOR_IMG_TYPE_UC8) api.fnFIE_load_bmp(src_file, hSrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8) hPattern = api.fnFIE_img_child_alloc(_hPattern, 300, 300, 100, 100) ' ===== 特徴量抽出関連 ===== ' --- エッジ検出手法とパラメータ. Dim matching_mode As f_fpm_mode = f_fpm_mode.F_FPM_SPEED_MODE Dim method As f_fpm_featedge = f_fpm_featedge.F_FPM_SOBEL_EDGE Dim feature_param As New F_FPM_FEATURE() feature_param.sobel_edge = F_EDGE_SOBEL_PARAMS.init(120, 3) Dim perr_code As Integer = 0 Dim border As Boolean = True Dim offset As New DPNT_T() ' --- 特徴量抽出. hFPM = api.fnFIE_fpm_alloc(hPattern, IntPtr.Zero, offset, matching_mode, method, feature_param, _ perr_code) hFeature = api.fnFIE_fpm_feature_alloc(hSrc, matching_mode, method, feature_param, border, perr_code) ' ===== マッチング関連 ===== ' --- マッチングパラメータ. Dim matching_param As New F_FPM_MATCH() matching_param.require_result_num = 10 matching_param.min_angle = -180 matching_param.max_angle = 179 matching_param.min_scale = 100 matching_param.max_scale = 100 matching_param.coarse_comp_rate = 1 matching_param.coarse_err_wide = 1 matching_param.coarse_highcomp_threshold = 50 matching_param.coarse_lowcomp_threshold = 50 matching_param.refine_execute = True matching_param.refine_threshold = 60 matching_param.refine_err_wide = 1 matching_param.polarity = f_fpm_polarity.F_FPM_SAME_POLARITY ' --- 領域スコア算出パラメータ. Dim areascore_param As New F_FPM_AREASCORE() 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.err_wide = 1 areascore_param.noise_weight = 0.2 areascore_param.threshold = 60 ' --- 処理範囲. Dim window As New BOX_T() window.st.x = 0 window.st.y = 0 window.ed.x = api.fnFIE_img_get_width(hSrc) - 1 window.ed.y = api.fnFIE_img_get_height(hSrc) - 1 result = F_SEARCH_RESULT_PTR.alloc(matching_param.require_result_num) Dim result_num As Integer = 0 ' マスクの設定. fnFIE_fpm_set_pattern_mask(hFPM) ' マスク情報の取得. fnFIE_fpm_get_pattern_mask(hFPM) ' パタンマスク情報のクリア. fnFIE_fpm_clear_pattern_mask(hFPM) ' マッチング回答オフセット値の設定. fnFIE_fpm_set_pattern_offset(hFPM) ' マッチング回答オフセット値の取得. fnFIE_fpm_get_pattern_offset(hFPM) ' マッチング回答オフセット値の自動設定. fnFIE_fpm_set_pattern_offset_gravity(hFPM) ' エッジ減点領域の設定. fnFIE_fpm_set_pattern_edgeless_mask(hFPM) ' 不可欠領域の設定. fnFIE_fpm_set_pattern_essential(hFPM) ' 不可欠領域情報の取得. fnFIE_fpm_get_pattern_essential(hFPM) ' 高精度ポーズ推定モードの設定. fnFIE_fpm_set_refine_mode(hFPM) ' 高精度ポーズ推定モードの取得. fnFIE_fpm_get_refine_mode(hFPM) ' FPMオブジェクト結果データのクリア. fnFIE_fpm_clear_result(hFPM) 'マッチング実行. status = api.fnFIE_fpm_matching(hFPM, hFeature, FHANDLE.Zero, window, method, feature_param, _ matching_param, areascore_param, result, result_num) Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "fnFIE_fpm_matching: エラーが発生しました。({0})", CType(status, f_err)) Console.WriteLine("fnFIE_fpm_matching") Console.WriteLine("result_num={0}", result_num) For i As Integer = 0 To result_num - 1 Console.WriteLine("result[{0}]=({1},{2},{3},{4}) score={5}", i, result(i).x, result(i).y, result(i).q, result(i).s, _ result(i).score) Next ' 領域スコアの再計算. fnFIE_fpm_matching_areascore(hFPM, hFeature) ' 不可欠領域スコア計算. fnFIE_fpm_matching_essential(hFPM, hFeature) ' FPMオブジェクト生成時のマッチングモードの取得. fnFIE_fpm_get_matching_mode(hFPM) ' マッチングで使用した圧縮特徴量を取得(勾配方向付きエッジ型). fnFIE_fpm_get_compressed_feature_edges(hFPM, hFeature) ' マッチングで使用した特徴量を取得(勾配方向付きエッジ型) . fnFIE_fpm_get_matching_feature_edges(hFPM) ' エッジ減点領域情報の取得. fnFIE_fpm_get_pattern_edgeless_mask(hFPM) ' 特定領域エッジ減点スコア計算. fnFIE_fpm_matching_recalc_with_edgeless_mask(hFPM, hFeature) ' マスターパタン特徴量を取得(勾配方向付きエッジ型. fnFIE_fpm_get_pattern_feature_edges(hFPM) ' マスターパタン画像の取得. fnFIE_fpm_get_pattern_image(hFPM) ' マスターパタン画像サイズ取得. fnFIE_fpm_get_pattern_size(hFPM) ' FPM特徴量オブジェクトからのマッチング実行. fnFIE_fpm_matching_feature(hFPM, hFeature, window, matching_param) ' 特徴量の取得(勾配方向付きエッジ). fnFIE_fpm_feature_get_edges(hFeature) ' 特徴量取得マッチングモードの取得. fnFIE_fpm_feature_get_matching_mode(hFeature) ' 特徴量抽出手法の取得. fnFIE_fpm_feature_get_method(hFeature) ' 特徴量のマスク. fnFIE_fpm_feature_mask(hFeature) ' 特徴量パラメータ取得. fnFIE_fpm_get_pattern_feature_param(hFPM) ' 指定ポーズ下の対応点取得. fnFIE_fpm_get_relative_edge(hFPM, hFeature) Finally hPattern.Dispose() hSrc.Dispose() hFeature.Dispose() hFPM.Dispose() result.Dispose() _hPattern.Dispose() End Try End Sub End Class |