最も近いリージョン外のピクセル位置を格納した座標変換マップを作成

Namespace: fvalgcli
Assembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)

Syntax

C#
public static int fnFIE_calc_nearest_pixel_region_excludes(
	FHANDLE hreg,
	FHANDLE hmap,
	f_distance_transform_mode mode
)
Visual Basic
Public Shared Function fnFIE_calc_nearest_pixel_region_excludes ( 
	hreg As FHANDLE,
	hmap As FHANDLE,
	mode As f_distance_transform_mode
) As Integer

Parameters

hreg
Type: fvalgcli..::..FHANDLE
入力REGIONハンドル
hmap
Type: fvalgcli..::..FHANDLE
マップ画像(type:float, double, channels:2)
mode
Type: fvalgcli..::..f_distance_transform_mode
モード
f_distance_transform_mode
  • F_DT_CITY_BLOCK ... 4近傍距離
  • F_DT_CHESS_BOARD ... 8近傍距離
  • F_DT_EUCLIDEAN_EXACT ... ユークリッド距離

Return Value

Type: Int32
以下のエラーコードを返します。

エラーコード:
f_err内容
F_ERR_NONE正常終了
F_ERR_INVALID_OBJECT不正なオブジェクトハンドルが渡された
F_ERR_INVALID_IMAGE不正な画像オブジェクトハンドルが渡された
F_ERR_INVALID_PARAM不正なパラメータが入力されました
F_ERR_CALC_IMPOSSIBLE計算不能 (マップ全体がリージョンに含まれる場合)
F_ERR_NOMEMORYメモリ不足エラー
F_ERR_NO_LICENCEライセンスエラー、または未初期化エラー

Examples

C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using fvalgcli;

namespace TC
{
    public partial class FIE
    {
        [FvPluginExecute]
        public void fnFIE_calc_nearest_pixel_region_excludes()
        {
            var hsrc = FHANDLE.Zero;
            var hmap = FHANDLE.Zero;
            var hdst = FHANDLE.Zero;
            var hcomp = FHANDLE.Zero;
            var hwork = FHANDLE.Zero;
            var hreg = FHANDLE.Zero;
            var hmask = FHANDLE.Zero;

            try
            {
                int width = 200;
                int height = 200;
                var center = DPNT_T.init(100, 100);
                var offset = PNT_T.init(0, 0);

                // 画像の領域を確保.
                hsrc = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_UC8, 1, width, height);
                hmap = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 2, width, height);
                hdst = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_UC8, 1, width, height);
                hcomp = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_UC8, 1, width, height);
                hmask = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_BIN, 1, width, height);
                hwork = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_UC8, 1, width, height);

                // 中心(100,100), 半径50の円形リージョンを作成.
                hreg = api.fnFIE_create_region_circle(center, 50);

                // 入力画像の作成.
                // ここでは、輝度100の一様な灰色の面に上記リージョンを輝度200で書き込み、ノイズを付加した画像を作成する.
                api.fnFIE_img_clear(hwork, 100);
                api.fnFIE_region_decode(hreg, hwork, offset, 200);
                api.fnFIE_add_noise_uniform(hwork, hsrc, -40, 40, 0);

                // 最も近いリージョン外のピクセルを計算.
                api.fnFIE_calc_nearest_pixel_region_excludes(hreg, hmap, f_distance_transform_mode.F_DT_CITY_BLOCK);

                // 最も近いリージョン外のピクセルの輝度値を出力.
                // リージョン外はそのまま.
                api.fnFIE_geotrans_warpping(hsrc, hmap, hwork, IntPtr.Zero, true, f_sampling_mode.F_SAMPLING_NN);

                // 平均化フィルタ(15x15)をかける.
                // 比較のため、元画像にそのままかけた画像も作成.
                api.fnFIE_averageMxN(hwork, hdst, 15, 15, f_border_mode.F_BORDER_CONTINUOUS, 0);
                api.fnFIE_averageMxN(hsrc, hcomp, 15, 15, f_border_mode.F_BORDER_CONTINUOUS, 0);

                // リージョンをマスク画像に変換し、元画像をマスク転送.
                api.fnFIE_img_clear(hmask, 0);
                api.fnFIE_region_decode(hreg, hmask, offset, 1);
                api.fnFIE_img_mask2(hsrc, hmask, hdst);
                api.fnFIE_img_mask2(hsrc, hmask, hcomp);

                // 作成した画像を保存.
                api.fnFIE_save_png(ResultDir + "/fnFIE_calc_nearest_pixel_region_excludes-src_img.png", hsrc, -1);
                api.fnFIE_save_png(ResultDir + "/fnFIE_calc_nearest_pixel_region_excludes-dst_img.png", hdst, -1);
                api.fnFIE_save_png(ResultDir + "/fnFIE_calc_nearest_pixel_region_excludes-comp_img.png", hcomp, -1);
            }
            finally
            {
                // オブジェクトの解放.
                api.fnFIE_free_object(hsrc);
                api.fnFIE_free_object(hmap);
                api.fnFIE_free_object(hdst);
                api.fnFIE_free_object(hcomp);
                api.fnFIE_free_object(hwork);
                api.fnFIE_free_object(hreg);
                api.fnFIE_free_object(hmask);
            }
        }
    }
}


Visual Basic Copy imageCopy
Imports System.Collections.Generic
Imports System.Text
Imports fvalgcli

Public Partial Class FIE
    <FvPluginExecute> _
    Public Sub fnFIE_calc_nearest_pixel_region_excludes()
        Dim hsrc As FHANDLE = FHANDLE.Zero
        Dim hmap As FHANDLE = FHANDLE.Zero
        Dim hdst As FHANDLE = FHANDLE.Zero
        Dim hcomp As FHANDLE = FHANDLE.Zero
        Dim hwork As FHANDLE = FHANDLE.Zero
        Dim hreg As FHANDLE = FHANDLE.Zero
        Dim hmask As FHANDLE = FHANDLE.Zero

        Try
            Dim width As Integer = 200
            Dim height As Integer = 200
            Dim center As DPNT_T = DPNT_T.init(100, 100)
            Dim offset As PNT_T = PNT_T.init(0, 0)

            ' 画像の領域を確保.
            hsrc = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_UC8, 1, width, height)
            hmap = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 2, width, height)
            hdst = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_UC8, 1, width, height)
            hcomp = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_UC8, 1, width, height)
            hmask = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_BIN, 1, width, height)
            hwork = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_UC8, 1, width, height)

            ' 中心(100,100), 半径50の円形リージョンを作成.
            hreg = api.fnFIE_create_region_circle(center, 50)

            ' 入力画像の作成.
            ' ここでは、輝度100の一様な灰色の面に上記リージョンを輝度200で書き込み、ノイズを付加した画像を作成する.
            api.fnFIE_img_clear(hwork, 100)
            api.fnFIE_region_decode(hreg, hwork, offset, 200)
            api.fnFIE_add_noise_uniform(hwork, hsrc, -40, 40, 0)

            ' 最も近いリージョン外のピクセルを計算.
            api.fnFIE_calc_nearest_pixel_region_excludes(hreg, hmap, f_distance_transform_mode.F_DT_CITY_BLOCK)

            ' 最も近いリージョン外のピクセルの輝度値を出力.
            ' リージョン外はそのまま.
            api.fnFIE_geotrans_warpping(hsrc, hmap, hwork, IntPtr.Zero, True, f_sampling_mode.F_SAMPLING_NN)

            ' 平均化フィルタ(15x15)をかける.
            ' 比較のため、元画像にそのままかけた画像も作成.
            api.fnFIE_averageMxN(hwork, hdst, 15, 15, f_border_mode.F_BORDER_CONTINUOUS, 0)
            api.fnFIE_averageMxN(hsrc, hcomp, 15, 15, f_border_mode.F_BORDER_CONTINUOUS, 0)

            ' リージョンをマスク画像に変換し、元画像をマスク転送.
            api.fnFIE_img_clear(hmask, 0)
            api.fnFIE_region_decode(hreg, hmask, offset, 1)
            api.fnFIE_img_mask2(hsrc, hmask, hdst)
            api.fnFIE_img_mask2(hsrc, hmask, hcomp)

            ' 作成した画像を保存.
            api.fnFIE_save_png(ResultDir & "/fnFIE_calc_nearest_pixel_region_excludes-src_img.png", hsrc, -1)
            api.fnFIE_save_png(ResultDir & "/fnFIE_calc_nearest_pixel_region_excludes-dst_img.png", hdst, -1)
            api.fnFIE_save_png(ResultDir & "/fnFIE_calc_nearest_pixel_region_excludes-comp_img.png", hcomp, -1)
        Finally
            ' オブジェクトの解放.
            api.fnFIE_free_object(hsrc)
            api.fnFIE_free_object(hmap)
            api.fnFIE_free_object(hdst)
            api.fnFIE_free_object(hcomp)
            api.fnFIE_free_object(hwork)
            api.fnFIE_free_object(hreg)
            api.fnFIE_free_object(hmask)
        End Try
    End Sub
End Class

See Also