最も近いリージョン外のピクセル位置を格納した座標変換マップを作成
Namespace: fvalgcliAssembly: 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 |
---|---|
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 |
---|---|
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 |