エッジ検出結果 (実数版)
Namespace: FVIL.EdgeAssembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
[SerializableAttribute] public class CFviEdgeResultD64 : CFviDataObject, ISerializable, IXmlSerializable, IEnumerable<F_DEDGE> |
Visual Basic |
---|
<SerializableAttribute> Public Class CFviEdgeResultD64 Inherits CFviDataObject Implements ISerializable, IXmlSerializable, IEnumerable(Of F_DEDGE) |
Remarks
エッジ検出(CFviEdge2D 等)の結果を格納するクラスです。
このクラスは、アンマネージ環境のヒープに F_DEDGE 構造体の配列を確保します。
確保した領域のアドレスは、Address に保管され、
Clear()()()() が呼ばれた時や
このインスタンスが解放される時に自動的に解放されます。
このクラスは、.NET 環境とネイティブ環境の間で大量の画像処理データの受け渡しを行うことを目的としています。
通常、.NET 環境の固定長配列をネイティブ環境に受け渡す場合は マーシャリングが必要になり、
データのコピーが少なくとも1回は発生します。
ネイティブ環境の処理結果を .NET 環境に反映する場合(In,Out 属性の引数の場合)は、計2回発生します。
このクラスを使用するとマーシャリングの必要が無い為、データコピーのコスト削減が行えます。
領域の確保と解放について:
領域の確保と解放は FIE ライブラリを使用しています。 外部で確保した領域を設定することもできますが、 アロケータを一致させる必要がありますのでご注意ください。(下表参照) 自動的に解放したくない場合は、 IsAttach を true に設定することで回避できます。
その他の操作:
操作 | メソッド | 概要 |
---|---|---|
領域設定 | SetBuffer(F_DEDGE_PTR, Int32, Boolean) | 外部で確保した領域を設定する場合に使用します。 |
アタッチ | Attach(Object) | 同一型のインスタンスが保有する領域にアタッチします。 |
移動 | MoveFrom(Object) | 同一型のインスタンスが保有する領域をこのインスタンスに移動します。 |
複製 | CopyFrom(Object) | 同一型のインスタンスの内容を複製します。 |
初期値と範囲:
プロパティ | 初期値 | 範囲 | 説明 |
---|---|---|---|
Item[([( Int32])]) | (なし) | F_DEDGE | 配列の要素の取得または設定を行います。 |
Address | IntPtr.Zero | IntPtr.Zero または 有効なアドレス | 配列の先頭アドレスの取得を行います。 |
Count | 0 | 0,1~ | 配列の要素数の取得を行います。 |
IsAttach | false | false/true | アタッチ状態の取得または設定を行います。 |
SizeOfItem | sizeof(F_DEDGE) | sizeof(F_DEDGE) | 配列要素1つ分のサイズ(byte)を取得します。 |
Size | 0 | SizeOfItem × Count | 配列全体のサイズ(byte)を取得します。 |
要素の型変換:
項目 | 自身 ← 複製元(左記) | 複製先(左記) ← 自信 |
---|---|---|
F_DEDGE | そのまま複製します。 | そのまま複製します。 |
F_EDGE |
XY座標は、そのまま複製します。 エッジ強度は -16384~16384 から -1.0~1.0 にレンジ変換します。 角度は Degree から Radian に変換します。 |
XY座標は、四捨五入して複製します。 エッジ強度は -1.0~1.0 から -16384~16384 にレンジ変換します。 角度は Radian から Degree に変換します。 |
CFviEdgeData |
XY座標とエッジ強度は、そのまま複製します。 角度は Radian に変換します。 |
XY座標とエッジ強度は、そのまま複製します。 角度は Radian から CFviAngle に変換します。 |
CFviPoint |
XY座標は、そのまま複製します。 エッジ強度と角度は 0 初期化します。 |
XY座標は、そのまま複製します。 エッジ強度と角度は無視します。 |
PointF |
XY座標は、そのまま複製します。 エッジ強度と角度は 0 初期化します。 |
XY座標は、キャストして複製します。 エッジ強度と角度は無視します。 |
Point |
XY座標は、そのまま複製します。 エッジ強度と角度は 0 初期化します。 |
XY座標は、四捨五入して複製します。 エッジ強度と角度は無視します。 |
DEDGE_T |
XY座標と角度は、そのまま複製します。 エッジ強度は 0 初期化します。 |
XY座標と角度は、そのまま複製します。 エッジ強度は無視します。 |
DPNT_T |
XY座標は、そのまま複製します。 エッジ強度と角度は 0 初期化します。 |
XY座標は、そのまま複製します。 エッジ強度と角度は無視します。 |
PNT_T |
XY座標は、そのまま複製します。 エッジ強度と角度は 0 初期化します。 |
XY座標は、四捨五入して複製します。 エッジ強度と角度は無視します。 |
データ変換 (1):
エッジ点群(または点群)を保有する他の機能からデータ変換するには、
CopyFrom(Object) メソッドを使用してください。
各要素の型変換は、前述の "要素の型変換" に従属します。
対応しているクラスは以下の通りです。
項目 | 説明 |
---|---|
CFviEdgeResultD64 |
エッジ検出結果クラス(実数版)が保有するエッジデータを複製します。 全ての要素をそのまま複製します。 |
CFviEdgeResultI32 |
エッジ検出結果クラス(整数版)が保有するエッジデータを複製します。 要素の型変換は F_EDGE からの変換に従属します。 |
F_DEDGE の IEnumerable |
F_DEDGE 構造体の IEnumerable が保有するエッジデータを複製します。 要素の型変換は F_DEDGE からの変換に従属します。 |
F_EDGE の IEnumerable |
F_EDGE 構造体の IEnumerable が保有するエッジデータを複製します。 要素の型変換は F_EDGE からの変換に従属します。 |
DEDGE_T_ARRAY |
DEDGE_T 構造体の配列クラス (または IEnumerable) が保有するエッジデータを複製します。 要素の型変換は DEDGE_T からの変換に従属します。 |
DPNT_T_ARRAY |
DPNT_T 構造体の配列クラス (または IEnumerable) が保有する点列データを複製します。 要素の型変換は DPNT_T からの変換に従属します。 |
PNT_T_ARRAY |
PNT_T 構造体の配列クラス (または IEnumerable) が保有する点列データを複製します。 要素の型変換は PNT_T からの変換に従属します。 |
CFviEdgeResult |
従来のエッジ検出結果クラスが保有するエッジデータを複製します。 要素の型変換は CFviEdgeData からの変換に従属します。 |
CFviFPM2Feature |
FPM2 の特徴量クラスが保有する
特徴量(GetFeatureEdges()()()()を複製します。 これは、 Create(CFviImage, MatchMode, CFviDataObject, Boolean) が実行されたあと有効になります。 要素の型変換は CFviEdgeData からの変換に従属します。 |
CFviFPM2Template |
FPM2 のテンプレート特徴量クラスが保有する
特徴量(GetFeatureEdges()()()()を複製します。 これは、 Create(CFviImage, MatchMode, CFviDataObject, CFviPoint, CFviImage) または Create(CFviPattern, MatchMode, CFviDataObject) が実行されたあと有効になります。 要素の型変換は CFviEdgeData からの変換に従属します。 |
CFviLineHoughCorrelationEdge |
直線ハフ検出クラスが保有するエッジデータを複製します。 これは、画像処理実行後に有効になるもので、 GetEdges()()()() から取得できるエッジデータではありません。 要素の型変換は CFviEdgeData からの変換に従属します。 |
CFviLineHoughSobelEdge |
直線ハフ検出クラスが保有するエッジデータを複製します。 これは、画像処理実行後に有効になるもので、 GetEdges()()()() から取得できるエッジデータではありません。 要素の型変換は CFviEdgeData からの変換に従属します。 |
CFviCircleHoughCorrelationEdge |
円ハフ検出クラスが保有するエッジデータを複製します。 これは、画像処理実行後に有効になるもので、 GetEdges()()()() から取得できるエッジデータではありません。 要素の型変換は CFviEdgeData からの変換に従属します。 |
CFviCircleHoughSobelEdge |
円ハフ検出クラスが保有するエッジデータを複製します。 これは、画像処理実行後に有効になるもので、 GetEdges()()()() から取得できるエッジデータではありません。 要素の型変換は CFviEdgeData からの変換に従属します。 |
データ変換 (2): 他の機能へのデータ変換
本クラスから他の機能へデータ変換するには、下記のメソッドを使用してください。
項目 | メソッド | 説明 |
---|---|---|
F_DEDGE コレクション | ToList()()()() | 全要素を F_DEDGE 構造体のコレクションに格納して返します。 |
F_DEDGE 配列 | ToArray()()()() | 全要素を F_DEDGE 構造体の固定長配列に格納して返します。 |
DPNT_T_ARRAY | ToDPNT_T_ARRAY()()()() |
全要素を DPNT_T 構造体のコレクションに格納して返します。 要素の型変換は、前述の "要素の型変換" に従属します。 |
PNT_T_ARRAY | ToPNT_T_ARRAY()()()() |
全要素を PNT_T 構造体のコレクションに格納して返します。 要素の型変換は、前述の "要素の型変換" に従属します。 |
DEDGE_T_ARRAY | ToDEDGE_T_ARRAY()()()() |
全要素を DEDGE_T 構造体のコレクションに格納して返します。 要素の型変換は、前述の "要素の型変換" に従属します。 |
CFviPoint コレクション | ToCFviPoint()()()() |
全要素のエッジ座標をコレクションに格納して返します。 要素の型変換は、前述の "要素の型変換" に従属します。 |
CFviEdgeData コレクション | ToCFviEdgeData()()()() |
全要素を CFviEdgeData のコレクションに格納して返します。 要素の型変換は、前述の "要素の型変換" に従属します。 |
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 Edge { // ============================================================ /// <summary> /// CFviEdge2D クラス + CFviEdgeResultD64 クラス. /// </summary> /// <remarks> /// 相関エッジ法. /// </remarks> [FvPluginExecute] public void Edge2D_EdgeResultD64_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; Edge2D_EdgeResultD64(Defs.ResultDir + "/Edge.Edge2DCorrelation_EdgeResultD64-mag.png", param); } // ============================================================ /// <summary> /// CFviEdge2D クラス + CFviEdgeResultD64 クラス. /// </summary> /// <remarks> /// ソーベル法. /// </remarks> [FvPluginExecute] public void Edge2D_EdgeResultD64_SobelParam() { FVIL.Edge.CFviEdge2DSobelParam param = new FVIL.Edge.CFviEdge2DSobelParam(); param.EdgeThreshold = 120; param.NmsLength = 1; Edge2D_EdgeResultD64(Defs.ResultDir + "/Edge.Edge2DSobel_EdgeResultD64-mag.png", param); } // ============================================================ /// <summary> /// CFviEdge2D クラス + CFviEdgeResultD64 クラス. /// </summary> public void Edge2D_EdgeResultD64(string filename, FVIL.Data.CFviDataObject param) { // 1) インスタンスの準備. FVIL.Edge.CFviEdge2D parser = new FVIL.Edge.CFviEdge2D(); FVIL.Edge.CFviEdgeResultD64 result = new FVIL.Edge.CFviEdgeResultD64(); FVIL.Data.CFviImage src = new FVIL.Data.CFviImage(); FVIL.Data.CFviImage dst = new FVIL.Data.CFviImage(); // 2) 処理対象画像の取り込み. FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/floppy_hough.jpg", src, FVIL.PixelMode.Unpacking); // 3) 処理対象画像の有効性検査. int valid = FVIL.Edge.CFviEdge2D.CheckValidity(src); if (valid != FVIL.ErrorCode._SUCCESS) throw new FVIL.CFviException(valid, "FVIL.Edge.CFviEdge2D.CheckValidity"); // 4) 画像処理準備 (共通) parser.SrcImages[0] = src; parser.DstImages[0] = dst; if (!parser.IsValid()) // 有効性検査. parser.Validate(); // 有効化. parser.Result = result; // 5-1) パラメータ設定 (継承) parser.BorderMode = FVIL.BorderMode.None; parser.MagMode = FVIL.Edge.MagMode.XY; parser.SaveMode = FVIL.Edge.SaveMode.Mag | FVIL.Edge.SaveMode.Direct; // 5-2) パラメータ設定 (固有) parser.Param = param; // 6) 画像処理実行. parser.Execute(); // E) 処理結果画像の保存. FVIL.File.Function.SaveImageFile(filename, dst); // E) 処理結果の取得. { Console.WriteLine(" result[]"); for (int index = 0; index < result.Count; index++) { fvalgcli.F_DEDGE data = result[index]; double x = data.x; double y = data.y; double q = data.q; double mag = data.mag; } } } } } |
Visual Basic | Copy |
---|---|
Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli ' FvPluginXXXX attribute requires fvalgcli Namespace SampleCode Public Partial Class Edge ' ============================================================ ''' <summary> ''' CFviEdge2D クラス + CFviEdgeResultD64 クラス. ''' </summary> ''' <remarks> ''' 相関エッジ法. ''' </remarks> <FvPluginExecute> _ Public Sub Edge2D_EdgeResultD64_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 Edge2D_EdgeResultD64(Defs.ResultDir & "/Edge.Edge2DCorrelation_EdgeResultD64-mag.png", param) End Sub ' ============================================================ ''' <summary> ''' CFviEdge2D クラス + CFviEdgeResultD64 クラス. ''' </summary> ''' <remarks> ''' ソーベル法. ''' </remarks> <FvPluginExecute> _ Public Sub Edge2D_EdgeResultD64_SobelParam() Dim param As New FVIL.Edge.CFviEdge2DSobelParam() param.EdgeThreshold = 120 param.NmsLength = 1 Edge2D_EdgeResultD64(Defs.ResultDir & "/Edge.Edge2DSobel_EdgeResultD64-mag.png", param) End Sub ' ============================================================ ''' <summary> ''' CFviEdge2D クラス + CFviEdgeResultD64 クラス. ''' </summary> Public Sub Edge2D_EdgeResultD64(filename As String, param As FVIL.Data.CFviDataObject) ' 1) インスタンスの準備. Dim parser As New FVIL.Edge.CFviEdge2D() Dim result As New FVIL.Edge.CFviEdgeResultD64() Dim src As New FVIL.Data.CFviImage() Dim dst 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.Edge.CFviEdge2D.CheckValidity(src) If valid <> FVIL.ErrorCode._SUCCESS Then Throw New FVIL.CFviException(valid, "FVIL.Edge.CFviEdge2D.CheckValidity") End If ' 4) 画像処理準備 (共通) parser.SrcImages(0) = src parser.DstImages(0) = dst If Not parser.IsValid() Then ' 有効性検査. parser.Validate() End If ' 有効化. parser.Result = result ' 5-1) パラメータ設定 (継承) parser.BorderMode = FVIL.BorderMode.None parser.MagMode = FVIL.Edge.MagMode.XY parser.SaveMode = FVIL.Edge.SaveMode.Mag Or FVIL.Edge.SaveMode.Direct ' 5-2) パラメータ設定 (固有) parser.Param = param ' 6) 画像処理実行. parser.Execute() ' E) 処理結果画像の保存. FVIL.File.[Function].SaveImageFile(filename, dst) ' E) 処理結果の取得. If True Then Console.WriteLine(vbTab & "result[]") For index As Integer = 0 To result.Count - 1 Dim data As fvalgcli.F_DEDGE = result(index) Dim x As Double = data.x Dim y As Double = data.y Dim q As Double = data.q Dim mag As Double = data.mag Next End If End Sub End Class End Namespace |
Inheritance Hierarchy
System..::..Object
FVIL..::..CFviObject
FVIL.Data..::..CFviDataObject
FVIL.Edge..::..CFviEdgeResultD64
FVIL..::..CFviObject
FVIL.Data..::..CFviDataObject
FVIL.Edge..::..CFviEdgeResultD64