変換前後の点列を用いて座標変換マップを作成
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static int fnFIE_geotrans_estimate_warp_map( FHANDLE hmap, DPNT_T_PTR pnts_from, DPNT_T_PTR pnts_to, uint pnts_num, f_geotrans_warp_mode warp_mode, double param ) |
Visual Basic |
---|
Public Shared Function fnFIE_geotrans_estimate_warp_map ( hmap As FHANDLE, pnts_from As DPNT_T_PTR, pnts_to As DPNT_T_PTR, pnts_num As UInteger, warp_mode As f_geotrans_warp_mode, param As Double ) As Integer |
Parameters
- hmap
- Type: fvalgcli..::..FHANDLE
座標変換マップ (type:float, double, ch:2)
- pnts_from
- Type: fvalgcli..::..DPNT_T_PTR
座標変換前の点列の座標
- pnts_to
- Type: fvalgcli..::..DPNT_T_PTR
座標変換後の点列の座標
- pnts_num
- Type: System..::..UInt32
pnts_from/pnts_to の点数
- warp_mode
- Type: fvalgcli..::..f_geotrans_warp_mode
変換マップ作成モード
- param
- Type: System..::..Double
変換マップ作成モードごとのパラメータ
Return Value
Type: Int32以下のエラーコードを返します。
エラーコード:
f_err | 内容 |
---|---|
F_ERR_NONE | 正常終了 |
F_ERR_NOMEMORY | メモリ不足で確保に失敗した |
F_ERR_INVALID_PARAM | パラメータ不正 |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクトハンドルが渡された |
F_ERR_CALC_IMPOSSIBLE | 計算不能で異常終了 |
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_geotrans_estimate_warp_map() { int status = (int)f_err.F_ERR_NONE; FHANDLE hmap = IntPtr.Zero; // 座標変換マップ (type:float, double, ch:2). DPNT_T_PTR pnts_from = IntPtr.Zero; // 変換前の点列の座標. DPNT_T_PTR pnts_to = IntPtr.Zero; // 変換後の点列の座標. uint pnts_num = 0; // pnts_from/pnts_to の点数. const int src_w = 32; const int src_h = 32; const int dst_w = src_w * 3; const int dst_h = src_h / 2; try { // アフィン変換前後の点の座標列の確保と値の設定. pnts_num = 3; pnts_from = DPNT_T_PTR.alloc((int)pnts_num); pnts_to = DPNT_T_PTR.alloc((int)pnts_num); pnts_from[0] = DPNT_T.init(0, 0); pnts_from[1] = DPNT_T.init(src_w, 0); pnts_from[2] = DPNT_T.init(src_w, src_h); pnts_to[0] = DPNT_T.init(0, 0); pnts_to[1] = DPNT_T.init(dst_w, 0); pnts_to[2] = DPNT_T.init(dst_w, dst_h); // マップの確保: hmap = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 2, dst_w, dst_h); api.fnFIE_img_clear(hmap, 0); // 処理の実行. status = api.fnFIE_geotrans_estimate_warp_map(hmap, pnts_from, pnts_to, pnts_num, f_geotrans_warp_mode.F_WARP_MODE_AFFINE, 0.0); // エラー判定. Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 得られた変換行列によるアフィン変換の実行. { FHANDLE hsrc = FHANDLE.Zero; FHANDLE hdst = FHANDLE.Zero; try { api.fnFIE_load_png(TestImageDir + "/testdata/png_basi3p04.png", ref hsrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8); hdst = api.fnFIE_img_root_alloc( api.fnFIE_img_get_type(hsrc), api.fnFIE_img_get_channels(hsrc), dst_w, dst_h ); api.fnFIE_geotrans_warpping(hsrc, hmap, hdst, FHANDLE.Zero, true, f_sampling_mode.F_SAMPLING_SUPER); api.fnFIE_save_png(ResultDir + "/fnFIE_geotrans_estimate_warp_map.png", hdst, -1); } finally { hsrc.Dispose(); hdst.Dispose(); } } } finally { // オブジェクトの開放. hmap.Dispose(); pnts_from.Dispose(); pnts_to.Dispose(); } } } } |
Visual Basic | Copy |
---|---|
Imports System.Collections.Generic Imports System.Text Imports fvalgcli Public Partial Class FIE <FvPluginExecute> _ Public Sub fnFIE_geotrans_estimate_warp_map() Dim status As Integer = CInt(f_err.F_ERR_NONE) Dim hmap As FHANDLE = IntPtr.Zero ' 座標変換マップ (type:float, double, ch:2). Dim pnts_from As DPNT_T_PTR = IntPtr.Zero ' 変換前の点列の座標. Dim pnts_to As DPNT_T_PTR = IntPtr.Zero ' 変換後の点列の座標. Dim pnts_num As UInteger = 0 ' pnts_from/pnts_to の点数. Const src_w As Integer = 32 Const src_h As Integer = 32 Const dst_w As Integer = src_w * 3 Const dst_h As Integer = src_h \ 2 Try ' アフィン変換前後の点の座標列の確保と値の設定. pnts_num = 3 pnts_from = DPNT_T_PTR.alloc(CInt(pnts_num)) pnts_to = DPNT_T_PTR.alloc(CInt(pnts_num)) pnts_from(0) = DPNT_T.init(0, 0) pnts_from(1) = DPNT_T.init(src_w, 0) pnts_from(2) = DPNT_T.init(src_w, src_h) pnts_to(0) = DPNT_T.init(0, 0) pnts_to(1) = DPNT_T.init(dst_w, 0) pnts_to(2) = DPNT_T.init(dst_w, dst_h) ' マップの確保: hmap = api.fnFIE_img_root_alloc(f_imgtype.F_IMG_DOUBLE, 2, dst_w, dst_h) api.fnFIE_img_clear(hmap, 0) ' 処理の実行. status = api.fnFIE_geotrans_estimate_warp_map(hmap, pnts_from, pnts_to, pnts_num, f_geotrans_warp_mode.F_WARP_MODE_AFFINE, 0.0) ' エラー判定. Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 得られた変換行列によるアフィン変換の実行. If True Then Dim hsrc As FHANDLE = FHANDLE.Zero Dim hdst As FHANDLE = FHANDLE.Zero Try api.fnFIE_load_png(TestImageDir & "/testdata/png_basi3p04.png", hsrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8) hdst = api.fnFIE_img_root_alloc( _ api.fnFIE_img_get_type(hsrc), _ api.fnFIE_img_get_channels(hsrc), _ dst_w, dst_h) api.fnFIE_geotrans_warpping(hsrc, hmap, hdst, FHANDLE.Zero, True, f_sampling_mode.F_SAMPLING_SUPER) api.fnFIE_save_png(ResultDir & "/fnFIE_geotrans_estimate_warp_map.png", hdst, -1) Finally hsrc.Dispose() hdst.Dispose() End Try End If Finally ' オブジェクトの開放. hmap.Dispose() pnts_from.Dispose() pnts_to.Dispose() End Try End Sub End Class |