圧縮特徴量の取得(マスターパタンの特徴量)

Namespace: FVIL.FPM2
Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)

Syntax

C#
public static void GetCompressedTemplateEdges(
	CFviFPM2Template templ,
	CFviEdgeResultD64 edges
)
Visual Basic
Public Shared Sub GetCompressedTemplateEdges ( 
	templ As CFviFPM2Template,
	edges As CFviEdgeResultD64
)

Parameters

templ
Type: FVIL.FPM2..::..CFviFPM2Template
特徴量オブジェクト (テンプレート)
edges
Type: FVIL.Edge..::..CFviEdgeResultD64
取得した特徴量を格納するオブジェクト(内部で再確保されます。)

Remarks

マスターパタンの特徴量から圧縮特徴量を取得します。

処理に失敗した場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。


エラーコード:
ErrorCode メンバ内容
51FVIL.ErrorCode.LICENSE_ERROR ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。
1FVIL.ErrorCode.FAILED_TO_ALLOCATE処理の途中でメモリ確保に失敗しました。メモリが不足しています。
11FVIL.ErrorCode.INVALID_PARAMETERパラメータが不正です。
12FVIL.ErrorCode.INVALID_OBJECT特徴量オブジェクトが異常です。
52FVIL.ErrorCode.UNEXPECTED_ERROR特徴量が見つかりません。

関連する FIE 関数:

fnFIE_fpm_get_compressed_feature_edges

Examples

ソースコード:
C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using fvalgcli;    // FvPluginXXXX attribute requires fvalgcli

namespace User.SampleCode
{
    public partial class FPM2
    {
        /// <summary>
        /// 圧縮特徴量の取得.
        /// </summary>
        [FvPluginExecute]
        public void GetCompressedEdges()
        {
            System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod();
            Console.WriteLine("{0}.{1}", method.DeclaringType.FullName, method.Name);

            var timer = new FVIL.CFviTimeCounter();
            double msec;

            // 1) インスタンスの準備.
            using (var matching = new FVIL.FPM2.CFviFPM2Matching())
            using (var src = new FVIL.Data.CFviImage())
            using (var pattern = new FVIL.Data.CFviPattern())
            {
                // 2-1) 処理対象画像の取り込み.
                src.Load(Defs.TestImageDir + "/key_UC8_M.png");

                // 2-2) パタン画像の読み込み.
                pattern.Load(Defs.TestImageDir + "/key1.pat");

                // 3) パラメータ準備.

                // 3-1) (FPM2) 基本パラメータ設定.
                var param = matching.Param;
                param.Count = 10;
                param.AngleMin = new FVIL.Data.CFviAngle(-180);
                param.AngleMax = new FVIL.Data.CFviAngle(180);
                param.ScaleMin = 100;
                param.ScaleMax = 100;
                param.CompressionLevel = 3;
                param.ErrorRange = 1;
                param.ScoreThresholdL = 50;
                param.ScoreThresholdH = 50;

                // 3-4) (FPM2) 特徴量.
                var edge_param = new FVIL.Edge.CFviEdge2DSobelParam();
                edge_param.EdgeThreshold = 120;
                edge_param.NmsLength = 3;

                // 3-4-1) (FPM2) 特徴量(テンプレート) 生成.
                var templ = new FVIL.FPM2.CFviFPM2Template(pattern, FVIL.FPM2.MatchMode.Normal, edge_param);

                // 3-4-2) (FPM2) 特徴量(処理対象画像) 生成.
                var target = new FVIL.FPM2.CFviFPM2Feature(src, FVIL.FPM2.MatchMode.Normal, edge_param, false);

                // 4) パラメータ設定.
                matching.Param = param;
                matching.Target = target;
                matching.Template = templ;
                matching.EnableAreaScore = false;
                matching.EnableEssential = false;

                // 5) 画像処理実行.
                timer.Start();
                matching.Execute();
                msec = timer.Stop();
                Console.WriteLine("execute. {0} msec, count={1} ", msec.ToString("0.###"), matching.ResultSize);

                // 確認用) パタンのエッジ点.
                {
                    var edges_pattern = templ.GetFeatureEdges();
                    Console.WriteLine("edges={0}", edges_pattern.Count);
                }

                // 確認用) 処理対象画像のエッジ点.
                {
                    var edges_image = target.GetFeatureEdges();
                    Console.WriteLine("edges={0}", edges_image.Count);
                }

                // 圧縮特徴量の取得 (マスターパタンの特徴量)
                {
                    var edges = new FVIL.Edge.CFviEdgeResultD64();
                    FVIL.FPM2.Function.GetCompressedTemplateEdges(templ, edges);
                    Console.WriteLine("GetCompressedTemplateEdges: edges={0}", edges.Count);
                }

                // 圧縮特徴量の取得 (最後にマッチングに使用した特徴量)
                {
                    var edges = new FVIL.Edge.CFviEdgeResultD64();
                    FVIL.FPM2.Function.GetCompressedMatchingEdges(templ, edges);
                    Console.WriteLine("GetCompressedMatchingEdges: edges={0}", edges.Count);
                }

                // 圧縮特徴量の取得 (マッチング対象の特徴量オブジェクト)
                {
                    var edges = new FVIL.Edge.CFviEdgeResultD64();
                    FVIL.FPM2.Function.GetCompressedFeatureEdges(templ, target, edges);
                    Console.WriteLine("GetCompressedFeatureEdges: edges={0}", edges.Count);
                }
            }
        }
    }
}

出力結果:
Copy imageCopy
User.SampleCode.FPM2.GetCompressedEdges
execute. 2.861 msec, count=3 
edges=396
edges=1888
GetCompressedTemplateEdges: edges=51
GetCompressedMatchingEdges: edges=301
GetCompressedFeatureEdges: edges=301


ソースコード:
Visual Basic Copy imageCopy
Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports fvalgcli
' FvPluginXXXX attribute requires fvalgcli
Namespace SampleCode
    Public Partial Class FPM2
        ''' <summary>
        ''' 圧縮特徴量の取得.
        ''' </summary>
        <FvPluginExecute> _
        Public Sub GetCompressedEdges()
            Dim method As System.Reflection.MethodBase = System.Reflection.MethodBase.GetCurrentMethod()
            Console.WriteLine("{0}.{1}", method.DeclaringType.FullName, method.Name)

            Dim timer As New FVIL.CFviTimeCounter()
            Dim msec As Double

            ' 1) インスタンスの準備.
            Dim matching As New FVIL.FPM2.CFviFPM2Matching()
            Dim src As New FVIL.Data.CFviImage()
            Dim pattern As New FVIL.Data.CFviPattern()

            ' 2-1) 処理対象画像の取り込み.
            src.Load(Defs.TestImageDir & "/key_UC8_M.png")

            ' 2-2) パタン画像の読み込み.
            pattern.Load(Defs.TestImageDir & "/key1.pat")

            ' 3) パラメータ準備.

            ' 3-1) (FPM2) 基本パラメータ設定.
            Dim param As FVIL.FPM2.CFviFPM2Param = matching.Param
            param.Count = 10
            param.AngleMin = New FVIL.Data.CFviAngle(-180)
            param.AngleMax = New FVIL.Data.CFviAngle(180)
            param.ScaleMin = 100
            param.ScaleMax = 100
            param.CompressionLevel = 3
            param.ErrorRange = 1
            param.ScoreThresholdL = 50
            param.ScoreThresholdH = 50

            ' 3-4) (FPM2) 特徴量.
            Dim edge_param As New FVIL.Edge.CFviEdge2DSobelParam()
            edge_param.EdgeThreshold = 120
            edge_param.NmsLength = 3

            ' 3-4-1) (FPM2) 特徴量(テンプレート) 生成.
            Dim templ As New FVIL.FPM2.CFviFPM2Template(pattern, FVIL.FPM2.MatchMode.Normal, edge_param)

            ' 3-4-2) (FPM2) 特徴量(処理対象画像) 生成.
            Dim target As New FVIL.FPM2.CFviFPM2Feature(src, FVIL.FPM2.MatchMode.Normal, edge_param, False)

            ' 4) パラメータ設定.
            matching.Param = param
            matching.Target = target
            matching.Template = templ
            matching.EnableAreaScore = False
            matching.EnableEssential = False

            ' 5) 画像処理実行.
            timer.Start()
            matching.Execute()
            msec = timer.[Stop]()
            Console.WriteLine("execute. {0} msec, count={1} ", msec.ToString("0.###"), matching.ResultSize)

            ' 確認用) パタンのエッジ点.
            If True Then
                Dim edges_pattern = templ.GetFeatureEdges()
                Console.WriteLine("edges={0}", edges_pattern.Count)
            End If

            ' 確認用) 処理対象画像のエッジ点.
            If True Then
                Dim edges_image = target.GetFeatureEdges()
                Console.WriteLine("edges={0}", edges_image.Count)
            End If

            ' 圧縮特徴量の取得 (マスターパタンの特徴量)
            If True Then
                Dim edges As New FVIL.Edge.CFviEdgeResultD64()
                FVIL.FPM2.[Function].GetCompressedTemplateEdges(templ, edges)
                Console.WriteLine("GetCompressedTemplateEdges: edges={0}", edges.Count)
            End If

            ' 圧縮特徴量の取得 (最後にマッチングに使用した特徴量)
            If True Then
                Dim edges As New FVIL.Edge.CFviEdgeResultD64()
                FVIL.FPM2.[Function].GetCompressedMatchingEdges(templ, edges)
                Console.WriteLine("GetCompressedMatchingEdges: edges={0}", edges.Count)
            End If

            ' 圧縮特徴量の取得 (マッチング対象の特徴量オブジェクト)
            If True Then
                Dim edges As New FVIL.Edge.CFviEdgeResultD64()
                FVIL.FPM2.[Function].GetCompressedFeatureEdges(templ, target, edges)
                Console.WriteLine("GetCompressedFeatureEdges: edges={0}", edges.Count)
            End If
        End Sub
    End Class
End Namespace

出力結果:
Copy imageCopy
User.SampleCode.FPM2.GetCompressedEdges
execute. 2.861 msec, count=3 
edges=396
edges=1888
GetCompressedTemplateEdges: edges=51
GetCompressedMatchingEdges: edges=301
GetCompressedFeatureEdges: edges=301

Exceptions

ExceptionCondition
FVIL..::..CFviExceptionこの例外の原因については、上記のエラーコード表をご参照ください。

See Also