変換前後の点列を用いて座標変換マップを作成

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

See Also