グレイサーチ
Namespace: FVIL.GS2Assembly: FVILbasic (in FVILbasic.dll) Version: 3.1.0.0 (3.1.0.17)
Syntax
C# |
---|
[SerializableAttribute] public class CFviGS2 : CFviImageParser |
Visual Basic |
---|
<SerializableAttribute> Public Class CFviGS2 Inherits CFviImageParser |
Remarks
グレイサーチを実行するためのクラスです。
マルチコア対応:
このクラスの Execute()()()() メソッドは、 SetParallelNum(Int32) によって設定されたスレッド数に従って、 自動的に処理を並列化します。 マルチコア環境においては、処理を並列化する事によりレーテンシを短縮できる場合があります。 詳しくは、 SetParallelNum(Int32) の説明をご参照ください。
要求する入出力画像数:
項目 | 数 | 定数 |
---|---|---|
入力画像 | 1 | SrcImageCount フィールド |
出力画像 | 0 | DstImageCount フィールド |
処理対象画像の条件:
処理対象の画像は下記の条件を満たしている必要が有ります。
- 画像種別が FVIL.ImageType.UC8 である事
- チャネル数が 1 である事
- 縦横サイズがともに、パタン画像より大きい事
グレイサーチオブジェクト関連プロパティ:
下表に示すプロパティは、グレイサーチの作業領域となるグレイサーチオブジェクトに関連するプロパティです。 このクラスを標準のコンストラクタで構築した場合は、下表に示す値で初期化されています。 これらの設定を変更する場合は、 Open(UInt32, UInt32, UInt32) メソッドを使用してください。 尚、グレイサーチオブジェクトは、このインスタンスが解放される際に自動的に解放されます。 ユーザが解放する場合は、Close()()()() メソッドを使用してください。
プロパティ | 初期値 | 範囲 | 説明 |
---|---|---|---|
IsOpened | true | true/false | オープン状態 |
Handle | IntPtr.Zero | 有効なハンドル / NULL (IntPtr.Zero) |
グレイサーチオブジェクトハンドル |
FirstBuffSize | 0 | 0 または 1~ |
初期サーチ結果候補初期バッファサイズ 通常は 0 を指定してください。0 を指定すると、デフォルト値を使用します。 初期サイズが小さく、メモリが足りなくなった場合には内部で自動で再アロケートを行いますが、 メモリの再アロケートを少なくしたい等の理由で、初期サイズを変更する場合に指定します。 なお、この設定値によってサーチ結果が変化することはありません。 |
LastBuffSize | 0 | 0 または 1~ |
最終サーチ結果候補初期バッファサイズ 通常は 0 を指定してください。0 を指定すると、デフォルト値を使用します。 初期サイズが小さく、メモリが足りなくなった場合には内部で自動で再アロケートを行いますが、 メモリの再アロケートを少なくしたい等の理由で、初期サイズを変更する場合に指定します。 なお、この設定値によってサーチ結果が変化することはありません。 |
CachePowNum | 0 | 0 または 3~15 |
中間スコアキャッシュサイズ 通常は 0 を指定してください。0 を指定すると、デフォルト値を使用します。 本ライブラリでは重複した相関スコアの計算を避けるために、 既に計算した 相関スコアを一時的に保存するキャッシュ領域を持ちます。 本パラメータはこの相関スコアのキャッシュサイズを指定します。 大きな値を設定するとキャッシュヒット率が上がる場合がありますが、 その効果はわずかな場合が多く、必要なメモリ量が大幅に増えるため、 デフォルト値以外での利用は推奨しません。 なお、この設定値によってサーチ結果が変化することはありません。 |
初期値と範囲:
プロパティ | 初期値 | 範囲 | 説明 |
---|---|---|---|
Pattern | null | CFviGS2Pattern のインスタンス | グレイサーチパタンオブジェクト |
Param | CFviGS2Param のインスタンス | CFviGS2Param のインスタンス ※インスタンスの差し替えは行えません。 | グレイサーチパラメータ |
Result | CFviGS2Result のインスタンス | CFviGS2Result のインスタンス | グレイサーチ結果格納用オブジェクト |
ExecuteOption | ExecuteOption.Default | ExecuteOption に定義された定数 | 実行オプション |
ContinueOption | ContinueOption.None | ContinueOption に定義された定数 | 継続サーチオプション |
処理対象画像の有効性検査と有効化:
-
入力画像の有効性検査
このクラスの CheckValidity(CFviImage) 関数で入力画像の有効性を検査できます。 この関数はスタティックメンバですので、このクラスのインスタンスを生成せずに直接呼び出す事ができます。 -
入出力画像の整合性検査
このクラスの IsValid()()()() メソッドで入出力画像の整合性を検査できます。 このメソッドが false を返す場合は、前述の処理対象画像の条件を満たしていない為、 実行できない事を意味します。 -
出力画像の有効化
このクラスでは有効化はサポートしていません。
Validate()()()() または Validate(Int32) メソッドを実行した場合は常に例外を発行します。
関連する FIE 関数:
fnFIE_gs2_alloc
fnFIE_gs2_search
fnFIE_gs2_search_enforce
fnFIE_gs2_search_enforce2
Examples
ソースコード:
C# | Copy |
---|---|
using System; using System.Collections.Generic; using System.Text; using System.Drawing; using fvalgcli; namespace User.SampleCode { public partial class GS2 { [FvPluginExecute] public void Execute() { try { // 1) インスタンスの準備. FVIL.GS2.CFviGS2 parser = new FVIL.GS2.CFviGS2(); parser.Open(); // 2-1) 処理対象画像の取り込み. FVIL.Data.CFviImage src = new FVIL.Data.CFviImage(); FVIL.File.Function.LoadImageFile(Defs.TestImageDir + "/clip_UC8_M.png", src, FVIL.PixelMode.Unpacking); // 2-2) パタン画像の読み込みとグレイサーチパタンの生成. FVIL.Data.CFviPattern pattern = new FVIL.Data.CFviPattern(); FVIL.GS2.CFviGS2Pattern gs2pattern = new FVIL.GS2.CFviGS2Pattern(); pattern.Load(Defs.TestImageDir + "/clip.pat"); gs2pattern.Create( pattern, FVIL.GS2.Filter.Smooth); // 3) 処理対象画像の有効性検査. if (FVIL.ErrorCode._SUCCESS != FVIL.GS2.CFviGS2.CheckValidity(src)) return; if (FVIL.ErrorCode._SUCCESS != FVIL.GS2.CFviGS2.CheckValidity(pattern)) return; // 4) 画像処理準備. // --- 処理対象画像の設定. parser.SrcImages[0] = src; // 5-1) パラメータ設定. parser.ExecuteOption = FVIL.GS2.ExecuteOption.Default; parser.ContinueOption = FVIL.GS2.ContinueOption.None; parser.Param.Count = 2; parser.Param.EdgeDetect = true; parser.Param.ReverseMode = false; parser.Param.Precision = FVIL.GS2.Precision.Normal; parser.Param.Complexity = 1; parser.Result = new FVIL.GS2.CFviGS2Result(); // --- グレイサーチパタンの設定. parser.Pattern = gs2pattern; // 6) 画像処理実行. FVIL.CFviTimeCounter timer = new FVIL.CFviTimeCounter(); timer.Start(); parser.Execute(); double msec = timer.Stop(); Console.WriteLine("execute. {0} msec, count={1} ", msec.ToString("0.###"), parser.Result.Count); // E) 確認用. { // 画像表示の準備. FVIL.GDI.CFviDisplay display = new FVIL.GDI.CFviDisplay(); display.Image = src; display.DisplayRect = src.Window; // オーバレイの生成. FVIL.GDI.CFviOverlay pOverlay0 = new FVIL.GDI.CFviOverlay(); pOverlay0.Scaling = true; display.Overlays.Add(pOverlay0); FVIL.Data.CFviPoint pat_mark = pattern.CenterMark; // パタン登録時の基準点. FVIL.Data.CFviRectangle pat_rect = pattern.RegistRect; // パタン登録時の矩形. fvalgcli.F_GS_RESULT_PTR data_ptr = parser.Result.Address; for (int i = 0; i < parser.Result.Count; i++) { // サーチ結果の取得. // --- 検出位置. FVIL.Data.CFviPoint mark = new FVIL.Data.CFviPoint(data_ptr[0].x / 100, data_ptr[0].y / 100); // --- 検出位置とパタン情報から矩形を復元. FVIL.Data.CFviRectangle rect = new FVIL.Data.CFviRectangle(); rect.St = new FVIL.Data.CFviPoint(mark.X - pat_mark.X, mark.Y - pat_mark.Y); rect.Ed = new FVIL.Data.CFviPoint(rect.X + pat_rect.Width, rect.Y + pat_rect.Height); // --- 相関値. System.String score = data_ptr[0].score.ToString(); // 描画用. // --- 矩形(塗り潰し) FVIL.GDI.CFviGdiImage _fill = new FVIL.GDI.CFviGdiImage(); _fill.SetSize(1, 1, 32); _fill.Position = rect.St; _fill.Alpha = 0x3F; _fill.StretchHorzSize = (int)(rect.Width); _fill.StretchVertSize = (int)(rect.Height); _fill.SetPixelRGB(0, 0, Color.FromArgb(0xFF, 0x00, 0x00, 0xFF)); // A,R,G,B // --- 矩形(枠) FVIL.GDI.CFviGdiRectangle _rect = new FVIL.GDI.CFviGdiRectangle(rect); _rect.Pen.Color = Color.FromArgb(0x00, 0x00, 0xFF); // --- 基準点. FVIL.GDI.CFviGdiPoint _mark = new FVIL.GDI.CFviGdiPoint(mark); _mark.Size = new Size(5, 5); _mark.Pen.Color = Color.FromArgb(0xFF, 0x00, 0x00); // --- 相関値. FVIL.GDI.CFviGdiString _score = new FVIL.GDI.CFviGdiString(); _score.Text = score.ToString(); _score.Position = mark; _score.Align = FVIL.GDI.TextAlign.Right | FVIL.GDI.TextAlign.Bottom; _score.BkMode = FVIL.GDI.BkMode.Transparent; _score.Color = Color.FromArgb(0xFF, 0xFF, 0x00); // 追加. pOverlay0.Figures.Add(_fill); pOverlay0.Figures.Add(_rect); pOverlay0.Figures.Add(_mark); pOverlay0.Figures.Add(_score); data_ptr += 1; } // 保存. FVIL.Data.CFviImage canvas = new FVIL.Data.CFviImage(); display.SaveImage(canvas, display.DisplayRect, 1.0); FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/GS2.ExecuteGS2.png", canvas); } } catch( FVIL.CFviException ex ) { Assert.Fail("{0}: ErrorCode={1} {2}", ex.Function, ex.ErrorCode, ex.Message); } } } } |
Visual Basic | Copy |
---|---|
Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli Namespace SampleCode Public Partial Class GS2 <FvPluginExecute> _ Public Sub Execute() Try ' 1) インスタンスの準備. Dim parser As New FVIL.GS2.CFviGS2() parser.Open() ' 2-1) 処理対象画像の取り込み. Dim src As New FVIL.Data.CFviImage() FVIL.File.[Function].LoadImageFile(Defs.TestImageDir & "/clip_UC8_M.png", src, FVIL.PixelMode.Unpacking) ' 2-2) パタン画像の読み込みとグレイサーチパタンの生成. Dim pattern As New FVIL.Data.CFviPattern() Dim gs2pattern As New FVIL.GS2.CFviGS2Pattern() pattern.Load(Defs.TestImageDir & "/clip.pat") gs2pattern.Create(pattern, FVIL.GS2.Filter.Smooth) ' 3) 処理対象画像の有効性検査. If FVIL.ErrorCode._SUCCESS <> FVIL.GS2.CFviGS2.CheckValidity(src) Then Return End If If FVIL.ErrorCode._SUCCESS <> FVIL.GS2.CFviGS2.CheckValidity(pattern) Then Return End If ' 4) 画像処理準備. ' --- 処理対象画像の設定. parser.SrcImages(0) = src ' 5-1) パラメータ設定. parser.ExecuteOption = FVIL.GS2.ExecuteOption.[Default] parser.ContinueOption = FVIL.GS2.ContinueOption.None parser.Param.Count = 2 parser.Param.EdgeDetect = True parser.Param.ReverseMode = False parser.Param.Precision = FVIL.GS2.Precision.Normal parser.Param.Complexity = 1 parser.Result = New FVIL.GS2.CFviGS2Result() ' --- グレイサーチパタンの設定. parser.Pattern = gs2pattern ' 6) 画像処理実行. Dim timer As New FVIL.CFviTimeCounter() timer.Start() parser.Execute() Dim msec As Double = timer.[Stop]() Console.WriteLine("execute. {0} msec, count={1} ", msec.ToString("0.###"), parser.Result.Count) ' E) 確認用. If True Then ' 画像表示の準備. Dim display As New FVIL.GDI.CFviDisplay() display.Image = src display.DisplayRect = src.Window ' オーバレイの生成. Dim pOverlay0 As New FVIL.GDI.CFviOverlay() pOverlay0.Scaling = True display.Overlays.Add(pOverlay0) Dim pat_mark As FVIL.Data.CFviPoint = pattern.CenterMark ' パタン登録時の基準点. Dim pat_rect As FVIL.Data.CFviRectangle = pattern.RegistRect ' パタン登録時の矩形. Dim data_ptr As fvalgcli.F_GS_RESULT_PTR = parser.Result.Address For i As Integer = 0 To parser.Result.Count - 1 ' サーチ結果の取得. ' --- 検出位置. Dim mark As New FVIL.Data.CFviPoint(data_ptr(0).x \ 100, data_ptr(0).y \ 100) ' --- 検出位置とパタン情報から矩形を復元. Dim rect As New FVIL.Data.CFviRectangle() rect.St = New FVIL.Data.CFviPoint(mark.X - pat_mark.X, mark.Y - pat_mark.Y) rect.Ed = New FVIL.Data.CFviPoint(rect.X + pat_rect.Width, rect.Y + pat_rect.Height) ' --- 相関値. Dim score As System.String = data_ptr(0).score.ToString() ' 描画用. ' --- 矩形(塗り潰し) Dim _fill As New FVIL.GDI.CFviGdiImage() _fill.SetSize(1, 1, 32) _fill.Position = rect.St _fill.Alpha = &H3f _fill.StretchHorzSize = CInt(Math.Truncate(rect.Width)) _fill.StretchVertSize = CInt(Math.Truncate(rect.Height)) _fill.SetPixelRGB(0, 0, Color.FromArgb(&Hff, &H0, &H0, &Hff)) ' A,R,G,B ' --- 矩形(枠) Dim _rect As New FVIL.GDI.CFviGdiRectangle(rect) _rect.Pen.Color = Color.FromArgb(&H0, &H0, &Hff) ' --- 基準点. Dim _mark As New FVIL.GDI.CFviGdiPoint(mark) _mark.Size = New Size(5, 5) _mark.Pen.Color = Color.FromArgb(&Hff, &H0, &H0) ' --- 相関値. Dim _score As New FVIL.GDI.CFviGdiString() _score.Text = score.ToString() _score.Position = mark _score.Align = FVIL.GDI.TextAlign.Right Or FVIL.GDI.TextAlign.Bottom _score.BkMode = FVIL.GDI.BkMode.Transparent _score.Color = Color.FromArgb(&Hff, &Hff, &H0) ' 追加. pOverlay0.Figures.Add(_fill) pOverlay0.Figures.Add(_rect) pOverlay0.Figures.Add(_mark) pOverlay0.Figures.Add(_score) data_ptr += 1 Next ' 保存. Dim canvas As New FVIL.Data.CFviImage() display.SaveImage(canvas, display.DisplayRect, 1.0) FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/GS2.ExecuteGS2.png", canvas) End If Catch ex As FVIL.CFviException Assert.Fail("{0}: ErrorCode={1} {2}", ex.[Function], ex.ErrorCode, ex.Message) End Try End Sub End Class End Namespace |