自動マーク認識&マスク設定

Namespace: fvalgcli
Assembly: 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 imageCopy
//    $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 imageCopy
'    $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

See Also