Classes
Class | Description | |
---|---|---|
CFviGS2 | グレイサーチ | |
CFviGS2Data | グレイサーチデータ | |
CFviGS2Param | グレイサーチパラメータ | |
CFviGS2Pattern | グレイサーチパタンオブジェクト | |
CFviGS2Result | グレイサーチ結果 |
Enumerations
Enumeration | Description | |
---|---|---|
ContinueOption | 継続サーチオプション | |
ExecuteOption | 実行オプション | |
Filter | 圧縮フィルタ | |
Precision | 精度モード | |
Subpxl | 精サーチ・サブピクセル推定の近傍 |
Remarks
このネームスペースには GS2 関連のクラス、関数、定数を集約しています。
このクラス群は、FIE ライブラリの fnFIE_gs2_xxxx 関数群を集約したものです。 OpenMP による並列化により、従来の 正規化相関サーチ より高速化されています。
アルゴリズムに関する詳細な説明は、別冊 FIE ライブラリ説明書 をご参照ください。
説明は、下記の階層にあります。
モジュール ├ FIE module │├ サーチ ││├ グレイサーチ(正規化相関サーチ) │││├ 説明
トピック:
構成:
この機能は、サーチ機能を持つ本体と、サーチ結果やパラメータを保有するデータ構造で構成されます。
-
本体:
クラス 内容 CFviGS2 サーチ機能を持つクラスです。 -
データ構造:
クラス データID 内容 CFviGS2Pattern 1900 パタン画像(CFviPattern)の情報を格納するクラスです。 CFviGS2Result 1901 サーチ結果を格納するクラスです。 CFviGS2Param 1902 正規化相関サーチパラメータを保有するクラスです。 CFviGS2Data 1903 サーチ結果1つ分の情報を格納するクラスです。 -
データ構造: (サーチパタン)
クラス データID 内容 CFviPattern 101 処理対象画像からサーチを行う為のパタン画像を格納するオブジェクトです。
コンポーネント:
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 |
サンプルコード (継続サーチ):
対象画像とパタン画像が 1:N の関係の時は、
継続サーチオプション(ContinueOption)
を使用すると処理時間を短縮できます。
対象画像:
パタン画像:
出力結果:
images(0), patterns(0) [0] 70.830, 60.440,9300 [1] 63.990, 37.390,9272 images(0), patterns(1) [0] 54.540, 82.560,9281 images(1), patterns(0) [0] 63.990, 84.430,9407 [1] 70.820, 61.380,9185 images(1), patterns(1)
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 ExecuteC1() { string[] image_files = { "/MarkSearch_Target1.png", "/MarkSearch_Target2.png" }; string[] pattern_files = { "/MarkSearch_Pattern1.png", "/MarkSearch_Pattern2.png" }; // パタン生成. FVIL.GS2.CFviGS2Pattern[] patterns = new FVIL.GS2.CFviGS2Pattern[2]; for (int i = 0; i < 2; i++) { FVIL.Data.CFviImage pat = new FVIL.Data.CFviImage(Defs.TestImageDir + pattern_files[i]); FVIL.Data.CFviPoint offset = new FVIL.Data.CFviPoint( pat.HorzSize * 0.5, pat.HorzSize * 0.5 ); patterns[i] = new FVIL.GS2.CFviGS2Pattern(pat, offset, FVIL.GS2.Filter.Min, null); } // インスタンスの準備. FVIL.GS2.CFviGS2Result result = new FVIL.GS2.CFviGS2Result(); FVIL.GS2.CFviGS2 parser = new FVIL.GS2.CFviGS2(); parser.Open(); parser.Result = result; parser.ExecuteOption = FVIL.GS2.ExecuteOption.Enforce2; parser.Param.Count = 2; parser.Param.ThresholdMid = 5000; parser.Param.ThresholdFinal = 7000; parser.Param.EdgeDetect = false; parser.Param.ReverseMode = false; parser.Param.FirstUnit = 1; parser.Param.LastUnit = 0; parser.Param.Subpxl = FVIL.GS2.Subpxl.Neib8; // サーチ. for (int i = 0; i < 2; i++) { // 対象画像の読み込み. FVIL.Data.CFviImage src = new FVIL.Data.CFviImage(Defs.TestImageDir + image_files[i]); for (int j = 0; j < 2; j++) { // 画像とパタンの設定. parser.SrcImages[0] = src; parser.Pattern = patterns[j]; // 初回(0)は通常サーチ、次回(1~)から継続サーチ. if (j == 0) parser.ContinueOption = FVIL.GS2.ContinueOption.None; else parser.ContinueOption = FVIL.GS2.ContinueOption.Continue; result.Clear(); parser.Execute(); // --- 確認用. Console.WriteLine("images({0}), patterns({1})", i, j); int count = result.Count; for (int k = 0; k < count; k++) { FVIL.GS2.CFviGS2Data data = new FVIL.GS2.CFviGS2Data(result[k]); Console.WriteLine("[{0}] {1,9:0.000},{2,9:0.000},{3:0000}" , k , data.Position.X , data.Position.Y , data.Score ); } } } } } } |
Visual Basic | Copy |
---|---|
Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli Namespace SampleCode Partial Public Class GS2 <FvPluginExecute()> _ Public Sub ExecuteC1() Dim image_files As String() = { _ "/MarkSearch_Target1.png", _ "/MarkSearch_Target2.png" _ } Dim pattern_files As String() = { _ "/MarkSearch_Pattern1.png", _ "/MarkSearch_Pattern2.png" _ } ' パタン生成. Dim patterns As FVIL.GS2.CFviGS2Pattern() = New FVIL.GS2.CFviGS2Pattern(1) {} For i As Integer = 0 To 1 Dim pat As New FVIL.Data.CFviImage(Defs.TestImageDir & pattern_files(i)) Dim offset As New FVIL.Data.CFviPoint(pat.HorzSize * 0.5, pat.HorzSize * 0.5) patterns(i) = New FVIL.GS2.CFviGS2Pattern(pat, offset, FVIL.GS2.Filter.Min, Nothing) Next ' インスタンスの準備. Dim result As New FVIL.GS2.CFviGS2Result() Dim parser As New FVIL.GS2.CFviGS2() parser.Open() parser.Result = result parser.ExecuteOption = FVIL.GS2.ExecuteOption.Enforce2 parser.Param.Count = 2 parser.Param.ThresholdMid = 5000 parser.Param.ThresholdFinal = 7000 parser.Param.EdgeDetect = False parser.Param.ReverseMode = False parser.Param.FirstUnit = 1 parser.Param.LastUnit = 0 parser.Param.Subpxl = FVIL.GS2.Subpxl.Neib8 ' サーチ. For i As Integer = 0 To 1 ' 対象画像の読み込み. Dim src As New FVIL.Data.CFviImage(Defs.TestImageDir & image_files(i)) For j As Integer = 0 To 1 ' 画像とパタンの設定. parser.SrcImages(0) = src parser.Pattern = patterns(j) ' 初回(0)は通常サーチ、次回(1~)から継続サーチ. If j = 0 Then parser.ContinueOption = FVIL.GS2.ContinueOption.None Else parser.ContinueOption = FVIL.GS2.ContinueOption.[Continue] End If result.Clear() parser.Execute() ' --- 確認用. Console.WriteLine("images({0}), patterns({1})", i, j) Dim count As Integer = result.Count For k As Integer = 0 To count - 1 Dim data As New FVIL.GS2.CFviGS2Data(result(k)) Console.WriteLine("[{0}] {1,9:0.000},{2,9:0.000},{3:0000}", k, data.Position.X, data.Position.Y, data.Score) Next Next Next End Sub End Class End Namespace |
サンプルコード (処理範囲指定):
限られた範囲をサーチする場合は2つの方法があります。
- 画像オブジェクトの処理範囲を指定する。
- チャイルド画像を指定する。
後者 2) の方法で行うことにより、画像圧縮処理の時間を短縮することができます。
画像圧縮処理とは、指定された画像の幅/高さをそれぞれ 1/2N に圧縮する処理です。
詳しくは、別冊 FIE ライブラリ説明書のグレイサーチの説明のページに記載されている
"粗密探索と画像圧縮" の項をご参照ください。
説明は、下記の階層にあります。
モジュール ├ FIE module │├ サーチ ││├ グレイサーチ(正規化相関サーチ) │││├ 説明
サーチ処理の時間に差異はありませんが、サーチ処理の前の画像圧縮の処理量が下記のように異なります。
前者 1) の方法は、画像全体の圧縮を行います。
後者 2) の方法は、部分画像の圧縮を行います。
但し、サーチ結果の座標が異なることにご注意ください。
後者 2) は、部分画像の左上を原点(0,0)とする座標を返します。
画像全体の左上を原点とする座標に変換するには、サーチ結果にオフセット値を加算する必要があります。
対象画像:
1) 画像全体 | |
2) 部分画像 |
出力結果:
[1] 1.367 msec 867.000, 151.000,9999 [2] 0.696 msec 867.000, 151.000,9999
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 ExecuteC2() { // 対象画像の読み込み. FVIL.Data.CFviImage src = new FVIL.Data.CFviImage( Defs.TestImageDir + "/fvc06_full.png" ); // パタン生成. FVIL.Data.CFviImage pat = new FVIL.Data.CFviImage( Defs.TestImageDir + "/fvc06_pattern.png" ); FVIL.Data.CFviPoint offset = new FVIL.Data.CFviPoint(0, 0); FVIL.GS2.CFviGS2Pattern pattern = new FVIL.GS2.CFviGS2Pattern(pat, offset, FVIL.GS2.Filter.Smooth, null); // インスタンスの準備. FVIL.CFviTimeCounter watch = new FVIL.CFviTimeCounter(); FVIL.GS2.CFviGS2Result result = new FVIL.GS2.CFviGS2Result(); FVIL.GS2.CFviGS2 parser = new FVIL.GS2.CFviGS2(); parser.Open(); parser.Result = result; parser.ExecuteOption = FVIL.GS2.ExecuteOption.Enforce2; parser.ContinueOption = FVIL.GS2.ContinueOption.None; parser.Param.Count = 1; parser.Param.ThresholdMid = 5000; parser.Param.ThresholdFinal = 8000; parser.Param.EdgeDetect = false; parser.Param.ReverseMode = false; parser.Param.FirstUnit = 1; parser.Param.LastUnit = 0; parser.Param.Subpxl = FVIL.GS2.Subpxl.Neib4; // 1) 処理範囲指定. { src.Window = new Rectangle( 756, 127, 354, 74 ); // 画像とパタンの設定. parser.SrcImages[0] = src; parser.Pattern = pattern; result.Clear(); watch.Start(); parser.Execute(); double msec = watch.Stop(); // --- 確認. Console.WriteLine("[1] {0,9:0.000} msec", msec); if (result.Count > 0) { FVIL.GS2.CFviGS2Data data = new FVIL.GS2.CFviGS2Data(result[0]); Console.WriteLine("{0,9:0.000},{1,9:0.000},{2:0000}" , data.Position.X , data.Position.Y , data.Score ); } } // 2) FIE チャイルド画像指定. { // 部分画像の生成. Rectangle window = new Rectangle( 756, 127, 354, 74 ); FVIL.Data.CFviImage part = new FVIL.Data.CFviImage( src.GetFIE(), 0, window ); // 画像とパタンの設定. parser.SrcImages[0] = part; parser.Pattern = pattern; result.Clear(); watch.Start(); parser.Execute(); double msec = watch.Stop(); // --- 確認. Console.WriteLine("[2] {0,9:0.000} msec", msec); if (result.Count > 0) { FVIL.GS2.CFviGS2Data data = new FVIL.GS2.CFviGS2Data(result[0]); Console.WriteLine("{0,9:0.000},{1,9:0.000},{2:0000}" , data.Position.X + window.X , data.Position.Y + window.Y , data.Score ); } } } } } |
Visual Basic | Copy |
---|---|
Imports System.Collections.Generic Imports System.Text Imports System.Drawing Imports fvalgcli Namespace SampleCode Partial Public Class GS2 <FvPluginExecute()> _ Public Sub ExecuteC2() ' 対象画像の読み込み. Dim src As New FVIL.Data.CFviImage(Defs.TestImageDir & "/fvc06_full.png") ' パタン生成. Dim pat As New FVIL.Data.CFviImage(Defs.TestImageDir & "/fvc06_pattern.png") Dim offset As New FVIL.Data.CFviPoint(0, 0) Dim pattern As New FVIL.GS2.CFviGS2Pattern(pat, offset, FVIL.GS2.Filter.Smooth, Nothing) ' インスタンスの準備. Dim watch As New FVIL.CFviTimeCounter() Dim result As New FVIL.GS2.CFviGS2Result() Dim parser As New FVIL.GS2.CFviGS2() parser.Open() parser.Result = result parser.ExecuteOption = FVIL.GS2.ExecuteOption.Enforce2 parser.ContinueOption = FVIL.GS2.ContinueOption.None parser.Param.Count = 1 parser.Param.ThresholdMid = 5000 parser.Param.ThresholdFinal = 8000 parser.Param.EdgeDetect = False parser.Param.ReverseMode = False parser.Param.FirstUnit = 1 parser.Param.LastUnit = 0 parser.Param.Subpxl = FVIL.GS2.Subpxl.Neib4 ' 1) 処理範囲指定. If True Then src.Window = New Rectangle(756, 127, 354, 74) ' 画像とパタンの設定. parser.SrcImages(0) = src parser.Pattern = pattern result.Clear() watch.Start() parser.Execute() Dim msec As Double = watch.[Stop]() ' --- 確認. Console.WriteLine("[1] {0,9:0.000} msec", msec) If result.Count > 0 Then Dim data As New FVIL.GS2.CFviGS2Data(result(0)) Console.WriteLine("{0,9:0.000},{1,9:0.000},{2:0000}" _ , data.Position.X _ , data.Position.Y _ , data.Score) End If End If ' 2) FIE チャイルド画像指定. If True Then ' 部分画像の生成. Dim window As New Rectangle(756, 127, 354, 74) Dim part As New FVIL.Data.CFviImage(src.GetFIE(), 0, window) ' 画像とパタンの設定. parser.SrcImages(0) = part parser.Pattern = pattern result.Clear() watch.Start() parser.Execute() Dim msec As Double = watch.[Stop]() ' --- 確認. Console.WriteLine("[2] {0,9:0.000} msec", msec) If result.Count > 0 Then Dim data As New FVIL.GS2.CFviGS2Data(result(0)) Console.WriteLine("{0,9:0.000},{1,9:0.000},{2:0000}" _ , data.Position.X + window.X _ , data.Position.Y + window.Y _ , data.Score) End If End If End Sub End Class End Namespace |