マッチングで使用した特徴量の取得

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

Syntax

C#
[ObsoleteAttribute("Please use CFviFPM2Template.GetMatchingEdgesD64")]
public static CFviEdgeResultD64 GetMatchingEdges(
	CFviFPM2Template src
)
Visual Basic
<ObsoleteAttribute("Please use CFviFPM2Template.GetMatchingEdgesD64")> 
Public Shared Function GetMatchingEdges ( 
	src As CFviFPM2Template
) As CFviEdgeResultD64

Parameters

src
Type: FVIL.FPM2..::..CFviFPM2Template
取得対象のテンプレート特徴量クラス

Return Value

Type: CFviEdgeResultD64
取得したエッジ点群を返します。

Remarks

マッチングで使用した特徴量データを勾配方向付きエッジデータで取得します。
このデータは、CFviFPM2Matching でマッチングを実行したあとに有効になります。 マッチングを実行した際に マッチング対象の特徴量クラス(GetFeatureEdges()()()())から 特徴量データを複製し、クラス内(CFviFPM2Template)に保管しています。

この関数は CFviFPM2Template.GetMatchingEdges()()()() の改良版です。 データコピーやインスタンス生成のコストを削減できるため、高速に取得できます。

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


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

関連する FIE 関数:

fnFIE_fpm_get_matching_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>
        /// FPM2.Function.GetMatchingEdges メソッド.
        /// </summary>
        /// <remarks>
        /// 相関エッジ法.
        /// </remarks>
        [FvPluginExecute]
        public void GetMatchingEdges_CorrelationParam()
        {
            FVIL.Edge.CFviEdge2DCorrelationParam param = new FVIL.Edge.CFviEdge2DCorrelationParam();

            param.RegionWidth = 13;
            param.RegionHeight = 5;
            param.SigmoidK = 1.0;
            param.VarThreshold = 20.0;
            param.EdgeThreshold = 40;
            param.NmsLength = 6;

            GetMatchingEdges(Defs.ResultDir + "/FPM2.GetMatchingEdges_CorrelationParam.png", param);
        }

        // ============================================================
        /// <summary>
        /// FPM2.Function.GetMatchingEdges メソッド.
        /// </summary>
        /// <remarks>
        /// ソーベル法.
        /// </remarks>
        [FvPluginExecute]
        public void GetMatchingEdges_SobelParam()
        {
            FVIL.Edge.CFviEdge2DSobelParam param = new FVIL.Edge.CFviEdge2DSobelParam();

            param.EdgeThreshold = 120;
            param.NmsLength = 1;

            GetMatchingEdges(Defs.ResultDir + "/FPM2.GetMatchingEdges_SobelParam.png", param);
        }

        // ============================================================
        /// <summary>
        /// CFviFPM2Template クラス.
        /// </summary>
        public void GetMatchingEdges(string filename, FVIL.Data.CFviDataObject param)
        {
            try
            {
                // 1) インスタンスの準備.
                FVIL.FPM2.CFviFPM2Matching parser = new FVIL.FPM2.CFviFPM2Matching();
                FVIL.Edge.CFviEdgeResultD64 result = new FVIL.Edge.CFviEdgeResultD64();

                // 2) 処理対象画像の取り込み.
                FVIL.Data.CFviImage src = new FVIL.Data.CFviImage();
                FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/floppy_hough.jpg", src, FVIL.PixelMode.Unpacking);

                // 3) 処理対象画像の有効性検査.
                int valid = FVIL.FPM2.CFviFPM2Template.CheckValidity(src);
                if (valid != FVIL.ErrorCode._SUCCESS)
                    throw new FVIL.CFviException(valid, "FVIL.FPM2.CFviFPM2Template.CheckValidity");

                // 4) パラメータの設定.
                FVIL.FPM2.CFviFPM2Feature feature = new FVIL.FPM2.CFviFPM2Feature();
                feature.Create( src, FVIL.FPM2.MatchMode.Normal, param, false);
                parser.Target = feature;

                FVIL.FPM2.CFviFPM2Template template = new FVIL.FPM2.CFviFPM2Template();
                template.Create(src, FVIL.FPM2.MatchMode.Normal, param, new FVIL.Data.CFviPoint(0, 0), null);
                parser.Template = template;

                // 5) 画像処理実行.
                parser.Execute();

                // E) 処理結果の取得.
                FVIL.Edge.CFviEdgeResultD64 edges = FVIL.FPM2.Function.GetMatchingEdges(parser.Template);

                // E) 確認用.
                {
                    FVIL.Data.CFviImage image = new FVIL.Data.CFviImage();
                    FVIL.Paint.Function.DrawPoints(image, edges.ToCFviEdgeData(), 200.0);
                    FVIL.File.Function.SaveImageFile(filename, image);
                }
            }
            catch (FVIL.CFviException ex)
            {
                Assert.Fail("Function:{0} ErrorCode:{1}", ex.Function, ex.ErrorCode);
            }
        }
    }
}


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>
        ''' FPM2.Function.GetMatchingEdges メソッド.
        ''' </summary>
        ''' <remarks>
        ''' 相関エッジ法.
        ''' </remarks>
        <FvPluginExecute> _
        Public Sub GetMatchingEdges_CorrelationParam()
            Dim param As New FVIL.Edge.CFviEdge2DCorrelationParam()

            param.RegionWidth = 13
            param.RegionHeight = 5
            param.SigmoidK = 1.0
            param.VarThreshold = 20.0
            param.EdgeThreshold = 40
            param.NmsLength = 6

            GetMatchingEdges(Defs.ResultDir & "/FPM2.GetMatchingEdges_CorrelationParam.png", param)
        End Sub

        ' ============================================================
        ''' <summary>
        ''' FPM2.Function.GetMatchingEdges メソッド.
        ''' </summary>
        ''' <remarks>
        ''' ソーベル法.
        ''' </remarks>
        <FvPluginExecute> _
        Public Sub GetMatchingEdges_SobelParam()
            Dim param As New FVIL.Edge.CFviEdge2DSobelParam()

            param.EdgeThreshold = 120
            param.NmsLength = 1

            GetMatchingEdges(Defs.ResultDir & "/FPM2.GetMatchingEdges_SobelParam.png", param)
        End Sub

        ' ============================================================
        ''' <summary>
        ''' CFviFPM2Template クラス.
        ''' </summary>
        Public Sub GetMatchingEdges(filename As String, param As FVIL.Data.CFviDataObject)
            Try
                ' 1) インスタンスの準備.
                Dim parser As New FVIL.FPM2.CFviFPM2Matching()
                Dim result As New FVIL.Edge.CFviEdgeResultD64()

                ' 2) 処理対象画像の取り込み.
                Dim src As New FVIL.Data.CFviImage()
                FVIL.File.[Function].LoadImageFile(Defs.TestImageDir & "/floppy_hough.jpg", src, FVIL.PixelMode.Unpacking)

                ' 3) 処理対象画像の有効性検査.
                Dim valid As Integer = FVIL.FPM2.CFviFPM2Template.CheckValidity(src)
                If valid <> FVIL.ErrorCode._SUCCESS Then
                    Throw New FVIL.CFviException(valid, "FVIL.FPM2.CFviFPM2Template.CheckValidity")
                End If

                ' 4) パラメータの設定.
                Dim feature As New FVIL.FPM2.CFviFPM2Feature()
                feature.Create(src, FVIL.FPM2.MatchMode.Normal, param, False)
                parser.Target = feature

                Dim template As New FVIL.FPM2.CFviFPM2Template()
                template.Create(src, FVIL.FPM2.MatchMode.Normal, param, New FVIL.Data.CFviPoint(0, 0), Nothing)
                parser.Template = template

                ' 5) 画像処理実行.
                parser.Execute()

                ' E) 処理結果の取得.
                Dim edges As FVIL.Edge.CFviEdgeResultD64 = FVIL.FPM2.[Function].GetMatchingEdges(parser.Template)

                ' E) 確認用.
                If True Then
                    Dim image As New FVIL.Data.CFviImage()
                    FVIL.Paint.[Function].DrawPoints(image, edges.ToCFviEdgeData(), 200.0)
                    FVIL.File.[Function].SaveImageFile(filename, image)
                End If
            Catch ex As FVIL.CFviException
                Assert.Fail("Function:{0} ErrorCode:{1}", ex.[Function], ex.ErrorCode)
            End Try
        End Sub
    End Class
End Namespace

Exceptions

ExceptionCondition
System..::..NullReferenceException引数に null が指定されました。
FVIL..::..CFviExceptionこの例外の原因については、上記のエラーコード表をご参照ください。

See Also