指定ポーズ下の対応点の取得
Namespace: FVIL.FPM2Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
[ObsoleteAttribute("Please use CFviFPM2Template.GetRelativeEdgesD64")] public static CFviEdgeResultD64 GetRelativeEdges( CFviFPM2Template src, int no, int err_wide ) |
Visual Basic |
---|
<ObsoleteAttribute("Please use CFviFPM2Template.GetRelativeEdgesD64")> Public Shared Function GetRelativeEdges ( src As CFviFPM2Template, no As Integer, err_wide As Integer ) As CFviEdgeResultD64 |
Parameters
- src
- Type: FVIL.FPM2..::..CFviFPM2Template
取得対象のテンプレート特徴量クラス
- no
- Type: System..::..Int32
対応するエッジを取得するサーチ回答番号 (0~)
- err_wide
- Type: System..::..Int32
誤差範囲 (0~)
Return Value
Type: CFviEdgeResultD64取得したエッジ点群を返します。
Remarks
マッチング回答として格納された番号を指定し、その回答に使用された対応エッジ情報を取得します。
このデータは、CFviFPM2Matching でマッチングを実行したあとに有効になります。
マッチングを実行した際に
マッチング対象の特徴量クラス(GetFeatureEdges()()()())から
特徴量データを複製し、クラス内(CFviFPM2Template)に保管しています。
この関数は CFviFPM2Template.GetRelativeEdges(Int32, Int32) の改良版です。 データコピーやインスタンス生成のコストを削減できるため、高速に取得できます。
処理に失敗した場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと Function メンバを参照してください。
エラーコード:
値 | ErrorCode メンバ | 内容 |
---|---|---|
51 | FVIL.ErrorCode.LICENSE_ERROR | ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。 |
1 | FVIL.ErrorCode.FAILED_TO_ALLOCATE | 処理の途中でメモリ確保に失敗しました。メモリが不足しています。 |
12 | FVIL.ErrorCode.INVALID_OBJECT | FPMオブジェクトが異常です。Create を実行してください。 |
関連する FIE 関数:
fnFIE_fpm_get_relative_edge
Examples
ソースコード:
C# | Copy |
---|---|
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.GetRelativeEdges メソッド. /// </summary> /// <remarks> /// 相関エッジ法. /// </remarks> [FvPluginExecute] public void GetRelativeEdges_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; GetRelativeEdges(Defs.ResultDir + "/FPM2.GetRelativeEdges_CorrelationParam.png", param); } // ============================================================ /// <summary> /// FPM2.Function.GetRelativeEdges メソッド. /// </summary> /// <remarks> /// ソーベル法. /// </remarks> [FvPluginExecute] public void GetRelativeEdges_SobelParam() { FVIL.Edge.CFviEdge2DSobelParam param = new FVIL.Edge.CFviEdge2DSobelParam(); param.EdgeThreshold = 120; param.NmsLength = 1; GetRelativeEdges(Defs.ResultDir + "/FPM2.GetRelativeEdges_SobelParam.png", param); } // ============================================================ /// <summary> /// CFviFPM2Template クラス. /// </summary> public void GetRelativeEdges(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.GetRelativeEdges(parser.Template, 0, 1); // 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 |
---|---|
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.GetRelativeEdges メソッド. ''' </summary> ''' <remarks> ''' 相関エッジ法. ''' </remarks> <FvPluginExecute> _ Public Sub GetRelativeEdges_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 GetRelativeEdges(Defs.ResultDir & "/FPM2.GetRelativeEdges_CorrelationParam.png", param) End Sub ' ============================================================ ''' <summary> ''' FPM2.Function.GetRelativeEdges メソッド. ''' </summary> ''' <remarks> ''' ソーベル法. ''' </remarks> <FvPluginExecute> _ Public Sub GetRelativeEdges_SobelParam() Dim param As New FVIL.Edge.CFviEdge2DSobelParam() param.EdgeThreshold = 120 param.NmsLength = 1 GetRelativeEdges(Defs.ResultDir & "/FPM2.GetRelativeEdges_SobelParam.png", param) End Sub ' ============================================================ ''' <summary> ''' CFviFPM2Template クラス. ''' </summary> Public Sub GetRelativeEdges(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].GetRelativeEdges(parser.Template, 0, 1) ' 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
Exception | Condition |
---|---|
System..::..NullReferenceException | 引数に null が指定されました。 |
FVIL..::..CFviException | この例外の原因については、上記のエラーコード表をご参照ください。 |