2値画像の構造要素指定 hit-or-miss
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static int fnFIE_hit_or_miss( FHANDLE hsrc_img, FHANDLE hdst_img, FHANDLE hse_FG, FHANDLE hse_BG ) |
Visual Basic |
---|
Public Shared Function fnFIE_hit_or_miss ( hsrc_img As FHANDLE, hdst_img As FHANDLE, hse_FG As FHANDLE, hse_BG As FHANDLE ) As Integer |
Parameters
- hsrc_img
- Type: fvalgcli..::..FHANDLE
処理対象画像( type: bin )
- hdst_img
- Type: fvalgcli..::..FHANDLE
処理結果画像( type: bin )
- hse_FG
- Type: fvalgcli..::..FHANDLE
値が1の画素に対応する構造要素 のハンドル
- hse_BG
- Type: fvalgcli..::..FHANDLE
値が0の画素に対応する構造要素 のハンドル
Return Value
Type: Int32以下のエラーコードを返します。
エラーコード:
f_err | 内容 |
---|---|
F_ERR_NONE | 正常終了 |
F_ERR_INVALID_IMAGE | 不正な画像ハンドルが渡されたため、異常終了 |
F_ERR_INVALID_OBJECT | 構造要素に不正なハンドルが指定されたため異常終了 |
F_ERR_NOMEMORY | メモリ不足で確保に失敗した |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
Examples
C# | Copy |
---|---|
// $Revision: 1.1 $ using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using fvalgcli; namespace TC { public partial class FIE { /// <summary> /// 2値画像の構造要素指定 hit-or-miss. /// </summary> [FvPluginExecute] public void fnFIE_hit_or_miss() { int status = (int)f_err.F_ERR_NONE; FHANDLE hsrc = FHANDLE.Zero; FHANDLE hdst = FHANDLE.Zero; FHANDLE hmask = FHANDLE.Zero; FHANDLE htemp = FHANDLE.Zero; FHANDLE hchild = FHANDLE.Zero; FHANDLE hFG = FHANDLE.Zero; FHANDLE hBG = FHANDLE.Zero; IntPtr pp = FHANDLE.Zero; UCHAR_PTR ptrn1 = UCHAR_PTR.Zero; UCHAR_PTR ptrn2 = UCHAR_PTR.Zero; const int height = 10; const int width = 11; const int height_r = 256; const int width_r = 341; byte[] mask = { 0,0,0,0,0,1,0,0,1,0,0, //0 0,0,0,0,1,1,1,0,1,0,0, //1 0,0,0,1,1,1,1,1,1,0,0, //2 0,0,1,1,1,1,1,1,1,0,0, //3 0,1,1,1,1,1,1,1,1,1,0, //4 1,1,1,1,1,1,1,1,1,1,1, //5 0,0,1,0,0,0,0,0,1,0,0, //6 0,0,1,0,0,0,0,0,1,0,0, //7 0,0,1,0,0,0,0,0,1,0,0, //8 0,0,1,1,1,1,1,1,1,0,0 //9 }; try { hsrc = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_BIN, 1, 256, 256); hdst = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_BIN, 1, width_r, height_r); hmask = FHANDLE.Zero; htemp = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_UC8, 1, 256, 256); hchild = api.fnFIE_img_child_alloc(hdst, 0, 0, 256, 256); hFG = FHANDLE.Zero; hBG = FHANDLE.Zero; pp = FHANDLE.Zero; // 値が1 の画素に対応する構造要素. ptrn1 = UCHAR_PTR.alloc(mask.Length); for (int i = 0; i < mask.Length; i++) ptrn1[i] = mask[i]; // 値が0 の画素に対応する構造要素. ptrn2 = UCHAR_PTR.alloc(mask.Length); for (int i = 0; i < width * height; i++) ptrn2[i] = (byte)((ptrn1[i] == 1) ? 0 : 1); // byte配列をFHANDLE配列に変換. int size = Marshal.SizeOf(mask[0]) * mask.Length; pp = Marshal.AllocHGlobal(size); Marshal.Copy(mask, 0, pp, mask.Length); IntPtr[] pntr = { pp }; // 入力画像の生成. hmask = api.fnFIE_img_root_import_alloc(pntr, 1, (int)f_imgtype.F_IMG_UC8, width, width, height); api.fnFIE_copy_border(hmask, htemp, 0, 0, f_border_mode.F_BORDER_MIRROR2, 0); api.fnFIE_img_copy(htemp, hsrc); // 構造要素オブジェクトの確保と構造要素の設定. hFG = api.fnFIE_morphology_se_alloc(ptrn1, 11, 10, 11, 5, 4); hBG = api.fnFIE_morphology_se_alloc(ptrn2, 11, 10, 11, 5, 4); // 処理の実行. status = api.fnFIE_hit_or_miss(hsrc, hchild, hFG, hBG); // エラー判定. Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 出力画像の保存. api.fnFIE_save_png(ResultDir + "/fnFIE_hit_or_miss.png", hchild, -1); } finally { // オブジェクトの開放. hsrc.Dispose(); hdst.Dispose(); hmask.Dispose(); htemp.Dispose(); hchild.Dispose(); hFG.Dispose(); hBG.Dispose(); ptrn1.Dispose(); ptrn2.Dispose(); if (pp != IntPtr.Zero) Marshal.FreeHGlobal(pp); } } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.1 $ Imports System.Collections.Generic Imports System.Text Imports System.Runtime.InteropServices Imports fvalgcli Public Partial Class FIE ''' <summary> ''' 2値画像の構造要素指定 hit-or-miss. ''' </summary> <FvPluginExecute> _ Public Sub fnFIE_hit_or_miss() Dim status As Integer = CInt(f_err.F_ERR_NONE) Dim hsrc As FHANDLE = FHANDLE.Zero Dim hdst As FHANDLE = FHANDLE.Zero Dim hmask As FHANDLE = FHANDLE.Zero Dim htemp As FHANDLE = FHANDLE.Zero Dim hchild As FHANDLE = FHANDLE.Zero Dim hFG As FHANDLE = FHANDLE.Zero Dim hBG As FHANDLE = FHANDLE.Zero Dim pp As IntPtr = FHANDLE.Zero Dim ptrn1 As UCHAR_PTR = UCHAR_PTR.Zero Dim ptrn2 As UCHAR_PTR = UCHAR_PTR.Zero Const height As Integer = 10 Const width As Integer = 11 Const height_r As Integer = 256 Const width_r As Integer = 341 '0 '1 '2 '3 '4 '5 '6 '7 '8 '9 Dim mask As Byte() = {0, 0, 0, 0, 0, 1, _ 0, 0, 1, 0, 0, 0, _ 0, 0, 0, 1, 1, 1, _ 0, 1, 0, 0, 0, 0, _ 0, 1, 1, 1, 1, 1, _ 1, 0, 0, 0, 0, 1, _ 1, 1, 1, 1, 1, 1, _ 0, 0, 0, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, _ 0, 1, 1, 1, 1, 1, _ 1, 1, 1, 1, 1, 1, _ 0, 0, 1, 0, 0, 0, _ 0, 0, 1, 0, 0, 0, _ 0, 1, 0, 0, 0, 0, _ 0, 1, 0, 0, 0, 0, _ 1, 0, 0, 0, 0, 0, _ 1, 0, 0, 0, 0, 1, _ 1, 1, 1, 1, 1, 1, _ 0, 0} Try hsrc = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_BIN), 1, 256, 256) hdst = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_BIN), 1, width_r, height_r) hmask = FHANDLE.Zero htemp = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_UC8), 1, 256, 256) hchild = api.fnFIE_img_child_alloc(hdst, 0, 0, 256, 256) hFG = FHANDLE.Zero hBG = FHANDLE.Zero pp = FHANDLE.Zero ' 値が1 の画素に対応する構造要素. ptrn1 = UCHAR_PTR.alloc(mask.Length) For i As Integer = 0 To mask.Length - 1 ptrn1(i) = mask(i) Next ' 値が0 の画素に対応する構造要素. ptrn2 = UCHAR_PTR.alloc(mask.Length) For i As Integer = 0 To width * height - 1 ptrn2(i) = CByte(If((ptrn1(i) = 1), 0, 1)) Next ' byte配列をFHANDLE配列に変換. Dim size As Integer = Marshal.SizeOf(mask(0)) * mask.Length pp = Marshal.AllocHGlobal(size) Marshal.Copy(mask, 0, pp, mask.Length) Dim pntr As IntPtr() = {pp} ' 入力画像の生成. hmask = api.fnFIE_img_root_import_alloc(pntr, 1, CInt(f_imgtype.F_IMG_UC8), width, width, height) api.fnFIE_copy_border(hmask, htemp, 0, 0, f_border_mode.F_BORDER_MIRROR2, 0) api.fnFIE_img_copy(htemp, hsrc) ' 構造要素オブジェクトの確保と構造要素の設定. hFG = api.fnFIE_morphology_se_alloc(ptrn1, 11, 10, 11, 5, 4) hBG = api.fnFIE_morphology_se_alloc(ptrn2, 11, 10, 11, 5, 4) ' 処理の実行. status = api.fnFIE_hit_or_miss(hsrc, hchild, hFG, hBG) ' エラー判定. Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 出力画像の保存. api.fnFIE_save_png(ResultDir & "/fnFIE_hit_or_miss.png", hchild, -1) Finally ' オブジェクトの開放. hsrc.Dispose() hdst.Dispose() hmask.Dispose() htemp.Dispose() hchild.Dispose() hFG.Dispose() hBG.Dispose() ptrn1.Dispose() ptrn2.Dispose() If pp <> IntPtr.Zero Then Marshal.FreeHGlobal(pp) End If End Try End Sub End Class |