特徴量の取得 (マッチング対象)

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

Syntax

C#
[ObsoleteAttribute("Please use CFviFPM2Feature.GetFeatureEdgesD64")]
public static CFviEdgeResultD64 GetFeatureEdges(
	CFviFPM2Feature src
)
Visual Basic
<ObsoleteAttribute("Please use CFviFPM2Feature.GetFeatureEdgesD64")> 
Public Shared Function GetFeatureEdges ( 
	src As CFviFPM2Feature
) As CFviEdgeResultD64

Parameters

src
Type: FVIL.FPM2..::..CFviFPM2Feature
取得対象の特徴量クラス

Return Value

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

Remarks

引数に指定された FPM特徴量オブジェクトに格納されている特徴量データを勾配方向付きエッジデータで取得します。

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

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


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

関連する FIE 関数:

fnFIE_fpm_feature_get_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.GetFeatureEdges メソッド.
        /// </summary>
        /// <remarks>
        /// 相関エッジ法.
        /// </remarks>
        [FvPluginExecute]
        public void GetFeatureEdges_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;

            GetFeatureEdges(Defs.ResultDir + "/FPM2.GetFeatureEdges_Feature_CorrelationParam.png", param);
        }

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

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

            GetFeatureEdges(Defs.ResultDir + "/FPM2.GetFeatureEdges_Feature_SobelParam.png", param);
        }

        /// <summary>
        /// CFviFPM2Feature クラス.
        /// </summary>
        /// <param name="param"></param>
        public void GetFeatureEdges(string filename, FVIL.Data.CFviDataObject param)
        {
            // 1) インスタンスの準備.
            FVIL.FPM2.CFviFPM2Feature parser = new FVIL.FPM2.CFviFPM2Feature();
            FVIL.Edge.CFviEdgeResultD64 result = new FVIL.Edge.CFviEdgeResultD64();
            FVIL.Data.CFviImage src = new FVIL.Data.CFviImage();

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

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

            // 4) 画像処理実行.
            parser.Create(src, FVIL.FPM2.MatchMode.Normal, param, false);

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

            // E) 確認用.
            {
                FVIL.Data.CFviImage image = new FVIL.Data.CFviImage();
                FVIL.Paint.Function.DrawPoints(image, edges.ToCFviEdgeData(), 200.0);
                FVIL.File.Function.SaveImageFile(filename, image);
            }
        }
    }
}


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.GetFeatureEdges メソッド.
        ''' </summary>
        ''' <remarks>
        ''' 相関エッジ法.
        ''' </remarks>
        <FvPluginExecute> _
        Public Sub GetFeatureEdges_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

            GetFeatureEdges(Defs.ResultDir & "/FPM2.GetFeatureEdges_Feature_CorrelationParam.png", param)
        End Sub

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

            param.EdgeThreshold = 120
            param.NmsLength = 1

            GetFeatureEdges(Defs.ResultDir & "/FPM2.GetFeatureEdges_Feature_SobelParam.png", param)
        End Sub

        ''' <summary>
        ''' CFviFPM2Feature クラス.
        ''' </summary>
        ''' <param name="param"></param>
        Public Sub GetFeatureEdges(filename As String, param As FVIL.Data.CFviDataObject)
            ' 1) インスタンスの準備.
            Dim parser As New FVIL.FPM2.CFviFPM2Feature()
            Dim result As New FVIL.Edge.CFviEdgeResultD64()
            Dim src As New FVIL.Data.CFviImage()

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

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

            ' 4) 画像処理実行.
            parser.Create(src, FVIL.FPM2.MatchMode.Normal, param, False)

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

            ' 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
        End Sub
    End Class
End Namespace

Exceptions

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

See Also