自動マーク認識&マスク設定
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static int fnFIE_fpm_pattern_automask( FHANDLE hsrc, f_fpm_markshape shape, bool hole, int offset, int threshold, int mask_type, ref FHANDLE hmask, ref F_FPM_MARKINFO fpm_markinfo, ref int score ) |
Visual Basic |
---|
Public Shared Function fnFIE_fpm_pattern_automask ( hsrc As FHANDLE, shape As f_fpm_markshape, hole As Boolean, offset As Integer, threshold As Integer, mask_type As Integer, ByRef hmask As FHANDLE, ByRef fpm_markinfo As F_FPM_MARKINFO, ByRef score As Integer ) As Integer |
Parameters
- hsrc
- Type: fvalgcli..::..FHANDLE
対象画像オブジェクト(type:uc8のみ) チャネル数は 1 でなければいけません。
- shape
- Type: fvalgcli..::..f_fpm_markshape
マーク形状の指定- F_FPM_SHAPE_AUTO を実行した場合には形状、中抜きの有無の検出を自動で行いますが、全ての形状に対しての検出処理を行うため処理時間は掛かってしまいます。
- F_FPM_SHAPE_AUTO 自動判別
- F_FPM_SHAPE_CIRC 円
- F_FPM_SHAPE_RECT 長方形
- F_FPM_SHAPE_CROSS 十字
- hole
- Type: System..::..Boolean
中抜きの有無。shape にF_FPM_SHAPE_AUTOを指定した場合にはこの値は使用せず、中抜きの有無を自動で検出します。- TRUE 中抜きあり
- FALSE 中抜きなし
- offset
- Type: System..::..Int32
検出したマークの周辺でマスクをキャンセルする(エッジを残す)際の片幅を指定します(1≦offset≦10) 輪郭が綺麗でないマークの場合にはこの値を大きめにします(推奨値:3,単位:画素)。
- threshold
- Type: System..::..Int32
スコア閾値(範囲:10≦threshold≦99) この値を超えたスコアを持つパタンの結果を格納します(推奨値:50)。
- mask_type
- Type: System..::..Int32
作成するマスク画像オブジェクトの画像タイプを指定します。FPMで使用するマスクを生成する場合には 0 の uc8 を指定してください。- 0 uc8 の画像生成
- 1 bin の画像生成
- hmask
- Type: fvalgcli..::..FHANDLE%
マスク画像を格納する画像オブジェクトへのポインタ hsrcと同じサイズの画像オブジェクト(uc8 or bin)が生成され、マスクをONの箇所には1, マスクをOFFの箇所には0が入ります。 hmask に IntPtr.Zero を指定した場合には結果の格納を行いません。 *hmask の値は0で初期化しておいてください。
- fpm_markinfo
- Type: fvalgcli..::..F_FPM_MARKINFO%
検出したFPMマーク情報を格納する構造体のポインタ fpm_markinfoに IntPtr.Zero を指定した場合には結果の格納を行いません。
- score
- Type: System..::..Int32%
正常終了した場合のマークのスコア(100点満点) IntPtr.Zero を指定した場合には結果の格納を行いません。
Return Value
Type: Int32以下のエラーコードを返します。
エラーコード:
f_err | 内容 |
---|---|
F_ERR_NONE | 正常終了 |
F_ERR_CALC_IMPOSSIBLE | 計算不可能(対応するマークが見つかりませんでした) |
F_ERR_NOMEMORY | メモリ不足 |
F_ERR_INVALID_PARAM | 不正なパラメータが入力されました |
F_ERR_FPM_NOFEATURE | 特徴量計測不可 |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
Remarks
Examples
C# | Copy |
---|---|
// $Revision: 1.1 $ using System; using System.Collections.Generic; using System.Text; using fvalgcli; namespace TC { public partial class FIE { [FvPluginExecute] public void fnFIE_fpm_pattern_automask() { int status = (int)f_err.F_ERR_NONE; FHANDLE hsrc = FHANDLE.Zero; // 処理画像. FHANDLE hroi = FHANDLE.Zero; // 処理範囲. FHANDLE hdst = FHANDLE.Zero; // 出力画像. try { // 入力画像ファイルのロード. api.fnFIE_load_img_file(TestImageDir + "/testdata/fpm_pattern_cross.bmp", ref hsrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8); // 処理範囲. hroi = api.fnFIE_img_child_alloc(hsrc, 104, 90, 97, 83); // パラメータ. f_fpm_markshape shape = f_fpm_markshape.F_FPM_SHAPE_CROSS; bool hole = false; int offset = 2; int threshold = 60; int mask_type = 0; // 0:UC8, 1:BIN F_FPM_MARKINFO fpm_markinfo = new F_FPM_MARKINFO(); int score = 0; // 処理の実行. status = api.fnFIE_fpm_pattern_automask( hroi, shape, hole, offset, threshold, mask_type, ref hdst, ref fpm_markinfo, ref score); // エラー判定. Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 出力画像の保存. api.fnFIE_save_png(ResultDir + "/fnFIE_fpm_pattern_automask.png", hdst, -1); // 確認. Console.WriteLine("fnFIE_fpm_pattern_make_image"); Console.WriteLine("score ={0}", score); Console.WriteLine("shape ={0}", fpm_markinfo.shape); Console.WriteLine("mark_n={0}", fpm_markinfo.mark_n); Console.WriteLine("vrtx_n={0}", fpm_markinfo.vrtx_n); for (int i = 0; i < fpm_markinfo.mark_n; i++) { Console.WriteLine("center[{0}]={1},{2}", i, fpm_markinfo.center[i].x, fpm_markinfo.center[i].y); Console.WriteLine("radius[{0}]={1}", i, fpm_markinfo.radius[i]); Console.WriteLine("deg [{0}]={1}", i, fpm_markinfo.deg[i]); for (int j = 0; j < fpm_markinfo.vrtx_n; j++) { DPNT_T vrtx = fpm_markinfo.vrtx[i * defs.F_FPM_MAX_SHAPE_N + j]; Console.WriteLine("vrtx[{0},{1}]={2},{3}", i, j, vrtx.x, vrtx.y); } } } finally { // オブジェクトの開放. hsrc.Dispose(); hroi.Dispose(); hdst.Dispose(); } } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.1 $ Imports System.Collections.Generic Imports System.Text Imports fvalgcli Public Partial Class FIE <FvPluginExecute> _ Public Sub fnFIE_fpm_pattern_automask() Dim status As Integer = CInt(f_err.F_ERR_NONE) Dim hsrc As FHANDLE = FHANDLE.Zero ' 処理画像. Dim hroi As FHANDLE = FHANDLE.Zero ' 処理範囲. Dim hdst As FHANDLE = FHANDLE.Zero ' 出力画像. Try ' 入力画像ファイルのロード. api.fnFIE_load_img_file(TestImageDir & "/testdata/fpm_pattern_cross.bmp", hsrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8) ' 処理範囲. hroi = api.fnFIE_img_child_alloc(hsrc, 104, 90, 97, 83) ' パラメータ. Dim shape As f_fpm_markshape = f_fpm_markshape.F_FPM_SHAPE_CROSS Dim hole As Boolean = False Dim offset As Integer = 2 Dim threshold As Integer = 60 Dim mask_type As Integer = 0 ' 0:UC8, 1:BIN Dim fpm_markinfo As New F_FPM_MARKINFO() Dim score As Integer = 0 ' 処理の実行. status = api.fnFIE_fpm_pattern_automask(hroi, shape, hole, offset, threshold, mask_type, _ hdst, fpm_markinfo, score) ' エラー判定. Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 出力画像の保存. api.fnFIE_save_png(ResultDir & "/fnFIE_fpm_pattern_automask.png", hdst, -1) ' 確認. Console.WriteLine("fnFIE_fpm_pattern_make_image") Console.WriteLine("score ={0}", score) Console.WriteLine("shape ={0}", fpm_markinfo.shape) Console.WriteLine("mark_n={0}", fpm_markinfo.mark_n) Console.WriteLine("vrtx_n={0}", fpm_markinfo.vrtx_n) For i As Integer = 0 To fpm_markinfo.mark_n - 1 Console.WriteLine("center[{0}]={1},{2}", i, fpm_markinfo.center(i).x, fpm_markinfo.center(i).y) Console.WriteLine("radius[{0}]={1}", i, fpm_markinfo.radius(i)) Console.WriteLine("deg [{0}]={1}", i, fpm_markinfo.deg(i)) For j As Integer = 0 To fpm_markinfo.vrtx_n - 1 Dim vrtx As DPNT_T = fpm_markinfo.vrtx(i * defs.F_FPM_MAX_SHAPE_N + j) Console.WriteLine("vrtx[{0},{1}]={2},{3}", i, j, vrtx.x, vrtx.y) Next Next Finally ' オブジェクトの開放. hsrc.Dispose() hroi.Dispose() hdst.Dispose() End Try End Sub End Class |