円ハフ検出 (DEDGE_T 構造体指定)[再検出指示可]
Namespace: FVIL.HoughAssembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
public static HCD_CIRCLE_T_ARRAY CircleHough( DEDGE_T_ARRAY edges, CFviCircleHoughParam param, bool bRefine ) |
Visual Basic |
---|
Public Shared Function CircleHough ( edges As DEDGE_T_ARRAY, param As CFviCircleHoughParam, bRefine As Boolean ) As HCD_CIRCLE_T_ARRAY |
Parameters
- edges
- Type: FVIL..::..DEDGE_T_ARRAY
投票するエッジ点列 (4点以上)
- param
- Type: FVIL.Hough..::..CFviCircleHoughParam
円ハフ検出パラメータ
- bRefine
- Type: System..::..Boolean
検出円の再算出の指示
Return Value
Type: HCD_CIRCLE_T_ARRAY検出した円を返します。
Remarks
ハフ変換投票を行って、入力点列 edges から円を検出します。 入力点数は4点以上必要です。 入力点の中に重複点がない前提で処理を行います。
2次元エッジ検出クラス(CFviEdge2D)と連携する場合は、 エッジデータ(下記)を DEDGE_T_ARRAY に変換する必要があります。
処理に失敗した場合は例外を発行します。 例外の原因と発生位置を特定するには、発行された例外クラスの ErrorCode メンバと FunctionEx メンバを参照してください。
エラーコード:
値 | ErrorCode メンバ | 内容 |
---|---|---|
51 | FVIL.ErrorCode.LICENSE_ERROR | ライセンスキーが見つからない為、実行できません。 または、 FVIL._SetUp.InitVisionLibrary が実行されていません。 |
11 | FVIL.ErrorCode.INVALID_PARAMETER | パラメータに誤りがあります。 |
1 | FVIL.ErrorCode.FAILED_TO_ALLOCATE | メモリの確保に失敗しました。 |
29 | FVIL.ErrorCode.NOT_CALCULABLE | 計算不可能です。 |
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 Hough { // ============================================================ /// <summary> /// Hough.Function.CircleHough メソッド. /// </summary> /// <remarks> /// CircleHough (DEDGE_T_ARRAY, CFviCircleHoughParam) は /// CircleHough (DEDGE_T_ARRAY, CFviCircleHoughParam, Boolean) の /// 第3引数にfalse を設定した場合と同じ。 /// </remarks> [FvPluginExecute] public void CircleHough0() { CircleHough(false); } // ============================================================ /// <summary> /// Hough.Function.CircleHough メソッド. /// </summary> /// <remarks> /// CircleHough (DEDGE_T_ARRAY, CFviCircleHoughParam, Boolean) /// </remarks> [FvPluginExecute] public void CircleHough1() { CircleHough(true); } // ============================================================ /// <summary> /// Hough.Function.CircleHough メソッド. /// </summary> /// <remarks> /// CircleHough (DEDGE_T_ARRAY, CFviCircleHoughParam, Boolean) /// </remarks> public void CircleHough(Boolean bRefine) { // 1) インスタンスの準備. FVIL.Data.CFviImage src = new FVIL.Data.CFviImage(); FVIL.Hough.CFviCircleHoughParam param = new FVIL.Hough.CFviCircleHoughParam(); // 2) 処理対象画像の取り込み. FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/floppy_hough.jpg", src, FVIL.PixelMode.Unpacking); // 3) パラメータの設定. param.EdgePercent = 30; param.ObjectColor = FVIL.Hough.ObjectColor.BlackOrWhite; param.RadiusMin = 80; param.RadiusMax = 100; // 4) 画像処理実行. // --(1) エッジ点の取得. FVIL.Edge.CFviEdgeResultI32 result = GetEdge2D_EdgeResultI32(src); // --(2) 円ハフ検出. FVIL.HCD_CIRCLE_T_ARRAY array = FVIL.Hough.FunctionEx.CircleHough(result.ToDEDGE_T_ARRAY(), param, bRefine ); // E) 確認用. { FVIL.Data.CFviImage image = new FVIL.Data.CFviImage(); FVIL.Paint.Function.DrawPoints(image, result.ToCFviEdgeData(), 200.0); if (bRefine) { FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Hough.CircleHough1.png", image); } else { FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/Hough.CircleHough0.png", image); } } } } } |
Visual Basic | Copy |
---|---|
Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli ' FvPluginXXXX attribute requires fvalgcli Namespace SampleCode Public Partial Class Hough ' ============================================================ ''' <summary> ''' Hough.Function.CircleHough メソッド. ''' </summary> ''' <remarks> ''' CircleHough (DEDGE_T_ARRAY, CFviCircleHoughParam) は ''' CircleHough (DEDGE_T_ARRAY, CFviCircleHoughParam, Boolean) の ''' 第3引数にfalse を設定した場合と同じ。 ''' </remarks> <FvPluginExecute> _ Public Sub CircleHough0() CircleHough(False) End Sub ' ============================================================ ''' <summary> ''' Hough.Function.CircleHough メソッド. ''' </summary> ''' <remarks> ''' CircleHough (DEDGE_T_ARRAY, CFviCircleHoughParam, Boolean) ''' </remarks> <FvPluginExecute> _ Public Sub CircleHough1() CircleHough(True) End Sub ' ============================================================ ''' <summary> ''' Hough.Function.CircleHough メソッド. ''' </summary> ''' <remarks> ''' CircleHough (DEDGE_T_ARRAY, CFviCircleHoughParam, Boolean) ''' </remarks> Public Sub CircleHough(bRefine As [Boolean]) ' 1) インスタンスの準備. Dim src As New FVIL.Data.CFviImage() Dim param As New FVIL.Hough.CFviCircleHoughParam() ' 2) 処理対象画像の取り込み. FVIL.File.[Function].LoadImageFile(Defs.TestImageDir & "/floppy_hough.jpg", src, FVIL.PixelMode.Unpacking) ' 3) パラメータの設定. param.EdgePercent = 30 param.ObjectColor = FVIL.Hough.ObjectColor.BlackOrWhite param.RadiusMin = 80 param.RadiusMax = 100 ' 4) 画像処理実行. ' --(1) エッジ点の取得. Dim result As FVIL.Edge.CFviEdgeResultI32 = GetEdge2D_EdgeResultI32(src) ' --(2) 円ハフ検出. Dim array As FVIL.HCD_CIRCLE_T_ARRAY = FVIL.Hough.FunctionEx.CircleHough(result.ToDEDGE_T_ARRAY(), param, bRefine) ' E) 確認用. If True Then Dim image As New FVIL.Data.CFviImage() FVIL.Paint.[Function].DrawPoints(image, result.ToCFviEdgeData(), 200.0) If bRefine Then FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Hough.CircleHough1.png", image) Else FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/Hough.CircleHough0.png", image) End If End If End Sub End Class End Namespace |
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 Hough { // ============================================================ /// <summary> /// エッジ点の取得. /// </summary> /// <remarks> /// CFviEdge2D. /// CFviEdge2DSobelParam. /// CFviEdgeResultI32. /// </remarks> private FVIL.Edge.CFviEdgeResultI32 GetEdge2D_EdgeResultI32(FVIL.Data.CFviImage src) { // 1) インスタンスの準備. FVIL.Edge.CFviEdge2D parser = new FVIL.Edge.CFviEdge2D(); FVIL.Edge.CFviEdgeResultI32 result = new FVIL.Edge.CFviEdgeResultI32(); FVIL.Edge.CFviEdge2DSobelParam param = new FVIL.Edge.CFviEdge2DSobelParam(); FVIL.Data.CFviImage dst = new FVIL.Data.CFviImage(); // 2) 処理対象画像の有効性検査. int valid = FVIL.Edge.CFviEdge2D.CheckValidity(src); if (valid != FVIL.ErrorCode._SUCCESS) throw new FVIL.CFviException(valid, "FVIL.Edge.CFviEdge2D.CheckValidity"); // 3) 画像処理準備 (共通) parser.SrcImages[0] = src; parser.DstImages[0] = dst; if (!parser.IsValid()) // 有効性検査. parser.Validate(); // 有効化. parser.Result = result; // 4-1) パラメータ設定 (継承) parser.BorderMode = FVIL.BorderMode.None; parser.MagMode = FVIL.Edge.MagMode.XY; parser.SaveMode = FVIL.Edge.SaveMode.Mag | FVIL.Edge.SaveMode.Direct; // 4-2) パラメータ設定 (固有) param.EdgeThreshold = 120; param.NmsLength = 1; parser.Param = param; // 5) 画像処理実行. parser.Execute(); return result; } } } |
Visual Basic | Copy |
---|---|
Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli ' FvPluginXXXX attribute requires fvalgcli Namespace SampleCode Public Partial Class Hough ' ============================================================ ''' <summary> ''' エッジ点の取得. ''' </summary> ''' <remarks> ''' CFviEdge2D. ''' CFviEdge2DSobelParam. ''' CFviEdgeResultI32. ''' </remarks> Private Function GetEdge2D_EdgeResultI32(src As FVIL.Data.CFviImage) As FVIL.Edge.CFviEdgeResultI32 ' 1) インスタンスの準備. Dim parser As New FVIL.Edge.CFviEdge2D() Dim result As New FVIL.Edge.CFviEdgeResultI32() Dim param As New FVIL.Edge.CFviEdge2DSobelParam() Dim dst As New FVIL.Data.CFviImage() ' 2) 処理対象画像の有効性検査. Dim valid As Integer = FVIL.Edge.CFviEdge2D.CheckValidity(src) If valid <> FVIL.ErrorCode._SUCCESS Then Throw New FVIL.CFviException(valid, "FVIL.Edge.CFviEdge2D.CheckValidity") End If ' 3) 画像処理準備 (共通) parser.SrcImages(0) = src parser.DstImages(0) = dst If Not parser.IsValid() Then ' 有効性検査. parser.Validate() End If ' 有効化. parser.Result = result ' 4-1) パラメータ設定 (継承) parser.BorderMode = FVIL.BorderMode.None parser.MagMode = FVIL.Edge.MagMode.XY parser.SaveMode = FVIL.Edge.SaveMode.Mag Or FVIL.Edge.SaveMode.Direct ' 4-2) パラメータ設定 (固有) param.EdgeThreshold = 120 param.NmsLength = 1 parser.Param = param ' 5) 画像処理実行. parser.Execute() Return result End Function End Class End Namespace |
Exceptions
Exception | Condition |
---|---|
FVIL..::..CFviException | この例外の原因については、上記のエラーコード表をご参照ください。 |