一連のマッチング実行

Namespace: fvalgcli
Assembly: 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 imageCopy
//    $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 imageCopy
'    $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

See Also